private static void DownloadAllTitleMetadata() { var titles = JObject.Parse(File.ReadAllText("countries.json")); var processed = Directory.GetFiles("metadata\\").Select(a => a.Substring(9, 16)).ToArray(); var props = titles.Properties(); var propsToCheck = props.Where(prop => !processed.Contains(prop.Name)).ToArray(); foreach (var title in propsToCheck) { var titleId = title.Name; var internalUid = title.Value["internaluid"].ToString(); var countries = title.Value["countries"].ToObject <string[]>(); var data = new TitleData(titleId); foreach (var country in countries) { data = CDNUtils.RetrieveTitleData(new[] { internalUid, "T" }, titleId, country, Certificate); if (data.HasMetadata()) { break; } } var filename = CDNUtils.SanitizeFilename($"{titleId} {internalUid} - {data.Name}.json"); var serializedJson = JsonConvert.SerializeObject(data.MetadataJson, Formatting.Indented); File.WriteAllText("metadata\\" + filename, serializedJson); Console.WriteLine($"{titleId}: " + data.Name); } }
private static void BruteforceTitles(IEnumerable <string> titlesChecked) { var titles = Enumerable.Range(0x0000, 0x2000).Select(a => $"000400F7{a:X6}00").ToArray(); var titlesToCheck = titles.Except(titlesChecked).ToArray(); foreach (var titleId in titlesToCheck) { var internalId = CDNUtils.RetrieveInternalInfo(titleId, Certificate)[0]; if (internalId != string.Empty) { Console.WriteLine($"\r{titleId}: {internalId}"); File.AppendAllText("validTitles.txt", titleId + Environment.NewLine); } else { Console.Write($"\r{titleId}: "); } } }
public static void Main() { var html = new HtmlDocument(); html.Load("tmds.htm"); var titlesFromTmds = html.DocumentNode .Descendants("table") .ToArray()[1] .Descendants("tr") .Select(title => title.Descendants("td")) .Select(a => a.ToArray()[0].InnerText) .Where(a => a.StartsWith("0004")) .ToArray(); var titlesFromDatabase = JObject.FromObject(JsonConvert.DeserializeObject(File.ReadAllText(Files.SizesPath))) .Properties() .Select(a => a.Name) .ToArray(); var missingTitles = titlesFromTmds.Except(titlesFromDatabase).ToArray(); Console.WriteLine(titlesFromTmds.Length); Console.WriteLine(titlesFromDatabase.Length); Console.WriteLine(missingTitles.Length); const string bigJsonInvalid = "sizes_invalid.json"; ////var titles = DatabaseParser.ParseFromDatabase(Files.DbPath, Files.SizesPath); ////var titlesWithKeys = DatabaseParser.ParseFromDatabase(Files.DbPath, Files.SizesPath); ////var bigJsonForComparison = JObject.FromObject(JsonConvert.DeserializeObject(File.ReadAllText(bigJson))); // var titles = // ParseDatabase("community.xml"); ////// test ////var missingTitles = titles.Except(titlesWithKeys).ToList(); ////Console.WriteLine(missingTitles.Count); ////Console.WriteLine(string.Join("\r\n", missingTitles)); ////Environment.Exit(0); ////// test ////// test ////var sizes = JObject.FromObject(JsonConvert.DeserializeObject(File.ReadAllText(bigJson))); ////var totalSize = sizes.Properties().Select(a => long.Parse(a.Value.ToString())).Sum(); ////Console.WriteLine("Total size of all the eShop: " + DatabaseParser.HumanReadableFileSize(totalSize)); ////Environment.Exit(0); ////// test var processed = 0; foreach (var title in missingTitles) { Console.Write($"\r{processed++}/{missingTitles.Length} ({(double)processed / missingTitles.Length * 100:F2}%)"); var sizesJson = JObject.FromObject(JsonConvert.DeserializeObject(File.ReadAllText(Files.SizesPath))); var sizesJsonInvalid = JObject.FromObject(JsonConvert.DeserializeObject(File.ReadAllText(bigJsonInvalid))); if (sizesJson[title] == null && sizesJsonInvalid[title] == null) { long size; try { size = CDNUtils.GetTitleSize(title); } catch (WebException ex) { Console.Write("\r" + new string(' ', Console.WindowWidth - 1) + "\r"); var statusCode = (int)((HttpWebResponse)ex.Response).StatusCode; sizesJsonInvalid[title] = statusCode; File.WriteAllText(bigJsonInvalid, JsonConvert.SerializeObject(sizesJsonInvalid)); Console.WriteLine(title + ": " + statusCode); continue; } sizesJson[title] = size; Console.Write("\r" + new string(' ', Console.WindowWidth - 1) + "\r"); // File.WriteAllText(Files.SizesPath, JsonConvert.SerializeObject(sizesJson)); // File.AppendAllText("titles.txt", title.TitleId + ": " + size + Environment.NewLine); File.WriteAllText(Files.SizesPath, JsonConvert.SerializeObject(sizesJson)); Console.WriteLine(title + ": " + DatabaseParser.HumanReadableFileSize(size)); } } var json = File.ReadAllText(Files.SizesPath); var invalidJson = File.ReadAllText(bigJsonInvalid); File.WriteAllText(Files.SizesPath, JsonPrettifier.FormatJson(json)); File.WriteAllText(bigJsonInvalid, JsonPrettifier.FormatJson(invalidJson)); Console.WriteLine("Finished at " + DateTime.Now); Console.Beep(300, 2000); }