private ChartBuilder GetChartData(CoinGeckoCurrency coin, CoingGeckoSparkline sparkline) { var prices = sparkline.SparklineIn7D.Price; if (!sparkline.SparklineIn7D.Price.Any()) { return(null); } var data = FillData(prices); var dataset = new Dataset { BorderColor = sparkline.PriceChangePercentage7d > 0 ? "green" : "red", Fill = false, Label = coin.Name, Data = data.Data }; var options = new Models.Options { Scales = new Scales { YAxes = new List <YAx> { new YAx { Ticks = new Ticks { SuggestedMax = data.Max, SuggestedMin = data.Min } } } } }; var chart = new Chart { Type = "sparkline", Data = new Data { Datasets = new List <Dataset> { dataset } }, Options = options }; return(new ChartBuilder { Chart = chart }); }
public async Task <string> GetQuickchartURI(CoinGeckoCurrency coin, CoingGeckoSparkline sparkline) { var chartData = GetChartData(coin, sparkline); if (chartData == null) { return(null); } var quickchartresult = new QuickchartUrl(); using (var client = new HttpClient()) using (var requets = new HttpRequestMessage(HttpMethod.Post, $"{_quickchartOptions.Uri}chart/create")) { var json = JsonSerializer.Serialize(chartData); using (var stringContent = new StringContent(json, Encoding.UTF8, "application/json")) { requets.Content = stringContent; using (var response = await client.SendAsync(requets, HttpCompletionOption.ResponseHeadersRead)) { if (response.IsSuccessStatusCode) { quickchartresult = await _httpResponseService.DeserializeJsonFromStream <QuickchartUrl>(response); } else { var content = await _httpResponseService.StreamToStringAsync(await response.Content.ReadAsStreamAsync()); throw new ApiException(message: content) { StatusCode = (int)response.StatusCode, Content = content }; } } } } return(quickchartresult.Success ? quickchartresult.Url : null); }