102 lines
4.2 KiB
C#
102 lines
4.2 KiB
C#
|
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);
|
|||
|
File.WriteAllText("./default.json", JsonConvert.SerializeObject(defaultList, Formatting.Indented));
|
|||
|
}
|
|||
|
Console.WriteLine("downloaded. Git pushing.");
|
|||
|
Process.Start("git", "add .");
|
|||
|
Process.Start("git", "commit -m \"auto\"");
|
|||
|
Process.Start("git", "push");
|
|||
|
}
|
|||
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|