댓글 검색 목록

[Nodejs] 30 분 안에 주식 시장 API

페이지 정보

작성자 운영자 작성일 21-02-13 18:46 조회 655 댓글 0

내 인생의 모든 사람들이 이번 달에 GameStop을 사고 팔기 때문에 친구와 나는 주식 시장 데이터를 시각화하고 친구들과 채팅 할 수 있는 작은 앱을 만들기 시작했습니다. 그는 Tailwind와 Svelte를 연습하고 싶었고 Go와 GRPC를 사용하고 싶었습니다 ....


글쎄, 나는 Go를 사용하지 않았습니다.


나는 주식 시장 데이터를 얻기 위해 최고의 API를 연구하고 있었고, 내가 찾을 수 있는 모든 것이 가입이 필요하다는 것을 깨달았습니다.이 앱은 3 명 ... 어쩌면 4 명의 사용자를 가질 것이기 때문에 번거로웠습니다.


{symbol} 주식 만 검색하면 Google이이 멋진 주식 카드를 반환합니다.


Google's stock market card above search results 



내가 JS를 사용해온 이후로 .. 음 ... 이제까지도 분명히 들어 본 적이 있고 puppeteer을 사용했습니다.


"달콤합니다. Google은 거의 실시간으로 필요한 모든 데이터를 보유하고 있으며 Google도 Puppeteer를 만들었습니다. 기본적으로 이미 주식 시장 API를 제공 한 것처럼 들립니다."


해결책 


내 API의 핵심 로직? 5 줄의 코드와 같습니다.


const getStockPrice = async (symbol) => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`https://www.google.com/search?q=${symbol}+stock`);

  prices[symbol] = await page.evaluate(
    () => document.querySelector("g-card-section > span")?.textContent
  );
  await browser.close();
};


puppeteer를 시작하고 symbol name으로 Google 검색으로 이동 한 다음 쿼리 선택기를 수행하여 이 지점의 텍스트 콘텐츠를 가져옵니다.


image-1.png 


쿼리 선택기가 강조 표시된 부분을 잡습니다.



그 후에는 당신에게 달려 있습니다. 이 데이터는 언제든지 가져올 수 있습니다. 내가 함께했던 것은 다음과 같습니다.


app.get("/stocks/:symbol", async (req, res) => {
  let { symbol } = req.params;

  //get the latest price in the background if we already have it in memory
  if (!prices[symbol]) await getStockPrice(symbol);
  else getStockPrice(symbol);

  res.send({ symbol, price: prices[symbol] ?? "N/A" });
});


symbol을 요청할 때 메모리에 가격이 없으면 puppeteer을 조종하는 사람이 완료 될 때까지 기다립니다. 그렇지 않으면 백그라운드에서 수행하므로 대부분의 경우 API 응답이 정말 빠릅니다.


생산 준비가 되셨습니까? 


아마 아닐 것입니다. 그러나 이것은 심각하게 20-30 분 걸렸습니다. 이 경우 서비스를 만들고 싶다면 Vanguard, Robinhood 및 다른 거래소의 웹 사이트 몇 개를 긁어 내고 하나가 다운되거나 마크업이 변경되면 경고를 받고 다른 웹 사이트에 의존하면서 문제를 해결할 수 있습니다.


오 예, 아마도 서비스 약관에 위배되는 것 같습니다 ... 그러니 하지 마세요 ... 아니면 어쨌거나 저는 당신 엄마나 변호사가 아닙니다 :)


코드에 던질 수 있는 또 다른 것 :


setInterval(() => getStockPrice("gme"), 15000);


그러면 15 초마다 자동으로 gme가 업데이트 됩니다.


그 후에 webso를 넣으십시오 .... 농담입니다. 아무도 더 이상 사용하지 않습니다. http/2 스트리밍을 추가하여 클라이언트 앱에 실시간으로 데이터를 푸시 할 수 있도록 합니다. .. 제작 준비가 되었나요?


결론 


나는 항상 Puppeteer를 사용하여 흥미로운 일을 하는 것을 좋아합니다. GitHub에서 전체 소스 코드를 볼 수 있습니다. 30 줄 정도의 코드로 크게 확장 할 수 있습니다. 즐기세요!


https://zach.codes/stock-api-in-30-minutes/




댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.