Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        /// <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);
        }