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); } File.WriteAllText("./oracle-now.json", JsonConvert.SerializeObject(OracleIDd, Formatting.Indented, new Newtonsoft.Json.Converters.StringEnumConverter())); if (!File.Exists("./oracled.json")) { File.CreateText("./oracled.json"); Console.WriteLine("no oracled.json, can't help but assume contents will be different"); } if (needUpdate("./oracled.json", "./oracle-now.json")) { Console.WriteLine("looks different, going to have to update."); Console.WriteLine("scryfall requests 50-100 ms between requests. Granted I can't imagine it hasn't been that long."); 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, new Newtonsoft.Json.Converters.StringEnumConverter())); } } else { Console.Write("same checksum (no update)"); File.Delete("./oracle-now.json"); } } public static bool needUpdate(string path1, string path2) { if(File.Exists(path1) && File.Exists(path2)) { var lhs = JsonConvert.DeserializeObject>(File.ReadAllText(path1)); var rhs = JsonConvert.DeserializeObject>(File.ReadAllText(path2)); if(lhs == null || rhs == null) { return true; } foreach(var lhsCard in lhs) { var rhsCard = rhs.FirstOrDefault(c => c.oracle_id == lhsCard.oracle_id); if(rhsCard == null || lhsCard.oracle_text != rhsCard.oracle_text) { return true; } rhs.Remove(rhsCard); } if(rhs.Count() > 0) { return true; } return false; } else { return true; } } } }