본문 바로가기

API

[네이버 API] 블로그 나만의 키워드 마스터 만들기(파이썬)

반응형

네이버 API와 네이버 광고 API를 이용해서 블로그 등록시 참고할 나만의 키워드 마스터를 만들어보겠습니다.

키워드에 대한 블로그의 200위내 들어갈 비율과 연관 검색어들의 검색 정보들을 확인하겠습니다.

아래의 1,2번의 데이터를 활용해서 만들예정이니 참고하셔도 좋습니다.

 

1. 네이버 검색광고 API 연관검색어 결과 가져오기(파이썬)

2. [네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정

3. 나만의 키워드 마스터 만들기

 

1. 네이버 검색광고 API 연관검색어 결과 가져오기(파이썬)

https://yenpa.tistory.com/12

 

네이버 검색광고 API 연관검색어 결과 가져오기(파이썬)

naver 검색광고 API에서 연관검색어에 대한 결과를 가져오는 방법을 확인해보겠습니다. 1. naver검색광고 API 가입 및 API key확인 2. 연관검색어 결과 확인 1. naver검색광고 API 가입 및 API key확인 가입이

yenpa.tistory.com

 

2. [네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정

https://yenpa.tistory.com/8

 

[네이버 개발자센터 API] 키워드로 블로그 순위에 들어갈 비율을 추정

네이버 API를 이용해서 검색 키워드의 기간별 등록 현황을 구하고, 최신 블로그의 기간별 등록 현황을 구해 순위에 들어갈 비율을 추정해보겠습니다. 1. 네이버 API에서 블로그 데이터를 가져올

yenpa.tistory.com

 

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)

 

추가로 월별 실 검색수를 확인해 보시는 것도 좋을것 같습니다.

https://yenpa.tistory.com/15

 

네이버 API 통합 검색 트렌드의 월간 실 검색수 추정하기(파이썬)

네이버API 통합 검색 트렌드의 월별 상대 검색 결과를 절대 검색 결과로 추정해보겠습니다. 네이버 API의 통합검색 트렌드와 네이버 검색광고 API의 연관검색어를 이용하겠습니다. 1. 네이버 개발

yenpa.tistory.com

이 부분은 다음에 현재의 내용과 합쳐서 해보도록 하겠습니다.

 

이상으로 나만의 키워드 마스터를 만들어 봤습니다.

반응형