/// <summary> /// 각 사이트에서 새로운 알림이 올 경우 이 함수가 실행됩니다. /// </summary> /// <param name="postItem"></param> private void Site_NewPost(PostItem postItem) { // Database Article 테이블에 새로운 post의 tuple을 삽입해줌 MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO article (course_no, board_name, no, category, publisher, title, date, content, url, sitetype, siteid)" + "VALUES (?course_no, ?board_name, ?no, ?posttype, ?publisher, ?title, ?date, ?content, ?url, ?sitetype, ?siteid) "); //일반 게시글의 경우엔 강의번호, 게시판이름, 게시글번호 등의 attribute가 있음 node["course_no"] = this.Key; node["board_name"] = postItem.board_name; node["no"] = postItem.no; node["posttype"] = (int)postItem.posttype; node["publisher"] = postItem.Publisher; node["title"] = postItem.Title; node["date"] = postItem.time; node["content"] = postItem.Content; node["url"] = postItem.url; node["sitetype"] = postItem.source.Type; node["siteid"] = postItem.source.ID; node.ExecuteNonQuery(); // 게시판의 유형이 레포트 제출실일 경우 형식이 다름 if (postItem.posttype == BoardType.PostType.Homework) { // 과제에 관한 게시글은 따로 Homework Table에 저장한다. MysqlNode hwnode = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO homework (course_no, article_no, start_date, end_date)" + "VALUES (?course_no, ?article_no, ?start_date, ?end_date) "); // 레포트 게시글이기 때문에 마감기한도 추가 hwnode["course_no"] = this.Key; hwnode["article_no"] = postItem.no; hwnode["start_date"] = postItem.s_time; hwnode["end_date"] = postItem.e_time; hwnode.ExecuteNonQuery(); } // 이 객체의 이벤트를 듣고있는 리스너에게 이벤트 메세지 전달. NewPost?.Invoke(this, postItem); }
/// <summary> /// 각 사이트에서 새로운 알림이 올 경우 이 함수가 실행됩니다. /// </summary> /// <param name="postItem"></param> private void Site_NewPost(PostItem postItem) { //여기에 SQL추가하기~ Insert MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO article (course_no, board_name, no, category, publisher, title, date, content, url, sitetype, siteid)" + "VALUES (?course_no, ?board_name, ?no, ?posttype, ?publisher, ?title, ?date, ?content, ?url, ?sitetype, ?siteid) "); node["course_no"] = this.Key; node["board_name"] = postItem.board_name; node["no"] = postItem.no; node["posttype"] = (int)postItem.posttype; node["publisher"] = postItem.Publisher; node["title"] = postItem.Title; node["date"] = postItem.time; node["content"] = postItem.Content; node["url"] = postItem.url; node["sitetype"] = postItem.source.Type; node["siteid"] = postItem.source.ID; node.ExecuteNonQuery(); if (postItem.posttype == BoardType.PostType.Homework) { MysqlNode hwnode = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO homework (course_no, article_no, start_date, end_date)" + "VALUES (?course_no, ?article_no, ?start_date, ?end_date) "); hwnode["course_no"] = this.Key; hwnode["article_no"] = postItem.no; hwnode["start_date"] = postItem.s_time; hwnode["end_date"] = postItem.e_time; hwnode.ExecuteNonQuery(); } // 이 객체의 이벤트를 듣고있는 리스너에게 이벤트 메세지 전달. NewPost?.Invoke(this, postItem); }
public abstract void GetPage(GachonUser guserm, PostItem item);
protected void NewPostEvent(PostItem item) { NewPost.Invoke(item); }
/// <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 override void GetPage(GachonUser guserm, PostItem item) { }