네이버 검색광고 API를 node.js를 통해 호출 (naver ad api, express, node.js)
https://naver.github.io/searchad-apidoc/#/guides
네이버에서 지원해주는 네이버 검색광고 API는 관련 직종에 있는 회사에서 다양하게 활용된다.
회사내에 개발자들은 여러가지 광고 데이터를 수집하여 원하는 형태로 가공 할수 있는데
신입 개발자 또는 API문서를 처음보는 사람이라면 당황 할 수 있다.
그 이유는
#1. 영어로 되어있다.
#2. 최근에 자주 사용되는 node
나 python
언어 관련 예제도 없다.
필자가 그런 상황을 겪었기에 정리해서 올려둔다.
#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'];
'ETC > Sample' 카테고리의 다른 글
javascript calculator (계산기) (0) | 2021.04.21 |
---|---|
javascript snow (눈내리는 효과) (0) | 2021.04.16 |
javascript metronome (자바스크립트 메트로놈) (0) | 2021.04.14 |
javascript vimeo thumbnail (자바스크립트로 비메오 썸네일 가져오기) (0) | 2021.04.12 |
javascript youtube thumbnail (자바스크립트로 유튜브 썸네일 가져오기) (0) | 2021.04.11 |
댓글
이 글 공유하기
다른 글
-
javascript calculator (계산기)
javascript calculator (계산기)
2021.04.21 -
javascript snow (눈내리는 효과)
javascript snow (눈내리는 효과)
2021.04.16 -
javascript metronome (자바스크립트 메트로놈)
javascript metronome (자바스크립트 메트로놈)
2021.04.14 -
javascript vimeo thumbnail (자바스크립트로 비메오 썸네일 가져오기)
javascript vimeo thumbnail (자바스크립트로 비메오 썸네일 가져오기)
2021.04.12