본문 바로가기
코딩 이야기/학습용 소스코드

네이버 검색광고 API 사용하기 - Source Code

by 아재코더 2021. 12. 14.

네이버 검색광고 API 사용하기 - Python 3.8.9

​import time
import random
import requests
import pandas as pd
import signaturehelper

def get_header(method, uri, api_key, secret_key, customer_id):
    timestamp = str(round(time.time() * 1000))
    signature = signaturehelper.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}

BASE_URL = 'https://api.naver.com'
method = "GET"

uri = '/keywordstool'
API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SECRET_KEY = "​xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
CUSTOMER_ID = "​xxxxxxx"

r = requests.get(BASE_URL + uri+'?hintKeywords={}&showDetail=1'.format(input('연관키워드를 조회할 키워드를 입력!!!\n')),
                 headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

r.json()['keywordList'][0]
df = pd.DataFrame(r.json()['keywordList'])

df.rename({'compIdx': '경쟁정도', 'monthlyAveMobileClkCnt': '월평균클릭수_모바일',
           'monthlyAveMobileCtr': '월평균클릭률_모바일', 'monthlyAvePcClkCnt': '월평균클릭수_PC',
           'monthlyAvePcCtr': '월평균클릭률_PC', 'monthlyMobileQcCnt': '월간검색수_모바일',
           'monthlyPcQcCnt': '월간검색수_PC', 'plAvgDepth': '월평균노출광고수',
           'relKeyword': '연관키워드'}, axis=1, inplace=True)

df = df[['연관키워드', '월간검색수_PC', '월간검색수_모바일', '월평균클릭수_PC', '월평균클릭수_모바일',
        '월평균클릭률_PC', '월평균클릭률_모바일', '경쟁정도', '월평균노출광고수']]

print(df)

API Key, ID는 별도로 받아서 "xxxxxxxxxxxxxxxxx"에 넣고 실행하면 됩니다.

만약 import signaturehelper에서 error가 발생하면 아래 코드를 작성하여 signaturehelper.py로 저장 후 다시 실행해 보세요~!

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())

댓글