//------------------------------------------------------------- // 概要:コンストラクタ //------------------------------------------------------------- protected BbsStrategy(BbsInfo bbsInfo) { Logger.Instance.DebugFormat("BbsStrategy(url:{0})", bbsInfo.Url); ThreadList = new List <ThreadInfo>(); ResList = new List <ResInfo>(); this.BbsInfo = bbsInfo; }
//------------------------------------------------------------- // 概要:指定URLの解析結果と、想定データとの比較 //------------------------------------------------------------- private static void CheckBbsInfo(string url, BbsInfo bbsInfo) { BbsInfo result = BbsUrlAnalyzer.Analyze(url); Assert.AreEqual(bbsInfo.Url, result.Url); Assert.AreEqual(bbsInfo.BoardGenre, result.BoardGenre); Assert.AreEqual(bbsInfo.BoardNo, result.BoardNo); Assert.AreEqual(bbsInfo.ThreadNo, result.ThreadNo); Assert.AreEqual(bbsInfo.BbsServer, result.BbsServer); }
//------------------------------------------------------------- // 概要:URLの解析 // 詳細:掲示板情報を取得する //------------------------------------------------------------- public static BbsInfo Analyze(string threadUrl) { Logger.Instance.DebugFormat("Analyze(url:{0})", threadUrl); Uri uri = null; try { uri = new Uri(threadUrl); } catch { Logger.Instance.WarnFormat("不正なURLです。[uri:{0}]", threadUrl); return(new BbsInfo { Url = "", BbsServer = BbsServer.UnSupport, }); } // したらば if (uri.Host.StartsWith(ShitarabaBbsStrategy.Domain)) { Logger.Instance.DebugFormat("掲示板サーバ:したらば [HOST:{0}]", uri.Host); return(AnalyzeShitaraba(uri.Host, threadUrl)); } // YY else if (uri.Host.StartsWith(YYKakikoBbsStrategy.Domain)) { Logger.Instance.DebugFormat("掲示板サーバ:わいわいKakiko [HOST:{0}]", uri.Host); return(AnalayzeYY(threadUrl, uri.Host)); } // 2ch互換かチェック else { // スレッド一覧ページが存在するかで2ch互換かチェック BbsInfo info = AnalayzeYY(threadUrl, uri.Host); string subjectUrl = string.Format("http://{0}/{1}/subject.txt", info.BoardGenre, info.BoardNo); string html = WebUtil.GetHtml(subjectUrl, Encoding.GetEncoding("Shift_JIS")); if ((html.Length > 16) && (html.Substring(10, 6) == ".dat<>")) { Logger.Instance.DebugFormat("掲示板サーバ:2ch互換サーバ [HOST:{0}]", uri.Host); return(info); } } // 未対応 Logger.Instance.DebugFormat("掲示板サーバ:未対応 [HOST:{0}]", uri.Host); return(new BbsInfo { Url = threadUrl, BbsServer = BbsServer.UnSupport, }); }
//------------------------------------------------------------- // 概要:URLに対応したストラテジの生成 //------------------------------------------------------------- public static BbsStrategy Create(string url) { Logger.Instance.DebugFormat("BbsStrategy(url:{0})", url); // 掲示板解析 BbsInfo bbsInfo = BbsUrlAnalyzer.Analyze(url); Logger.Instance.DebugFormat("掲示板解析:正常 [url:[0], 掲示板サーバ:{1}]", url, bbsInfo.BbsServer); switch (bbsInfo.BbsServer) { // したらば掲示板 case BbsServer.Shitaraba: return(new ShitarabaBbsStrategy(bbsInfo)); // わいわいKakiko case BbsServer.YYKakiko: return(new YYKakikoBbsStrategy(bbsInfo)); // 未対応 default: return(new NullBbsStrategy(bbsInfo)); } }
//------------------------------------------------------------- // 概要:コンストラクタ // 詳細:掲示板情報の初期化 //------------------------------------------------------------- public NullBbsStrategy(BbsInfo bbsInfo) : base(bbsInfo) { Logger.Instance.DebugFormat("NullBbsStrategy(url:{0})", bbsInfo.Url); }
//------------------------------------------------------------- // 概要:コンストラクタ // 詳細:掲示板情報の初期化 //------------------------------------------------------------- public ShitarabaBbsStrategy(BbsInfo bbsInfo) : base(bbsInfo) { Logger.Instance.DebugFormat("ShitarabaBbsStrategy(url:{0})", bbsInfo.Url); }
//------------------------------------------------------------- // 概要:コンストラクタ //------------------------------------------------------------- public ThreadInfo(BbsInfo bbs) { Parent = bbs; }