본문 바로가기
  • 사진, 커피, 그리고 광고를 좋아합니다
마케팅/디지털 마케팅

마케터가 사용하는 네이버 광고 API : 키워드 트렌드 분석, 코드 404 오류 해결

by 섭케터 2024. 8. 7.

안녕하세요. 광고, 분석, 커피를 좋아하는 디지비션입니다:)

오늘은 네이버 광고 AP를 사용하면서 겪었던 문제와 그 해결 과정을 공유하려고 합니다. API를 사용하면서 요청이 안되었던 코드를 어떻게 요청이 작동할 수 있는 코드로 변경했는지, 그 과정을 상세히 설명해 드리겠습니다!

네이버 광고 API를 사용하고 있는 디지비션 마케터, 검색량을 확인하고 있는 모습

마케팅을 하면서 검색어의 트렌드를 아는 것이나, 우리가 타겟하는 키워드, 그리고 우리 브랜드 키워드의 검색량을 보는 것은 중요합니다. 보통 월 검색량을 보는데, 마케팅 활동 성과를 확인하기 위해 일 검색량을 파악하고자 광고 API를 사용했습니다.


1. 안됐던 코드의 문제점

처음에 작성한 코드는 다음과 같은 문제점들이 있었습니다:
1. 모든 로직이 하나의 큰 함수에 집중되어 있어 가독성이 떨어졌다.
2. 에러 처리가 제대로 되지 않아 API 호출 실패 시 프로그램이 중단되었다.
3. API 인증을 위한 서명 생성 로직이 명확지 않았다.

 

기존 코드

def get_naver_ad_data(keyword):
    NAVER_AD_API_URL = 'API_URL'
    NAVER_AD_API_KEY = 'API_KEY'
    NAVER_AD_SECRET_KEY = 'SECRET_KEY'
    NAVER_AD_CUSTOMER_ID = 'ID'
    
    timestamp = str(round(time.time() * 1000))
    message = f"{timestamp}.GET./keywordstool"
    signature = base64.b64encode(hmac.new(bytes(NAVER_AD_SECRET_KEY, 'utf-8'), bytes(message, 'utf-8'), hashlib.sha256).digest()).decode()
    
    headers = {
        "X-Timestamp": timestamp,
        "X-API-KEY": NAVER_AD_API_KEY,
        "X-Customer": NAVER_AD_CUSTOMER_ID,
        "X-Signature": signature,
    }
    
    params = {
        "hintKeywords": keyword,
        "showDetail": 1
    }
    
    response = requests.get(f"{NAVER_AD_API_URL}/keywordstool", params=params, headers=headers)
    data = response.json()
    
    # 데이터 처리 로직...
    
    return total_qc_cnt

2. 문제 해결 과정

위와 같은 문제점들을 해결하기 위해 아래와 같이 개선했습니다.

 

2.1 코드 구조 개선

코드를 여러 함수로 분리하여 각 부분의 역할을 명확히 했습니다.

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)
        return base64.b64encode(hash.digest()).decode()

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 get_naver_ad_data(keyword):
    # API 호출 및 데이터 처리 로직

 

2.2 에러 처리 개선

try-except 구문을 사용해 API 호출 중 발생할 수 있는 오류를 적절히 처리했습니다.

def get_naver_ad_data(keyword):
    try:
        response = requests.get(BASE_URL + uri, params=params, headers=headers)
        response.raise_for_status()
        data = response.json()
        
        # 데이터 처리 로직...
        
        return total_qc_cnt
    except requests.RequestException as e:
        print(f"Error fetching Naver Ad data for '{keyword}': {e}")
        return 0

 

2.3 인증 로직 명확화

Signature 클래스를 만들어 API 인증을 위한 서명 로직을 분리했습니다.

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)
        return base64.b64encode(hash.digest()).decode()

 

3. 개선된 점

1. 모듈화 : 코드가 여러 함수로 나뉘어 있어 각 부분의 역할이 명확합니다.
2. 에러처리 : try-except 구문을 사용하여 API 호출 중 발생할 수 있는 오류를 잡아냅니다.
3. 데이터 강제 : API로 부터 받은 데이터를 사용하기 좋은 형태로 변환합니다.


 

4. 사용 예시

keyword = "올리브영"
result = get_naver_ad_data(keyword)
print(f"'{keyword}'의 월간 검색 수: {result}")

활용 방안 및 마무리

이 코드를 기반으로 마케터분들이 여러 프로젝트에 네이버 광고 API를 적용할 수 있을 것으로 생각됩니다. API를 통해 얻은 데이터로 키워드 트렌드를 분석하고, 효과적인 마케팅 전략을 수립하는 데 활용할 수 있을 것이라 생각됩니다!

더 나아가서 코드를 확장하여 자동화된 리포트 생성, 실시간 키워드 모니터링 시스템 등을 구축할 수 있을 것입니다. 그로스, 퍼포먼스, 콘텐츠 마케터 분들의 창의력을 발휘해 보세요!

저는 위와 같은 코드를 이용해 바이럴 분야에서의 일 검색량을 찾아, 노출량을 설정하고 이에 대한 클릭률을 구하고 있습니다. 또한 PPL 분야에서도 저희가 의도한 키워드의 검색량이 얼마큼 검색되었는지 확인하고 있습니다. 이를 통해 브랜드 검색광고를 거치지 않아도 경쟁사의 의도된 키워드와 광고 전략등을 해킹할 수 있습니다.

무엇보다도 우리의 마케팅 활동(브랜딩)이 잘 되고 있는지 확인할 수 있어 많은 도움이 되고 있습니다.


오늘도 읽어주셔서 감사합니다. 뒷모습의 아름다움을 담는 디지비션 =)

 

사진 계정 : @digibition (Instagram)
커피 계정 : @supfo.od (Instagram)

 

minseob Lim

커피를 좋아합니다. 특히 다양한 걸 조금씩 먹는걸...

www.youtube.com

댓글