Exemple #1
0
        public static List <JToken> GetArticles(string topicID)
        {
            JObject articles = JObject.Parse(Bcat.News.GetNewsList(usRegion, topicID));

            if (!Directory.Exists("news_articles"))
            {
                Directory.CreateDirectory("news_articles");
            }

            if (!Directory.Exists($"news_articles\\{articles["topic_id"].ToString()}"))
            {
                Directory.CreateDirectory($"news_articles\\{articles["topic_id"].ToString()}");
            }

            List <JToken> list = new List <JToken>();

            foreach (JToken a in articles["directories"][0]["data_list"])
            {
                if (!File.Exists($"news_articles\\{articles["topic_id"].ToString()}\\{a["news_id"].ToString()}.json"))
                {
                    File.WriteAllText($"news_articles\\{articles["topic_id"].ToString()}\\{a["news_id"].ToString()}.json",
                                      JToken.Parse(Bcat.GetData(a["languages"][0]["url"].ToString(), true, Bcat.QLaunchTID, Encoding.ASCII.GetString(Bcat.NewsPassphrase)).ToString()).ToString());
                }

                list.Add(JToken.Parse(File.ReadAllText($"news_articles\\{articles["topic_id"].ToString()}\\{a["news_id"].ToString()}.json")));
            }

            return(list);
        }
Exemple #2
0
        private static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: BCATDownloader.exe <Title ID> <Passphrase>");
                return;
            }

            var TitleID = Convert.ToUInt64(args[0], 16);
            var Dirs    = (JArray)JObject.Parse(Bcat.Data.GetNxData(TitleID, args[1]))["directories"];

            using (var MD5 = new MD5CryptoServiceProvider())
                using (var Cli = new WebClient())
                {
                    string Hash(byte[] In) => BitConverter.ToString(MD5.ComputeHash(In)).Replace("-", string.Empty).ToLower();

                    for (int i = 0; i < Dirs.Count; i++)
                    {
                        var DirName = Dirs[i]["name"];
                        var NewDir  = $"{TitleID:x16}/{DirName}";
                        Directory.CreateDirectory(NewDir);
                        var DataList = (JArray)Dirs[i]["data_list"];

                        for (int j = 0; j < DataList.Count; j++)
                        {
                            var JSON     = DataList[j];
                            var Filename = JSON["filename"].ToString();
                            Console.WriteLine("Downloading {0}/{1}...", DirName, Filename);
                            var Data = (byte[])Bcat.GetData(JSON["url"].ToString(), false, TitleID, args[1]);
                            if (Hash(Data) != JSON["digest"].ToString())
                            {
                                throw new Exception("Error: Bad data!");
                            }
                            File.WriteAllBytes($"{NewDir}/{Filename}", Data);
                        }
                    }
                }

            Console.WriteLine("\nDone!");
        }