네이버 API와 네이버 광고 API를 이용해서 블로그 등록시 참고할 나만의 키워드 마스터를 만들어보겠습니다.
키워드에 대한 블로그의 200위내 들어갈 비율과 연관 검색어들의 검색 정보들을 확인하겠습니다.
아래의 1,2번의 데이터를 활용해서 만들예정이니 참고하셔도 좋습니다.
1. 네이버 검색광고 API 연관검색어 결과 가져오기(파이썬)
2. [네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정
3. 나만의 키워드 마스터 만들기
1. 네이버 검색광고 API 연관검색어 결과 가져오기(파이썬)
2. [네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정
3. 나만의 키워드 마스터 만들기
네이버 광고 API를 이용해서 입력 키워드 및 연관 검색어의 검색 정보를 가져오는 코드입니다.
API_KEY, SECRET_KEY,CUSTOMER_ID 는 본인의 데이터 입력이 필요합니다.
# 네이버 광고 API 연관키워드 수집
import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt
import time
import random
import requests
import hashlib
import hmac
import base64
class Signature:
@staticmethod
def generate(timestamp, method, uri, secret_key):
message = "{}.{}.{}".format(timestamp, method, uri)
hash = hmac.new(bytes(secret_key, "utf-8"), bytes(message, "utf-8"), hashlib.sha256)
hash.hexdigest()
return base64.b64encode(hash.digest())
def get_header(method, uri, api_key, secret_key, customer_id):
timestamp = str(round(time.time() * 1000))
signature = Signature.generate(timestamp, method, uri, secret_key)
return {'Content-Type': 'application/json; charset=UTF-8', 'X-Timestamp': timestamp,
'X-API-KEY': api_key, 'X-Customer': str(customer_id), 'X-Signature': signature}
def getrelkeyword(hintKeywords):
BASE_URL = 'https://api.naver.com'
API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
CUSTOMER_ID = 'YOUR_CUSTOMER_ID'
uri = '/keywordstool'
method = 'GET'
params={}
params['hintKeywords']=hintKeywords
params['showDetail']='1'
r=requests.get(BASE_URL + uri, params=params,
headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))
result=pd.DataFrame(r.json()['keywordList'])
result.columns=['연관키워드','월간검색수(PC)','월간검색수(모바일)',
'월평균클릭수(PC)','월평균클릭수(모바일)','월평균클릭률(PC)',
'월평균클릭률(모바일)','월평균노출광고수','경쟁정도']
return result
getrelkeyword 함수에서 keyword정보를 받아 연관 검색어 정보를 검색 및 저장을 합니다.
def getrelkeyword(hintKeywords):
결과를 DataFrame으로 변환하고 column을 한글로 변경했습니다.
result=pd.DataFrame(r.json()['keywordList'])
result.columns=['연관키워드','월간검색수(PC)','월간검색수(모바일)',
'월평균클릭수(PC)','월평균클릭수(모바일)','월평균클릭률(PC)',
'월평균클릭률(모바일)','월평균노출광고수','경쟁정도']
네이버 API를 이용해 검색 키워드에 대한 블로그 순위에 대한 비율을 구하는 코드입니다.
client_id, client_secret는 본인 데이터의 입력이 필요합니다.
# 검색어의 블로그 순위에 들어갈 비율
import os
import sys
import urllib.request
import json
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
def getapiresult(client_id,client_secret,query,display=10,start=1,sort='sim'):
encText = urllib.parse.quote(query)
url = "https://openapi.naver.com/v1/search/blog?query=" + encText + \
"&display=" + str(display) + "&start=" + str(start) + "&sort=" + sort
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
response_json = json.loads(response_body)
else:
print("Error Code:" + rescode)
return pd.DataFrame(response_json['items'])
def getblogcnt(keyword):
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
query = keyword
display=100
start=1
sort='sim'
# 정확도순 등록 데이터 확인
result_all=pd.DataFrame()
for i in range(0,2):
start= 1 + 100*i
result_blog= getapiresult(client_id,client_secret,query,display,start,sort)
result_blog['date']=pd.to_datetime(result_blog['postdate'], format='%Y%m%d') #post
result_blog['date_year']=result_blog['postdate'].str[:4]
result_blog['date_month']=result_blog['postdate'].str[4:6]
result_blog['date_ym']=result_blog['postdate'].str[:6]
result_year=result_blog['date_year'].value_counts().sort_index(ascending=False)
plt.figure(figsize=(8,3))
plt.bar(result_year.index, result_year.values)
plt.xticks(rotation=90)
plt.title('연도별 등록수(' + keyword + ')')
plt.show()
result_ym=result_blog['date_ym'].value_counts().sort_index(ascending=False)
plt.figure(figsize=(8,3))
plt.bar(result_ym.index, result_ym.values)
plt.xticks(rotation=90)
plt.title('월별 등록수(' + keyword + ')')
plt.show()
# 최신순 등록 데이터 확인
sort='date'
result_all=pd.DataFrame()
for i in range(0,2):
start= 1 + 100*i
result_date= getapiresult(client_id,client_secret,query,display,start,sort)
result_date['date']=pd.to_datetime(result_date['postdate'], format='%Y%m%d')
result_date['date_year']=result_date['postdate'].str[:4]
result_date['date_ym']=result_date['postdate'].str[:6]
result_30days=result_date.loc[result_date['date'] > (result_date['date'] + timedelta(days=-30)), :]
recent_blog_days=(result_30days['date'].max()-result_30days['date'].min()).days+1
recent_cnt=200/recent_blog_days
result_blog_days=result_blog.loc[result_blog['date'] > (datetime.now() + timedelta(days=-300)), :]
blog_cnt=result_blog_days.shape[0]
returnvalue={}
returnvalue['recent_blog_days']=str(recent_blog_days)
returnvalue['recent_cnt']=str(recent_cnt)
returnvalue['blog_cnt']=str(blog_cnt)
returnvalue['blog_cnt_300days']=str(blog_cnt/300)
returnvalue['ratio']=str((blog_cnt/300)/recent_cnt*100)
return returnvalue
API 결과를 조회해서 결과를 DataFrame으로 저장했습니다.
def getapiresult(client_id,client_secret,query,display=10,start=1,sort='sim'):
...중략...
return pd.DataFrame(response_json['items'])
키워드에 대한 결과를 returnvalue의 dictionary 형태로 저장 및 return했습니다.
def getblogcnt(keyword):
...중략...
returnvalue['recent_blog_days']=str(recent_blog_days)
returnvalue['recent_cnt']=str(recent_cnt)
returnvalue['blog_cnt']=str(blog_cnt)
returnvalue['blog_cnt_300days']=str(blog_cnt/300)
returnvalue['ratio']=str(blog_cnt/recent_cnt)
return returnvalue
keyword정보를 입력 받아서 각 결과를 출력하는 부분입니다.
# keyword를 입력 받아 결과를 출력하는 함수
from IPython.display import display
def exeresults(keyword):
result=getblogcnt(keyword)
print('키워드 : ' + keyword)
print('블로그 200개 등록된 기간 : ' + result['recent_blog_days'] + '일')
print('최근 1일에 등록된 블로그 수 : ' + result['recent_cnt'] + '개')
print('300일간 순위 200위안에 등록된 블로그 : ', result['blog_cnt'] + '개')
print('200위내 1일 평균 등록 블로그 수 : ', result['blog_cnt_300days'] + '개')
print('최근 1일에 등록된 블로그 중 200위내에 들어갈 비율은 "',result['ratio'], '%" 입니다.')
hintKeywords=[keyword.replace(' ','')]
resultdf = getrelkeyword(hintKeywords)
print('연관 키워드의 검색정보')
display(resultdf.head(6))
keyword를 제주도 중문 맛집 으로 검색해보겠습니다.
keyword='제주도 중문 맛집'
exeresults(keyword)
2022년의 블로그 등록수가 많고, 2022년 9월의 등록수가 많은 것을 확인할수 있습니다.
200위내 1일 평균으로 봤을 때 신규로 작성된 블로그가 200위내에 들어갈 비율은 0.1% 정도가 되네요
검색 키워드 및 연관 검색어 들에 대한 검색 정보가 되겠습니다.
다른 키워드로 검색해 보겠습니다.
keyword='경복궁 야간개장'
exeresults(keyword)
추가로 월별 실 검색수를 확인해 보시는 것도 좋을것 같습니다.
이 부분은 다음에 현재의 내용과 합쳐서 해보도록 하겠습니다.
이상으로 나만의 키워드 마스터를 만들어 봤습니다.
'API' 카테고리의 다른 글
[전자공시 Dart API] 가입 및 인증키(API Key) 확인하기 (4) | 2022.10.18 |
---|---|
[SK Open API] 여행지의 추정 여행자수 및 체류시간 구하기 (4) | 2022.10.17 |
[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥) (4) | 2022.10.15 |
[네이버 SK API] 월별 검색수와 여행자수 비교하기(파이썬) (4) | 2022.10.14 |
[SK Open API] 검색 지역의 월간 추정 여행자수 가져오기 (4) | 2022.10.14 |