내 인생의 모든 사람들이 이번 달에 GameStop을 사고 팔기 때문에 친구와 나는 주식 시장 데이터를 시각화하고 친구들과 채팅 할 수 있는 작은 앱을 만들기 시작했습니다. 그는 Tailwind와 Svelte를 연습하고 싶었고 Go와 GRPC를 사용하고 싶었습니다 ....
글쎄, 나는 Go를 사용하지 않았습니다.
나는 주식 시장 데이터를 얻기 위해 최고의 API를 연구하고 있었고, 내가 찾을 수 있는 모든 것이 가입이 필요하다는 것을 깨달았습니다.이 앱은 3 명 ... 어쩌면 4 명의 사용자를 가질 것이기 때문에 번거로웠습니다.
{symbol} 주식 만 검색하면 Google이이 멋진 주식 카드를 반환합니다.
내가 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 검색으로 이동 한 다음 쿼리 선택기를 수행하여 이 지점의 텍스트 콘텐츠를 가져옵니다.
쿼리 선택기가 강조 표시된 부분을 잡습니다.
그 후에는 당신에게 달려 있습니다. 이 데이터는 언제든지 가져올 수 있습니다. 내가 함께했던 것은 다음과 같습니다.
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/
등록된 댓글이 없습니다.