https://naver.github.io/searchad-apidoc/#/guides

 

searchad-apidoc

 

naver.github.io

 

네이버에서 지원해주는 네이버 검색광고 API는 관련 직종에 있는 회사에서 다양하게 활용된다.

회사내에 개발자들은 여러가지 광고 데이터를 수집하여 원하는 형태로 가공 할수 있는데

 

신입 개발자 또는 API문서를 처음보는 사람이라면 당황 할 수 있다.

 

그 이유는

 

#1. 영어로 되어있다.

#2. 최근에 자주 사용되는 nodepython언어 관련 예제도 없다.

 

필자가 그런 상황을 겪었기에 정리해서 올려둔다.

 


 

#1. npm 설치

 

API 호출에 필요한 2가지 모듈을 설치한다.

기본적으로 express 그리고 호출시 header에 필요한 암호화를 위한 crypto-js

npm init -y
npm i express crypto-js

 

#2. header값 만들기

 

header에 들어가는 customer id, secret key, access key는 네이버 광고 사이트에서 구할 수 있다.

const CryptoJS = require('crypto-js');

const NAVER_KEY = {
  naverAdSecret: process.env.NAVER_AD_SECRET_KEY,
  naverAdAccess: process.env.NAVER_AD_ACCESS_LICENSE,
  naverAdId: process.env.NAVER_AD_CUSTOMER_ID
};

const getNaverAdApiHeader = (path) => {
  // timestamp 생성
  let timestamp = Date.now() + '';
  
  // crypto-js를 사용해서 암호화 한다.
  let hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, NAVER_KEY.naverAdSecret);
  
  // API문서의 내용을 따라서 hmac을 업데이트 해준다.
  hmac.update(timestamp + path);
  
  // 그 후에 마무리
  let hash = hmac.finalize();
  hash.toString(CryptoJS.enc.Base64);
  
  // 그 다음에 axios 통신을 위해서 아래와 같이 담아준다.
  // 아래의 key값은 네이버광고 사이트에서 구할 수 있다.
  const header = {
    "X-Timestamp": timestamp,
    "X-API-KEY": NAVER_KEY.naverAdAccess,
    "X-CUSTOMER": NAVER_KEY.naverAdId,
    "X-Signature" : hash.toString(CryptoJS.enc.Base64)
  };
  
  return header;
};

// header 생성 .호출 타입./호출 url (지금은 연관 키워드 검색 API)
// 호출을 원하는 API에 따라 적절히 변경 해주면 됨
const header = getNaverAdApiHeader('.GET./keywordstool');

 

#3. request 만들기

 

이제 header값과 reques값을 합쳐서 axios 통신을 위한 객체를 만들어준다.

const getNaverAdApiRequest = (url, method, headers, params) => {
  let request = {
    url,
    headers,
    method
  };
  
  // 각 통신방식에 따라서 달라진다.
  if(method==='get') request.params = params;
  if(method==='post') request.data = params;
  
  return request;
};


// API에 따라 달라진다.
const params = {
  hintKeywords: "키워드",
  showDetail: 1
}

const request = getNaverAdApiRequest(`https://api.naver.com/keywordstool`, 'get', header, params);

 

#4. 데이터 호출

 

axios를 통해서 데이터를 기져온다.

const axios = require('axios');

const res = await axios.request(request);
const data = res.data['data'];

 


 

 

전체 code

const axios = require('axios');
const CryptoJS = require('crypto-js');

const NAVER_KEY = {
  naverAdSecret: process.env.NAVER_AD_SECRET_KEY,
  naverAdAccess: process.env.NAVER_AD_ACCESS_LICENSE,
  naverAdId: process.env.NAVER_AD_CUSTOMER_ID
};

const getNaverAdApiHeader = (path) => {  
  let timestamp = Date.now() + '';
  let hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, NAVER_KEY.naverAdSecret);
  hmac.update(timestamp + path);
  let hash = hmac.finalize();
  hash.toString(CryptoJS.enc.Base64);
  
  const header = {
    "X-Timestamp": timestamp,
    "X-API-KEY": NAVER_KEY.naverAdAccess,
    "X-CUSTOMER": NAVER_KEY.naverAdId,
    "X-Signature" : hash.toString(CryptoJS.enc.Base64)
  };
  
  return header;
};

const getNaverAdApiRequest = (url, method, headers, params) => {
  let request = {
    url,
    headers,
    method
  };
  
  if(method==='get') request.params = params;
  if(method==='post') request.data = params;
  
  return request;
};

const params = {
  hintKeywords: "키워드",
  showDetail: 1
}

const header = getNaverAdApiHeader('.GET./keywordstool');
const request = getNaverAdApiRequest(`https://api.naver.com/keywordstool`, 'get', header, params);
const res = await axios.request(request);
const data = res.data['data'];