지난 시간엔…

라이브러리 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 로 받는 거까지는 했는데…

아 파싱 귀찮다.

Trend 보자

종종 쓰던 cheerio 가 인기가 없네

흠 파싱은 다음에 해야겠다.

전체 코드는 index.js에 있다.

네이버님 제발 틀 바꾸지 마시옵소서..

소규모라 Test Case 없이 가는데… 사실 구현 말미에 변경 사항을 확인하는 것을 하려면 결국 넣어야 할 것 같다

이게 배포 할 때 한번 검사를 할지

아니면 돌리면서 보면서 뭔가 할지 - 이러면 TC 는 아니잖수 양반… - 는 생각을 더 해봐야겠다.

EOF