Advertisement
Guest User

Untitled

a guest
Jun 7th, 2021
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.18 KB | None | 0 0
  1. using AutoTrader.Classes.Models;
  2. using AutoTrader.Interfaces;
  3. using HtmlAgilityPack;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Globalization;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Net.Http;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13.  
  14. namespace AutoTrader.Classes.Dataproviders
  15. {
  16.  
  17.     public class InvestingComProvider : ITradeDataProvider, IDisposable
  18.     {
  19.         private const string url = "https://ca.investing.com/equities/canada";
  20.         private HttpClient httpClient = new HttpClient(new HttpClientHandler()
  21.         {
  22.             CookieContainer = new CookieContainer()
  23.         });
  24.  
  25.         public InvestingComProvider()
  26.         {
  27.             httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36");
  28.         }
  29.  
  30.         public async Task<SymbolData[]> GetAllSymbolsCurrentValue()
  31.         {
  32.             List<SymbolData> res = new();
  33.             var s = await httpClient.GetStringAsync(url);
  34.             //string s = await File.ReadAllTextAsync(@"c:\bin\output.html");
  35.             HtmlDocument doc = new HtmlDocument();
  36.             doc.LoadHtml(s);
  37.             var symbolsTable = doc.DocumentNode.SelectNodes("//table[@id='cross_rate_markets_stocks_1']/tbody").SingleOrDefault();
  38.             var symbols = symbolsTable.SelectNodes("tr");//.ToList();
  39.             DateTime now = DateTime.UtcNow;
  40.  
  41.             foreach (var ss in symbols)
  42.             {
  43.                 var name = ss.SelectSingleNode("td[@class='bold left noWrap elp plusIconTd']").InnerText;
  44.                 var lastPrice = ss.SelectSingleNode("td[contains(@class,'-last')]").InnerText;
  45.                 if (decimal.TryParse(lastPrice.Replace(",", ""), NumberStyles.Any, CultureInfo.InvariantCulture, out decimal p))
  46.                 {
  47.                     SymbolData toAdd = new SymbolData()
  48.                     {
  49.                         DataAt = now,
  50.                         SymbolName = name,
  51.                         Quote = p
  52.                     };
  53.                     res.Add(toAdd);
  54.                 }
  55.                 else
  56.                 {
  57.  
  58.                 }
  59.             }
  60.             return res.ToArray();
  61.         }
  62.  
  63.         public async Task<SymbolData> GetDataForSymbol(string name)
  64.         {
  65.             return (await GetAllSymbolsCurrentValue()).Where(x => x.SymbolName == name).SingleOrDefault();
  66.         }
  67.  
  68.         public Task<SymbolData[]> GetAllSymbols(DateTime OnDate)
  69.         {
  70.             throw new NotImplementedException();
  71.         }
  72.  
  73.         public void Dispose()
  74.         {
  75.  
  76.             if (httpClient != null)
  77.             {
  78.                 httpClient.Dispose();
  79.                 httpClient = null;
  80.             }
  81.         }
  82.  
  83.         public Task<Dictionary<string, List<SymbolData>>> GetHistoryDataForSymbols(DateTime from, DateTime to)
  84.         {
  85.             throw new NotImplementedException();
  86.         }
  87.  
  88.         public Task<Dictionary<string, List<SymbolData>>> GetHistoryDataForSymbols(string[] symbols, DateTime from, DateTime to)
  89.         {
  90.             throw new NotImplementedException();
  91.         }
  92.     }
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement