node.js에서 네이버 검색 api를 이용하여 뿌리려고 한다.
어느정도 하는 방법은 알았지만, cors나 error가 나서 조금 찾아보다가, 여러가지 모듈을 이용해서 전부 테스트를 해보았는데 크게 방법이 다르진 않았다.
메서드나 각종 기능에 대해서 자세하게 다루진 않는다.
아직까지 request 모듈을 사용하는 글(실제 네이버 api문서에도 예제가 request모듈로 나와있지만, 일단 공식적으로는 deprecated 되었다고 나온다(근데 많이 쓰는듯))들이 많아 request를 알아보고 express내장 함수인 https모듈과 axios를 통해서 구현해보았다.
간단하게 네이버 api를 사용하는 방법
네이버 개발자센터-> 어플리케이션 신청->사용할 기능(검색이나 트렌드 등) -> 등록 후 id와 password를 이용해서 통신
express 내장모듈인 https를 이용해서 통신
node.js를 잘 몰라 어떻게 데이터가 들어오는지 하나하나 살펴보면서 이해를 했다.
cb로 받는 부분이 메모리 청크이고, console로 찍어보면 16진수의
ascii코드가 나오는데, 이 Buffer 는 toString()메서드를 지원한다. 메서드의 파라미터들은 optional이고
chunk.toString(encoding(default: utf8), start, end))
data변수에 이 값을 담아 그대로 보내면
이런 식으로 나오기에 JSON.parse(data)를 통해 우리가 원하고자 하는 값을 나타낸다.
response.on
...
const https = require('https')
...
app.get("/api/news", function (req, res) {
const url = "https://openapi.naver.com/v1/search/news.json?query=전쟁";
const https = require("https");
const request = https.request(
url,
{
headers: {
"X-Naver-Client-Id": "id",
"X-Naver-Client-Secret": "pw",
},
},
(response) => {
let data = "";
response.on("data", (chunk) => {
console.log(chunk.toString() + "chunk");
data = data + chunk.toString();
});
response.on("end", () => {
const body = JSON.parse(data);
console.log(body);
res.send({ data: body });
});
}
);
request.on("err", (error) => {
console.log("error", error);
});
request.end();
});
npm i request
node.js를 이용하여 네이버 검색api를 이용하려고 하던 중, 네이버에서 제공해주는 검색 구현 예제를 보았다.
request 모듈을 불러주고, url과 옵션인 headers에 발급받은 키들을 넣어주면 된다.
app.get("/api/news", function (req, res) {
var api_url = "https://openapi.naver.com/v1/search/news.json?query=1";
var request = require("request");
var options = {
url: api_url,
headers: {
"X-Naver-Client-Id": "id",
"X-Naver-Client-Secret": "password",
},
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, { "Content-Type": "text/json;charset=utf-8" });
res.end(body);
} else {
res.status(response.statusCode).end();
console.log("error = " + response.statusCode);
}
});
});
가장 많이 사용하는 http통신 모듈이다.
에러 핸들링은 하지않고 데이터만 받아왔다.
app.get("/api/news", (req, res) => {
const url = "https://openapi.naver.com/v1/search/news.json?query=북한";
axios
.get(url, {
headers: {
"X-Naver-Client-Id": "id",
"X-Naver-Client-Secret": "pw",
},
})
.then((response) => {
res.send({ data: response.data });
});
});
잘 모르는 분야라 하나씩 뜯어보고 싶지만 프론트에 조금 더 집중해야겠다