Exemple #1
0
        // 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;
        }
Exemple #2
0
        // 全巡回
        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();
        }