Fixed .stock

This commit is contained in:
Kwoth
2024-04-05 03:07:40 +00:00
parent 127a46a9b8
commit d86b5b2b6c
3 changed files with 61 additions and 30 deletions

View File

@@ -85,11 +85,11 @@ public partial class Searches
.WithUrl($"https://www.tradingview.com/chart/?symbol={stock.Symbol}")
.WithTitle(stock.Name)
.AddField(GetText(strs.price), $"{sign} **{price}**", true)
.AddField(GetText(strs.market_cap), stock.MarketCap.ToString("C0", localCulture), true)
.AddField(GetText(strs.market_cap), stock.MarketCap, true)
.AddField(GetText(strs.volume_24h), stock.DailyVolume.ToString("C0", localCulture), true)
.AddField("Change", $"{change} ({changePercent})", true)
.AddField("Change 50d", $"{sign50}{change50}", true)
.AddField("Change 200d", $"{sign200}{change200}", true)
// .AddField("Change 50d", $"{sign50}{change50}", true)
// .AddField("Change 200d", $"{sign200}{change200}", true)
.WithFooter(stock.Exchange);
var message = await ctx.Channel.EmbedAsync(eb);

View File

@@ -1,5 +1,8 @@
using CsvHelper;
using AngleSharp;
using AngleSharp.Html.Dom;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
using Google.Protobuf.WellKnownTypes;
using System.Globalization;
using System.Net.Http.Json;
@@ -23,33 +26,61 @@ public sealed class DefaultStockDataService : IStockDataService, INService
return default;
using var http = _httpClientFactory.CreateClient();
var data = await http.GetFromJsonAsync<YahooQueryModel>(
$"https://query1.finance.yahoo.com/v7/finance/quote?symbols={query}");
if (data is null)
return default;
var symbol = data.QuoteResponse.Result.FirstOrDefault();
if (symbol is null)
return default;
var quoteHtmlPage = $"https://finance.yahoo.com/quote/{query.ToUpperInvariant()}";
var config = Configuration.Default.WithDefaultLoader();
using var document = await BrowsingContext.New(config).OpenAsync(quoteHtmlPage);
var divElem =
document.QuerySelector(
"#quote-header-info > div:nth-child(2) > div > div > h1");
var tickerName = (divElem)?.TextContent;
var marketcap = document
.QuerySelectorAll("table")
.Skip(1)
.First()
.QuerySelector("tbody > tr > td:nth-child(2)")
?.TextContent;
var volume = document.QuerySelector("td[data-test='AVERAGE_VOLUME_3MONTH-value']")
?.TextContent;
var close= document.QuerySelector("td[data-test='PREV_CLOSE-value']")
?.TextContent ?? "0";
var price = document
.QuerySelector("#quote-header-info")
?.QuerySelector("fin-streamer[data-field='regularMarketPrice']")
?.TextContent ?? close;
// var data = await http.GetFromJsonAsync<YahooQueryModel>(
// $"https://query1.finance.yahoo.com/v7/finance/quote?symbols={query}");
//
// if (data is null)
// return default;
// var symbol = data.QuoteResponse.Result.FirstOrDefault();
// if (symbol is null)
// return default;
return new()
{
Name = symbol.LongName,
Symbol = symbol.Symbol,
Price = symbol.RegularMarketPrice,
Close = symbol.RegularMarketPreviousClose,
MarketCap = symbol.MarketCap,
Change50d = symbol.FiftyDayAverageChangePercent,
Change200d = symbol.TwoHundredDayAverageChangePercent,
DailyVolume = symbol.AverageDailyVolume10Day,
Exchange = symbol.FullExchangeName
Name = tickerName,
Symbol = query,
Price = double.Parse(price, NumberStyles.Any, CultureInfo.InvariantCulture),
Close = double.Parse(close, NumberStyles.Any, CultureInfo.InvariantCulture),
MarketCap = marketcap,
DailyVolume = (long)double.Parse(volume ?? "0", NumberStyles.Any, CultureInfo.InvariantCulture),
};
}
catch (Exception)
catch (Exception ex)
{
// Log.Warning(ex, "Error getting stock data: {ErrorMessage}", ex.Message);
Log.Warning(ex, "Error getting stock data: {ErrorMessage}", ex.ToString());
return default;
}
}
@@ -74,9 +105,9 @@ public sealed class DefaultStockDataService : IStockDataService, INService
return Array.Empty<SymbolData>();
return data.Items
.Where(x => x.Type == "S")
.Select(x => new SymbolData(x.Symbol, x.Name))
.ToList();
.Where(x => x.Type == "S")
.Select(x => new SymbolData(x.Symbol, x.Name))
.ToList();
}
private static CsvConfiguration _csvConfig = new(CultureInfo.InvariantCulture)

View File

@@ -6,7 +6,7 @@ public class StockData
public string Name { get; set; }
public string Symbol { get; set; }
public double Price { get; set; }
public long MarketCap { get; set; }
public string MarketCap { get; set; }
public double Close { get; set; }
public double Change50d { get; set; }
public double Change200d { get; set; }