static async Task TestHistoricalTickerAsync() { Console.WriteLine("Testing historical Ticker info:"); Console.WriteLine("enter coin id:"); var id = Console.ReadLine(); Console.WriteLine($"fetching ticker for id {id} ..."); var ticker = await _client.GetHistoricalTickerForIdAsync(id, new DateTimeOffset(DateTime.Now.Subtract(TimeSpan.FromDays(1))), DateTimeOffset.Now, 1000, "USD", TickerInterval.OneHour); if (ticker.Error == null) { foreach (var historic in ticker.Value) { Console.WriteLine($"(Ticker ({id}) : {historic.Timestamp}: ({historic.Price})) - {historic.Volume24H}"); } Console.WriteLine("Press any key to finish test..."); } else { Console.WriteLine($"CoinPaprika returned an error: {ticker.Error.ErrorMessage}"); } Console.ReadLine(); Console.WriteLine("Bye!"); }
public override async Task Execute(Source source) { Logger.WriteLine(source, "Syncing TRAC Market (USD)"); DateTime now = DateTime.UtcNow; DateTime latestTimestamp; await using (var connection = new MySqlConnection(OTHubSettings.Instance.MariaDB.ConnectionString)) { latestTimestamp = connection.ExecuteScalar <DateTime?>(@"select max(ticker_trac.Timestamp) from ticker_trac") ?? connection.ExecuteScalar <DateTime>(@"SELECT Min(b.Timestamp) FROM ethblock b where b.Timestamp >= COALESCE((select max(ticker_trac.Timestamp) from ticker_trac), (SELECT Min(b.Timestamp) FROM ethblock b))"); } if ((now - latestTimestamp).TotalHours > 6) { CoinpaprikaAPI.Client client = new CoinpaprikaAPI.Client(); await using (var connection = new MySqlConnection(OTHubSettings.Instance.MariaDB.ConnectionString)) { await connection.OpenAsync(); for (DateTime date = latestTimestamp.Date; date.Date <= now; date = date.AddDays(1)) { if (date > now) { break; } await TimeConstraint; var tickers = client.GetHistoricalTickerForIdAsync("trac-origintrail", date, date.AddDays(1), 1000, "USD", TickerInterval.SixHours) .Result; DataTable rawData = new DataTable(); rawData.Columns.Add("Timestamp", typeof(DateTime)); rawData.Columns.Add("Price", typeof(decimal)); if (tickers?.Value == null) { continue; } foreach (var ticker in tickers.Value) { if (ticker.Timestamp.UtcDateTime <= latestTimestamp) { continue; } var row = rawData.NewRow(); row["Timestamp"] = ticker.Timestamp.UtcDateTime; row["Price"] = ticker.Price; rawData.Rows.Add(row); } if (rawData.Rows.Count == 0) { continue; } await using (MySqlTransaction tran = await connection.BeginTransactionAsync(global::System.Data.IsolationLevel.Serializable)) { await using (MySqlCommand cmd = new MySqlCommand()) { cmd.Connection = connection; cmd.Transaction = tran; cmd.CommandText = "SELECT * FROM ticker_trac"; using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { //da.UpdateBatchSize = 1000; using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da)) { da.Update(rawData); await tran.CommitAsync(); var max = tickers.Value.Max(v => v.Timestamp.UtcDateTime); if (max > latestTimestamp) { latestTimestamp = max; } } } } } } } } await ExecuteEthToUSD(source); await ExecuteEth(source); }