public async Task <SingleQuoteQueryResult> GetSingleQuoteData(StockQuery query, string ticker, string exchangeName) { var alphaVantageQuery = new AlphaVantageQuery(QueryFunctionType.SingleQuote, ticker); var alphaVantageQueryResult = await GetQueryData <SingleQuoteData>(query.SymbolId, alphaVantageQuery, _parserFactory.GetSingleQuoteDataParser()); if (alphaVantageQueryResult.HasError) { return(new SingleQuoteQueryResult(alphaVantageQueryResult.ErrorMessage)); } return(new SingleQuoteQueryResult(ticker, alphaVantageQueryResult.Data)); }
/// <summary> /// Run the given query against Alpha Vantage client. /// Adds the necessary headers such api key and from the query object /// </summary> /// <param name="query">Query object used to generate the request</param> /// <returns></returns> private async Task <AlphaVantageQueryResult <TData> > GetQueryData <TData>(int symbolId, AlphaVantageQuery query, IAlphaVantageDataParser <TData> parser) where TData : StockData { AlphaVantageQueryResult <TData> queryResult; _logger.LogWarning(symbolId.ToString()); try { string urlWithQueryString = QueryHelpers.AddQueryString(_alphaVantageOptions.Url, query.GetParameters()); urlWithQueryString = QueryHelpers.AddQueryString(urlWithQueryString, AlphaVantageQueryKeys.ApiKey, _alphaVantageOptions.ApiKey); var client = _clientFactory.CreateClient(_alphaVantageOptions.ClientName); _logger.LogTrace("Executing query http request url: {url}", urlWithQueryString); var response = await client.GetAsync(urlWithQueryString); TData data = null; if (response.IsSuccessStatusCode) { string json = null; try { json = await response.Content.ReadAsStringAsync(); data = parser.ParseJson(symbolId, json); queryResult = new AlphaVantageQueryResult <TData>(data); } catch (Exception) when(json.Contains("Error Message")) { var errorJson = await response.Content.ReadAsStringAsync(); var errorObject = JsonConvert.DeserializeObject <AlphaVantageQueryError>(errorJson); queryResult = new AlphaVantageQueryResult <TData>(error: errorObject); _logger.LogError("Alphavantage Error for query: {error}", query.Ticker, JsonConvert.SerializeObject(errorObject)); } catch (Exception ex) { queryResult = new AlphaVantageQueryResult <TData>(errorMessage: $"Exception: {ex.Message}"); _logger.LogError(ex, "Failed to parse alphavantage data for query {query}", query.Ticker); } } else { _logger.LogError("Failed to retrieve data from AlphaVantage: {reason}", response.ReasonPhrase); queryResult = new AlphaVantageQueryResult <TData>(errorMessage: response.ReasonPhrase); } } catch (Exception ex) { _logger.LogError(ex, "Error Executing query http request"); queryResult = new AlphaVantageQueryResult <TData>(errorMessage: ex.Message); } return(queryResult); }