지난 시간엔…
라이브러리 2개 깔았다.
목록 얻어오는 URL 찾았다.
https://m.stock.naver.com/api/json/sise/siseListJson.nhn?menu=market_sum&sosok=0&pageSize=100&page=1
https://m.stock.naver.com/api/item/getTrendList.nhn?code=005930&size=1
https://m.stock.naver.com/api/html/item/getOverallInfo.nhn?code=005930
그럼 이제 로컬로 고고
위 URL 에 대해서 사용하는 함수를 맹갈아보자.
간단하다 axios
가 있으니까..
const NV = "https://m.stock.naver.com/api";
const getURL = (base, detail) => (item) => `${base}${detail(item)}`
const getItemListURL = getURL(NV, (size) => `/json/sise/siseListJson.nhn?menu=market_sum&sosok=0&pageSize=${size}&page=1`);
// Get List
const getItemList = async (count) => {
const response = await axios.get(getItemListURL(count));
//console.log(response);
if(!response.data.result || response.data.resultCode !== 'success') {
throw new Error("No Data");
}
//console.log(response);
const result = response.data.result;
//console.info(result);
return result;
};
나는 어쩔 수 없다보나 중복 느낌 오니까 그냥 막 줄이고 있다. 나중에 디버깅 하기 힘든데..
static 한거 json 으로 뺄느낌이 올거고 함수들도 또 중복 제거 할 삘이 든다.
일단 여기까지 참고 바닥다지기… 방망이 깍기 안한 나에게 칭찬을 해본다.
이거 함수 쓰면 목록 나온다.
(async () => {
const ListCount = 100;
const result = await getItemList(ListCount);
const itemList = result.itemList;
await _.forEach(itemList, async (item) => {
console.log(`name : ${item.nm}`);
console.log(`code : ${item.cd}`);
console.log(`value: ${item.nv}`);
});
})();
짠~
그럼 나머지 2개 URL 도 작업하면 된다.
// Get Ovaral
const getOverallInfo = async (code) => {
const response = await axios.get(getOverallInfoURL(code));
//console.log(response);
if(!response.data || response.status !== 200) {
// if(!response.data.result || response.data.resultCode !== 'success') {
throw new Error("No Data");
}
//console.log(response);
//const result = response.data.result;
const result = response.data;
//console.info(result);
return result;
};
컨센서스 정보 받는 페이지가…. html 요청하는 것이다. 하… json 만 나오게 되어 있는 삘에서 어긋났다.
그럼 나는 이런 함수 상속 관계를 생각할거다.
- get 요청하는 함수
- get 으로 json 요청하는 함수
- get 으로 html 요청하는 함수
그리고 결과를 이쁘게 정리하는 함수들도 계층 잡아 각잡아 해야겠지…
html 로 받는 거까지는 했는데…
아 파싱 귀찮다.
종종 쓰던 cheerio 가 인기가 없네
흠 파싱은 다음에 해야겠다.
전체 코드는 index.js에 있다.
네이버님 제발 틀 바꾸지 마시옵소서..
소규모라 Test Case 없이 가는데… 사실 구현 말미에 변경 사항을 확인하는 것을 하려면 결국 넣어야 할 것 같다
이게 배포 할 때 한번 검사를 할지
아니면 돌리면서 보면서 뭔가 할지 - 이러면 TC 는 아니잖수 양반… - 는 생각을 더 해봐야겠다.
EOF