using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Linq; using System.Net; using Newtonsoft.Json; using Scryfalltypes; using System.Threading.Tasks; using System.Diagnostics; namespace creatureBirdDwarf { class Program { static async Task Main(string[] args) { var request = WebRequest.Create("https://api.scryfall.com/bulk-data"); var response = request.GetResponse(); BulkMetaEntry oracleMeta, defaultMeta; using (var dataStream = new StreamReader(response.GetResponseStream())) { string responseFromServer = dataStream.ReadToEnd(); var bulk = JsonConvert.DeserializeObject(responseFromServer); oracleMeta = bulk.data.FirstOrDefault(d => d.type == "oracle_cards"); defaultMeta = bulk.data.FirstOrDefault(d => d.type == "default_cards"); } Console.WriteLine("found oracle download uri"); Console.WriteLine("scryfall requests 50-100 ms between requests..."); await Task.Delay(100); Console.WriteLine("should be good."); request = WebRequest.Create(oracleMeta.download_uri); response = request.GetResponse(); var OracleIDd = new List(); using (var dataStream = new StreamReader(response.GetResponseStream())) { string responseFromServer = dataStream.ReadToEnd(); OracleIDd = JsonConvert.DeserializeObject>(responseFromServer); } foreach (var card in OracleIDd) { card.prices = null; } Console.WriteLine("stripped price data, writing to file"); File.WriteAllText("./oracle-now.json", JsonConvert.SerializeObject(OracleIDd, Formatting.Indented)); var checksumNow = GetChecksum("./oracle-now.json"); Console.WriteLine($"oracled checksum: {checksumNow}"); if (!File.Exists("./oracled.json")) { File.CreateText("./oracled.json"); Console.WriteLine("no oracled.json, can't help but assume checksums will be different"); } var checksumOlder = GetChecksum("./oracled.json"); Console.WriteLine($"previous oracled checksum: {checksumOlder}"); if (checksumOlder != checksumNow) { Console.WriteLine("looks different, going to have to update."); Console.WriteLine("scryfall requests 50-100 ms between requests..."); await Task.Delay(100); Console.WriteLine("should be good."); File.Delete("./oracled.json"); File.Move("./oracle-now.json", "./oracled.json"); request = WebRequest.Create(defaultMeta.download_uri); response = request.GetResponse(); var defaultList = new List(); using (var dataStream = new StreamReader(response.GetResponseStream())) { string responseFromServer = dataStream.ReadToEnd(); defaultList = JsonConvert.DeserializeObject>(responseFromServer); File.WriteAllText("./default.json", JsonConvert.SerializeObject(defaultList, Formatting.Indented)); } } else { Console.Write("same checksum (no update)"); File.Delete("./oracle-now.json"); } } private static string GetChecksum(string filePath) { using (var stream = new BufferedStream(File.OpenRead(filePath), 1200000)) { SHA256Managed sha = new SHA256Managed(); byte[] checksum = sha.ComputeHash(stream); return BitConverter.ToString(checksum).Replace("-", String.Empty); } } } }