creature-bird-dwarf/Program.cs

105 lines
4.3 KiB
C#
Raw Normal View History

2021-10-07 06:27:33 -04:00
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<BulkDataList>(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<Card>();
using (var dataStream = new StreamReader(response.GetResponseStream()))
{
string responseFromServer = dataStream.ReadToEnd();
OracleIDd = JsonConvert.DeserializeObject<List<Card>>(responseFromServer);
}
stripData(ref OracleIDd);
2021-10-07 06:27:33 -04:00
Console.WriteLine("stripped external (price and edhrec rank) data, writing to file");
2021-10-07 06:27:33 -04:00
File.WriteAllText("./oracle-now.json", JsonConvert.SerializeObject(OracleIDd, Formatting.Indented, new Newtonsoft.Json.Converters.StringEnumConverter()));
2021-10-07 06:27:33 -04:00
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<Card>();
using (var dataStream = new StreamReader(response.GetResponseStream()))
{
string responseFromServer = dataStream.ReadToEnd();
defaultList = JsonConvert.DeserializeObject<List<Card>>(responseFromServer);
stripData(ref defaultList);
File.WriteAllText("./default.json", JsonConvert.SerializeObject(defaultList, Formatting.Indented, new Newtonsoft.Json.Converters.StringEnumConverter()));
2021-10-07 06:27:33 -04:00
}
}
else
{
Console.Write("same checksum (no update)");
File.Delete("./oracle-now.json");
}
}
private static void stripData(ref List<Card> collection)
{
foreach (var card in collection)
{
card.prices = null;
card.edhrec_rank = null;
}
}
2021-10-07 06:27:33 -04:00
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);
}
}
}
}