예제 #1
0
 //-------------------------------------------------------------
 // 概要:コンストラクタ
 //-------------------------------------------------------------
 protected BbsStrategy(BbsInfo bbsInfo)
 {
     Logger.Instance.DebugFormat("BbsStrategy(url:{0})", bbsInfo.Url);
     ThreadList   = new List <ThreadInfo>();
     ResList      = new List <ResInfo>();
     this.BbsInfo = bbsInfo;
 }
예제 #2
0
        //-------------------------------------------------------------
        // 概要:指定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);
        }
예제 #3
0
        //-------------------------------------------------------------
        // 概要: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,
            });
        }
예제 #4
0
        //-------------------------------------------------------------
        // 概要: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));
            }
        }
예제 #5
0
 //-------------------------------------------------------------
 // 概要:コンストラクタ
 // 詳細:掲示板情報の初期化
 //-------------------------------------------------------------
 public NullBbsStrategy(BbsInfo bbsInfo) : base(bbsInfo)
 {
     Logger.Instance.DebugFormat("NullBbsStrategy(url:{0})", bbsInfo.Url);
 }
예제 #6
0
 //-------------------------------------------------------------
 // 概要:コンストラクタ
 // 詳細:掲示板情報の初期化
 //-------------------------------------------------------------
 public ShitarabaBbsStrategy(BbsInfo bbsInfo)
     : base(bbsInfo)
 {
     Logger.Instance.DebugFormat("ShitarabaBbsStrategy(url:{0})", bbsInfo.Url);
 }
예제 #7
0
 //-------------------------------------------------------------
 // 概要:コンストラクタ
 //-------------------------------------------------------------
 public ThreadInfo(BbsInfo bbs)
 {
     Parent = bbs;
 }