From e96ca7077ab7d8c6e60cee4e117cc75e7b8b8923 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Tue, 12 Apr 2022 20:56:00 +0200 Subject: [PATCH] Simplify search --- .../yahoo-finance/yahoo-finance.service.ts | 38 +++++++------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index ef4328fc8..1ef5c9008 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -16,7 +16,6 @@ import { DataSource, SymbolProfile } from '@prisma/client'; -import * as bent from 'bent'; import Big from 'big.js'; import { countries } from 'countries-list'; import { addDays, format, isSameDay } from 'date-fns'; @@ -25,8 +24,6 @@ import type { Price } from 'yahoo-finance2/dist/esm/src/modules/quoteSummary-ifa @Injectable() export class YahooFinanceService implements DataProviderInterface { - private readonly yahooFinanceHostname = 'https://query1.finance.yahoo.com'; - public constructor( private readonly cryptocurrencyService: CryptocurrencyService ) {} @@ -244,29 +241,16 @@ export class YahooFinanceService implements DataProviderInterface { const items: LookupItem[] = []; try { - const get = bent( - `${this.yahooFinanceHostname}/v1/finance/search?q=${encodeURIComponent( - aQuery - )}&lang=en-US®ion=US"esCount=8&newsCount=0&enableFuzzyQuery=false"esQueryId=tss_match_phrase_query&multiQuoteQueryId=multi_quote_single_token_query&newsQueryId=news_cie_vespa&enableCb=true&enableNavLinks=false&enableEnhancedTrivialQuery=true`, - 'GET', - 'json', - 200 - ); - - const searchResult = await get(); + const searchResult = await yahooFinance.search(aQuery); const quotes = searchResult.quotes .filter((quote) => { // filter out undefined symbols return quote.symbol; }) - .filter(({ quoteType, symbol }) => { - return ( - (quoteType === 'CRYPTOCURRENCY' && - this.cryptocurrencyService.isCryptocurrency( - symbol.replace(new RegExp(`-${baseCurrency}$`), baseCurrency) - )) || - ['EQUITY', 'ETF', 'MUTUALFUND'].includes(quoteType) + .filter(({ quoteType }) => { + return ['CRYPTOCURRENCY', 'EQUITY', 'ETF', 'MUTUALFUND'].includes( + quoteType ); }) .filter(({ quoteType, symbol }) => { @@ -279,20 +263,24 @@ export class YahooFinanceService implements DataProviderInterface { return true; }); - const marketData = await this.getQuotes( + const marketData = await yahooFinance.quote( quotes.map(({ symbol }) => { return symbol; }) ); - for (const [symbol, value] of Object.entries(marketData)) { - const quote = quotes.find((currentQuote: any) => { - return currentQuote.symbol === symbol; + for (const marketDataItem of marketData) { + const quote = quotes.find((currentQuote) => { + return currentQuote.symbol === marketDataItem.symbol; }); + const symbol = this.convertFromYahooFinanceSymbol( + marketDataItem.symbol + ); + items.push({ symbol, - currency: value.currency, + currency: marketDataItem.currency, dataSource: this.getName(), name: quote?.longname || quote?.shortname || symbol });