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);
|
|
|
|
|
}
|
|
|
|
|
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<Card>();
|
|
|
|
|
using (var dataStream = new StreamReader(response.GetResponseStream()))
|
|
|
|
|
{
|
|
|
|
|
string responseFromServer = dataStream.ReadToEnd();
|
|
|
|
|
defaultList = JsonConvert.DeserializeObject<List<Card>>(responseFromServer);
|
2021-10-07 06:32:16 -04:00
|
|
|
|
foreach (var card in defaultList)
|
|
|
|
|
{
|
|
|
|
|
card.prices = null;
|
|
|
|
|
}
|
2021-10-07 06:27:33 -04:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|