본문 바로가기
Python

[파이썬] 네이버 광고 API 광고 관리 코드 모음 정리

by 퍼포먼스마케팅코더 2022. 12. 3.
반응형

[파이썬] 네이버 광고 API 광고 관리 코드 모음 정리

근황에 대해서 말씀드리자면 제가 인하우스 퍼포먼스 마케터로서 뭔가 새로운 분야에서 시작을 하게 됐습니다. 이유는 아주 간 단합니다. 이전에 데이터 분석 이런 것들을 했었었는데 더 광고 매체 운영 채널별로 다양한 광고를 운영을 해보면서 안에 데이터들이 나오겠죠. 이런 걸 통해서 효율을 올려보고 자 해서 하나씩 습득을 하고 있습니다. 

 

제가 첫 번째로 손댔던 게 네이버 광고죠. 지금 네이버 광고가 힘듭니다. 맨날 입찰과 노예처럼 하루하루를 계속 지금 보내고 있어요. 매일매일 실시간으로 모니터링을 하고 있고 네이버 광고는 한 실시간으로 광고 보여주는 게 아니고 한 4시간 전 거를 광고로 보여줍니다. 그걸 가지고 대충 어느 정도 예산을 쓰겠다. 지금 어떻게 지금 광고비가 소진이 되고 있고 이런 것들을 계속 체크를 하고 있는데 것을 자동화로 볼 수 있는 방법들이 뭐가 있을까 부분들을 계속 찾아보고 있습니다. 

 

와중에서도 네이버는 지금 api로 현재 지금 광고의 데이터를 볼 수 있도록 현재 지금 제공을 하고 있습니다. 현재 지금 저 같은 경우에도 현재 지금 이걸 하나하나씩 뜯어서 보고 있기는 한데 사이트가 있기는 합니다. 이 사이트가 제가 깃허브 사이트가 있거든요. 밑에다가 적어 두기는 할 건데 거기에 들어가서 보면 광고 관리에 아주 베이직 기초적인 부분들을 자세히 살펴볼 수 있습니다. 그거를 보시면 될 것 같은데 제가 몇몇 가지를 기본적으로 활용을 해왔었던 결과가 뭐였냐면 광고가 api 그게 더럽습니다. 더럽게 나와요.

 

각각의 광고 채널 광고 캠페인이죠. 광고 캠페인에 따른 아이디가 있고 광고 그룹에 따른 아이디 그다음에 광고 그룹 안에 있는 키워드에 따른 아이디가 있습니다 해서 아이디를 전부 다 알아야 되는 그게 번거로운 부분들이 있습니다. 이디를 알고 있으면 아이디를 입력을 해놓고 api로 호출을 하면 그거에 맞게끔 광고 데이터가 지금 어떻게 나오고 있는지 파악을 할 수가 있죠. 그렇지만 번거로운 글은 맞습니다.

 

아주 번거롭게 만들어 놨어요. 그래도 api로 제공해주는 게 별로 없어서 좋다고 생각을 하기 때문에 그리고 일반 퍼포먼스 마케터들 분들도 다 입찰가를 다 수동으로 조정을 해서 실시간으로 계속 체크를 하면서 하는 걸로 알고 있습니다.자동 입찰 솔루션을 받아서 것도 진행하는 부분도 없지 않아 있지만 아무리 그래도 책임감 있는 마케 터 하신 분들은 그걸 일일이 하나하나씩 다 확인을 하는 부분들이 있다고는 들었습니다.

 

 

https://github.com/naver/searchad-apidoc/blob/master/python-sample/examples/ad_management_sample.py

네이버 광고 API 광고 관리 코드 모음 정리

오늘 말씀드리는 파이썬 코드는 말 그대로 네이버 광고 api를 통해서 쓸 수 있는 광고 관리를 통한 것들이 뭐가 있는지를 전반위적으로 볼 수 있는 코드예요. 아래의 내용을 찾아보시면 됩니다. 아주 간단합니다. api 키와 그 유저의 고유 번호 입력을 해놓고 아래에 써져 있었던 이 부분의 예시 부분을 참고를 해서 들어가 보면 하나씩 다 확인을 하실 수 있습니다. 저도 아주 기초적인 부분을 지금 확인하고 있는 단계라 이걸 넘어가면 최종적으로 하나씩 뭔가 공유할 수 있는 이런 것들이 나오지 않을까 싶습니다. 오늘은 여기까지입니다. 월드컵 때문에 기 분 좋은 하루에 보내기도 했었었는데 하나씩 끝나면 제가 그동안 실 무적으로 했었던 것들 하나씩 정리를 해서 올려 볼까 합니다. 오늘 즐거운 하루 보내십시오. 여러분들 몸 건강하시고 겨울입니다. 많이 추워요. 따뜻하게 지 내시고 항상 늘 좋은 하루만 되시길 바랍니다. 오늘도 여기까지입니다.

import time
import random
import requests

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'
API_KEY = '<API_KEY>'
SECRET_KEY = '<SECRET_KEY>'
CUSTOMER_ID = '<CUSTOMER_ID>'

# ManageCustomerLink Usage Sample

uri = '/customer-links'
method = 'GET'
r = requests.get(BASE_URL + uri, params={'type': 'MYCLIENTS'}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))


# BusinessChannel Usage Sample

uri = '/ncc/channels'
method = 'GET'
r = requests.get(BASE_URL + uri, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))


# Adgroup Usage Sample

# 1. GET adgroup Usage Sample

uri = '/ncc/adgroups'
method = 'GET'
r = requests.get(BASE_URL + uri, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))
target_adgroup = r.json()[0]

# 2. CREATE adgroup Usage Sample

uri = '/ncc/adgroups'
method = 'POST'
payload = {'name': 'TEST#' + str(random.randrange(1000, 9999)), 'nccCampaignId' : target_adgroup['nccCampaignId'], 'pcChannelId' : target_adgroup['pcChannelId'], 'mobileChannelId': target_adgroup['mobileChannelId']}
r = requests.post(BASE_URL + uri, json=payload, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

created_adgroup = r.json()

# 3. UPDATE Adgroup Usage Sample

uri = '/ncc/adgroups/' + created_adgroup['nccAdgroupId']
method = 'PUT'
created_adgroup['userLock'] = 0
r = requests.put(BASE_URL + uri, params={'fields': 'userLock'}, json=created_adgroup, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

# 4. DELETE Adgroup

uri = '/ncc/adgroups/' + created_adgroup['nccAdgroupId']
method = 'DELETE'
r = requests.delete(BASE_URL + uri, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.content))

# AdKeyword Usage Sample

# 1. CREATE AdKeyword

uri = '/ncc/keywords'
method = 'POST'
r = requests.post(BASE_URL + uri, params={'nccAdgroupId': created_adgroup['nccAdgroupId']}, json=[{'keyword': 'hello'}], headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

created_adkeyword = r.json()[0]

# 2. GET AdKeyword

uri = '/ncc/keywords'
method = 'GET'
r = requests.get(BASE_URL + uri, params={'nccAdgroupId': created_adgroup['nccAdgroupId']}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

# 3. UPDATE AdKeyword 

uri = '/ncc/keywords'
method = 'PUT'
created_adkeyword['userLock'] = 0
r = requests.put(BASE_URL + uri, params={'fields': 'userLock'}, json=[created_adkeyword], headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))


# 4. GET and UPDATE AdKeyword (BidAmt)

uri = '/ncc/keywords/' + created_adkeyword['nccKeywordId']
method = 'GET'
r = requests.get(BASE_URL + uri, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

retrieved_adkeyword = r.json()

uri = '/ncc/keywords'
method = 'PUT'
retrieved_adkeyword['bidAmt'] = 300
retrieved_adkeyword['useGroupBidAmt'] = 0
r = requests.put(BASE_URL + uri, params={'fields': 'bidAmt'}, json=[retrieved_adkeyword], headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))


# 5. DELETE AdKeyword

uri = '/ncc/keywords/' + created_adkeyword['nccKeywordId']
method = 'DELETE'
r = requests.delete(BASE_URL + uri, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.content))


# Estimate Usage Sample

# 1. average-position-bid

uri = '/estimate/average-position-bid/keyword'
method = 'POST'
r = requests.post(BASE_URL + uri, json={'device': 'PC', 'items': [{'key': '제주여행', 'position': 1}, {'key': '게스트하우스', 'position': 2}, {'key': '자전거여행', 'position': 3}]}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("#response status_code = {}".format(r.status_code))
print("#response body = {}".format(r.json()))


# 2. exposure-minimum-bid

uri = '/estimate/exposure-minimum-bid/keyword'
method = 'POST'
r = requests.post(BASE_URL + uri, json={'device': 'PC', 'period': 'MONTH', 'items': ['제주여행', '게시트하우스', '자전거여행']}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

# 3. median-bid

uri = '/estimate/median-bid/keyword'
method = 'POST'
r = requests.post(BASE_URL + uri, json={'device': 'PC', 'period': 'MONTH', 'items': ['제주여행', '게시트하우스', '자전거여행']}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))


# 4. performance

uri = '/estimate/performance/keyword'
method = 'POST'
r = requests.post(BASE_URL + uri, json={'device': 'PC', 'keywordplus': True, 'key': '중고차', 'bids': [100, 500, 1000, 1500, 2000, 3000, 5000]}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

# 5. performance-bulk

uri = '/estimate/performance-bulk'
method = 'POST'
r = requests.post(BASE_URL + uri, json={'items': [{'device': 'PC', 'keywordplus': True, 'keyword': '제주여행', 'bid': 70}, {'device': 'PC', 'keywordplus': True, 'keyword': '제주도', 'bid': 80}, {'device': 'PC', 'keywordplus': True, 'keyword': '제주도맛집', 'bid': 90}, ]}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))

# Stat Usage Sample

# 1. GET Summary Report per multiple entities 

uri = '/stats'
method = 'GET'
stat_ids = [target_adgroup['nccCampaignId'], target_adgroup['nccAdgroupId']]
r = requests.get(BASE_URL + uri, params={'ids': stat_ids, 'fields': '["clkCnt","impCnt","salesAmt", "ctr", "cpc", "avgRnk", "ccnt"]', 'timeRange': '{"since":"2019-06-01","until":"2019-06-25"}'}, headers=get_header(method, uri, API_KEY, SECRET_KEY, CUSTOMER_ID))

print("response status_code = {}".format(r.status_code))
print("response body = {}".format(r.json()))
반응형

댓글