네이버 검색광고 API를 node.js를 통해 호출 (naver ad api, express, node.js)
https://naver.github.io/searchad-apidoc/#/guides
searchad-apidoc
naver.github.io
네이버에서 지원해주는 네이버 검색광고 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