public override List <PostItem> GetList(GachonUser guser, BoardType board)
        {
            List <PostItem>    result = new List <PostItem>();
            HtmlDocument       dom    = guser.VisitPage(board.url, Encoding.Default);
            HtmlNodeCollection sets   = dom.DocumentNode.SelectNodes("//div[@id='main-area']//tr");

            //timer.Print();
            if (sets != null)
            {
                foreach (HtmlNode node in sets)
                {
                    if (node.InnerText.IndexOf("No registered post") < 0 && node.InnerText.IndexOf("등록된 게시글이 없습니다") < 0 && node.ChildNodes["th"] == null)
                    {
                        HtmlNodeCollection datas     = node.SelectNodes("./td");
                        HtmlNodeCollection TitleDivs = datas[0].SelectNodes("./div");

                        if ((datas.Count == 5) && (TitleDivs[0].InnerText.IndexOf("공지") == -1))
                        {
                            TitleDivs[1] = TitleDivs[1].SelectSingleNode(".//a");
                            datas[1]     = datas[1].SelectSingleNode(".//a");
                            string url = ParseSupport.StringFromHtml(TitleDivs[1].Attributes["href"].Value);
                            result.Insert(0, new PostItem(board)
                            {
                                url       = url,
                                source    = this,
                                no        = Int32.Parse(TitleDivs[0].InnerText),
                                Title     = ParseSupport.StringFromHtml(TitleDivs[1].InnerText).Trim(),
                                Publisher = datas[1].InnerText.Trim(),
                                time      = DateTime.Parse(datas[2].InnerText),
                            });
                        }
                    }
                }
            }
            return(result);
        }
Beispiel #2
0
 public abstract List <PostItem> GetList(GachonUser guser, BoardType board);
Beispiel #3
0
        /// <summary>
        /// 메뉴 안 게시글 목록을 읽어오는 함수입니다.
        /// </summary>
        /// <param name="guser"></param>
        /// <param name="board">메뉴</param>
        /// <returns></returns>
        public override List <PostItem> GetList(GachonUser guser, BoardType board)
        {
            //Timer timer = new Timer(Type+ID + "["+ board.url+"]", 5);
            List <PostItem>    result = new List <PostItem>();
            HtmlDocument       dom    = guser.VisitPage(board.url);
            HtmlNodeCollection sets   = dom.DocumentNode.SelectNodes("//div[@class='boardlist']/table/tbody/tr");

            //timer.Print();


            if (sets != null)
            {
                foreach (HtmlNode node in sets)
                {
                    //등록된 게시글이 존재하면
                    if (node.InnerText.IndexOf("등록된 글이") < 0)
                    {
                        //게시글의 주소를 얻음
                        HtmlNodeCollection datas = node.SelectNodes(".//td");
                        string             url   = datas[1].SelectSingleNode(".//a").Attributes["href"].Value;
                        url = ParseSupport.StringFromHtml(url);

                        string no = null;
                        //javascript:go page()의 파라미터를 통해 주소를 얻음
                        if (url.IndexOf("java") == 0)
                        {
                            Regex reg = new Regex(@"javascript:goPage\([0-9]+,([0-9]+)\)");
                            no  = reg.Match(url).Groups[1].Value;
                            url = board.url.Replace("list.jsp", "view.jsp") + "&article_no=" + no;
                        }
                        //그 외에는 절대경로를 얻어냄
                        else
                        {
                            Uri uri = new Uri(new Uri(board.url), url);
                            url = uri.AbsoluteUri;
                            no  = ParseSupport.UrlQueryParser(url)["article_no"].ToString();
                        }
                        PostItem item;

                        #region 레포트 제출실 메뉴일 경우
                        if (board.type == BoardType.PostType.Homework)
                        {
                            //각 list의 정보를 포함한 PostItem 객체를 생성한다
                            //레포트 제출실의 경우 제출 인원, 마감날짜의 정보가 일반 게시글과 다르기 때문에 분류하였음
                            item = new PostItem(BoardType.PostType.Homework, board.name)
                            {
                                source        = this,
                                url           = url,
                                no            = Int32.Parse(no),
                                Title         = ParseSupport.StringFromHtml(datas[1].InnerText),
                                time          = DateTime.Now,
                                s_time        = DateTime.Parse(datas[2].InnerText.Substring(0, 10)),
                                e_time        = DateTime.Parse(datas[2].InnerText.Substring(13, 10)),
                                num_submitted = Int32.Parse(datas[5].InnerText.Split('/')[0]),
                                Publisher     = "관리자"
                            };
                        }
                        #endregion
                        #region 그 외의 메뉴 (공지사항, 강의자료실 등)
                        else
                        {
                            item = new PostItem(board.type, board.name)
                            {
                                source    = this,
                                url       = url,
                                no        = Int32.Parse(no),
                                Title     = ParseSupport.StringFromHtml(datas[1].InnerText),
                                Publisher = datas[2].InnerText,
                                time      = DateTime.Parse(datas[3].InnerText)
                            };
                        }
                        result.Insert(0, item);
                        #endregion
                    }
                }
            }
            return(result);
        }
Beispiel #4
0
 public PostItem(BoardType board)
 {
     this.posttype   = board.type;
     this.board_name = board.name;
 }