Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }