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); }
public abstract List <PostItem> GetList(GachonUser guser, BoardType board);
/// <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); }
public PostItem(BoardType board) { this.posttype = board.type; this.board_name = board.name; }