// http://potato.2ch.net/smartphone/ のような板URL async Task ScrapeBoard(string boardUrl, string boardName) { // 設定テキスト読み込み -> settings Dictionary <string, string> settings = new Dictionary <string, string>(); string settingUrl = boardUrl + "SETTING.TXT"; string settingText = await HtmlGetter.GetHtml(settingUrl, "shift_jis"); settingText = settingText.Replace("\r\n", "\n"); var lines = settingText.Split('\n'); foreach (var line in lines) { var kv = line.Split('='); if (kv.Length < 2) { continue; } settings[kv[0]] = kv[1]; } // オブジェクト構築 var boardInfo = new Models.BoardInfo { url = boardUrl, name = boardName }; if (settings.ContainsKey("BBS_UNICODE") && settings["BBS_UNICODE"] == "pass") { boardInfo.unicode = "SUPPORTED"; } m_boards[boardUrl] = boardInfo; }
// 全巡回 public async Task DoAll() { string menuUrl = "http://menu.2ch.net/bbsmenu.html"; string menuHtml = await HtmlGetter.GetHtml(menuUrl, "shift_jis"); new CQ(menuHtml).Find("a").Each(_a => { var a = new CQ(_a); var url = a.Attr("href"); var name = a.Text().Trim(); if (Regex.IsMatch(url, "^http://[^/]+/[^/]+/$")) { Console.WriteLine("-----------"); Console.WriteLine(url); Console.WriteLine(name); Task.Run(async() => { await ScrapeBoard(url, name); }).Wait(); } }); // JSON出力 OutputJson(); }