/// <summary> /// Fetches daily time series from the Alpha Vantage API /// </summary> /// <param name="ticker">Stock symbol to fetch price data for</param> /// <returns>json string containing pricing data</returns> public async Task <TimeSeriesDailyAdjustedResponse> GetTimeSeriesDailyAdjusted(string ticker) { // build the URL to fetch data NameValueCollection param = new NameValueCollection { { "function", "TIME_SERIES_DAILY_ADJUSTED" }, { "symbol", ticker }, { "outputSize", _outputSize }, { "apikey", _apiKey } }; string[] array = (from key in param.AllKeys from value in param.GetValues(key) select $"{key}={HttpUtility.UrlEncode(value)}").ToArray(); string queryString = string.Join("&", array); string uri = string.Concat(_baseUrl, queryString); // call the api HttpResponseMessage response = await _client.GetAsync(uri); // parse the response string statusCode = response.StatusCode.ToString(); string json = await response.Content.ReadAsStringAsync(); TimeSeriesDailyAdjustedResponse r = AlphaVantageReader.ReadTimeSeriesDailyAdjusted(statusCode, json); return(r); }
public static TimeSeriesDailyAdjustedResponse ReadTimeSeriesDailyAdjusted(string statusCode, string json) { TimeSeriesDailyAdjustedResponse t = new TimeSeriesDailyAdjustedResponse(); JObject response = JObject.Parse(json); // fill out the time series object t.ResponseCode = statusCode; // set the error message if needed if (!statusCode.Equals("OK")) { t.ErrorMessage = response["Information"].ToString(); } else { // parse the metadata t.Metadata = response["Meta Data"].ToString(); string symbol = response["Meta Data"]["2. Symbol"].ToString(); t.Ticker = symbol; // parse the quotes foreach (var q in response["Time Series (Daily)"].Values()) { Quote quote = new Quote(); quote.QuoteDate = Convert.ToDateTime(((JProperty)q.Parent).Name); quote.Symbol = symbol; quote.Open = q["1. open"].Value <decimal>(); quote.High = q["2. high"].Value <decimal>(); quote.Low = q["3. low"].Value <decimal>(); quote.Close = q["4. close"].Value <decimal>(); quote.AdjustedClose = q["5. adjusted close"].Value <decimal>(); quote.Volume = q["6. volume"].Value <int>(); quote.Dividend = q["7. dividend amount"].Value <decimal>(); quote.SplitCoefficient = q["8. split coefficient"].Value <decimal>(); // add quote to the list of quotes t.Quotes.Add(quote); } } return(t); }