2021. 4. 13. 02:30ㆍIssue & Solution
#파파고 인증 오류 (feat. error 024, 등록되지 않은 client ID, axios)
영어를 못하는 인생은 참 힘들다.. 각박한 세상..
영어로 된 강의자료 pdf파일을 읽다가 너무 읽기 싫어서.. 잔머리를 굴려, pdf를 넣으면 그걸 번역해서 한글로 된 pdf로 만들어주는(디자인은 안하고) Node JS 서버를 만들어볼까 하다가 갑자기 꽂혀서 만들어 봤는데,
pdf파일 읽기 성공, pdf파일 쓰기 성공 등 전부 구현 해 놨는데 생각지도 못한 papago api의 인증 문제가 발생했다.
캡쳐를 못해놨지만, 대략 024 에러, 즉 Naver API의 Client ID가 존재하지 않는다는 에러가 계속 떴다.
물론 당연히 Application 등록은 해놨고, 올바른 ID와 Key를 입력했다.
네이버에서 제공하는 Node.JS의 레퍼런스는 아래와 같다.
var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var client_secret = 'YOUR_CLIENT_SECRET';
var query = "번역할 문장을 입력하세요.";
app.get('/translate', function (req, res) {
var api_url = 'https://openapi.naver.com/v1/papago/n2mt';
var request = require('request');
var options = {
url: api_url,
form: {'source':'ko', 'target':'en', 'text':query},
headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret}
};
request.post(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);
}
});
});
app.listen(3000, function () {
console.log('http://127.0.0.1:3000/translate app listening on port 3000!');
});
에러가 뜰 때의 코드는 아래와 같았다.
const axios = require("axios");
...
const translate_papago = async() => {
const options = {
url : "https://openapi.naver.com/v1/papago/n2mt",
form : {
source,
target,
text
},
headers : {
'X-Naver-Client-Id': CLIENT_ID,
'X-Naver-Client-Secret': CLIENT_SECRET
}
};
const result = await axios.post(options);
}
일단 나는 레퍼런스와 다르게 express 대신 Koa 프레임워크와, api Post를 위한 request 대신 axios를 사용했는데, url 옵션을 잘못 줘서 수정해서 post를 했다.
const axios = require("axios");
...
const translate_papago = async() => {
const url = "https://openapi.naver.com/v1/papago/n2mt",
const options = {
form : {
source,
target,
text
},
headers : {
'X-Naver-Client-Id': CLIENT_ID,
'X-Naver-Client-Secret': CLIENT_SECRET
}
};
const result = await axios.post(url, options);
}
이번에는 인증 에러가 떴는데, 여기서 얼마나 삽질을 했는지 모르겠다. 별의 별 방법을 다 써보다가 queryString을 이용하여 아래와 같이 해봤다.
const axios = require("axios");
const qs = require("queryString");
...
const translate_papago = async() => {
const url = "https://openapi.naver.com/v1/papago/n2mt",
const params = qs.stringify({
source,
target,
text
});
const options = {
headers : {
'X-Naver-Client-Id':CLIENT_ID,
'X-Naver-Client-Secret': CLIENT_SECRET
}
};
const result = await axios.post(url, params, options);
}
그런데 이것도 처음엔 안됐다. 근데 어느 순간 갑자기 되더라.. 아무튼 결론은
axios.post할 때 인자 3개 넣어서 하던가, 아니면 url + params를 해서 post를 해보자.
아무튼 삽질 끝
영어공부를 열심히하자
'Issue & Solution' 카테고리의 다른 글
PyAudio 설치 오류 & 해결 방법 (0) | 2021.05.01 |
---|---|
JavaScript : 외부 변수(Array 등) Promise로 처리하기 (0) | 2021.04.14 |
Django에서 실수 했던 기초적인 것들 : HTML, View return, URL 등 (0) | 2021.04.11 |
Raspbian(라즈비안) WiringPi Issue 정리 (0) | 2021.03.29 |
Linux Vi 작성 시 화살표, 백스페이스 등이 이상할 때 (0) | 2021.03.27 |