Main 폼에 웹 수집기 개체를 참조하는 멤버 필드를 선언합니다.
WebCollect wc = null;
Main 폼에 Load 이벤트 핸들러를 추가합니다.
private void MainForm_Load(object sender, EventArgs e)
Main 폼이 로드할 때 웹 수집기 개체를 생성하고 수집 대상 사이트 목록을 갱신하는 작업을 수행합니다.
wc = new WebCollect(); UpdateCandidate();
그리고 웹 페이지 수집 이벤트 핸들러를 추가합니다.
wc.WebPosted += new WebPostedEventHandler(wc_WebPosted);
수집 대상 사이트 목록을 갱신하는 메서드를 작성합시다.
private void UpdateCandidate()
수집 대상 사이트 목록을 보여주는 ListView 컨트롤의 목록을 지워줍니다.
lview_candidate.Items.Clear();
정적 클래스 EHDbmForAll의 GetCandidates 메서드를 호출하여 수집 대상 목록을 얻어옵니다. 물론 이를 위해 DBM ForAll 라이브러리와 WSE Core 라이브러리를 참조해야 합니다.
List<Candidate> list = EHDbmForAll.GetCandidates();
수집 대상 사이트 목록의 각 항목으로 ListViewItem 개체를 생성하여 ListView 컨트롤 항목에 추가합니다.
ListViewItem lvi = null; string[] sub_items = null; foreach (Candidate candi in list) { sub_items = new string[2]; sub_items[0] = candi.Url; sub_items[1] = candi.Depth.ToString(); lvi = new ListViewItem(sub_items); lview_candidate.Items.Add(lvi); }
웹 페이지 수집 완료 이벤트 핸들러를 작성합시다.
void wc_WebPosted(object sendor, WebPostedEventArgs e)
웹 페이지 수집을 완료하면 수집 대상 사이트 목록을 갱신하고 수집 결과 웹 페이지를
목록에 추가합니다.
UpdateCandidate(); AddPostedUrl(e.Page);
수집 결과 웹 페이지를 목록에 추가하는 메서드에서는 목록을 보여주는 ListBox 컨트롤 아이템 항목에 추가합니다.
private void AddPostedUrl(WSE_Core.PostedUrl postedUrl) { lbox_purl.Items.Add(postedUrl); }
웹 페이지 수집 가동 버튼과 수집 멈춤 버튼의 클릭 이벤트 핸들러를 추가합니다. 그리고 이벤트 핸들어에서는 웹 수집기 개체의 Enabled 속성을 설정합니다.
private void btn_start_collect_Click(object sender, EventArgs e) { wc.Enabled = true; } private void btn_stop_collect_Click(object sender, EventArgs e) { wc.Enabled = false; }
수집 주기 설정 버튼의 클릭 이벤트 핸들러를 추가합니다.
private void btn_set_period_Click(object sender, EventArgs e)
이벤트 핸들러에서는 수집 주기 입력 TextBox의 Text 속성으로 수집 주기를 얻어와 웹 수집기 개체의 수집 주기를 설정합니다. 그리고 수집 주기 입력 TextBox의 Text 속성은 빈 문자열로 설정하여 사용자 편의성을 높입니다.
int period = 0; if (int.TryParse(tbox_period.Text, out period)) { wc.Period = period; } tbox_period.Text = string.Empty;
Seed 사이트 추가 버튼 클릭 이벤트 핸들러를 추가합니다.
private void btn_add_seed_Click(object sender, EventArgs e)
이벤트 핸들러에서는 Seed 사이트 입력 TextBox의 Text 속성을 입력 인자로 정적 클래스 EHDbmForAll의 AddSeedSite 메서드를 호출합니다. 그리고 TextBox의 Text속성을 빈 문자열로 설정합니다.
EHDbmForAll.AddSeedSite(tbox_seed.Text); tbox_seed.Text = string.Empty;
수집 결과 목록을 보여주는 ListBox 컨트롤의 선택 항목 변경 이벤트 핸들러를 추가합니다.
private void lbox_purl_SelectedIndexChanged(object sender, EventArgs e)
만약 선택 항목의 인덱스가 -1이면 아무 작업도 수행하지 않습니다.
if (lbox_purl.SelectedIndex == -1) { return; }
선택 항목을 수집 결과 개체로 참조합니다.
PostedUrl purl = lbox_purl.SelectedItem as PostedUrl;
수집 결과 개체의 각 항목으로 정보를 보여줄 컨트롤의 Text 속성을 설정합니다.
lb_title.Text = purl.Title; lb_cp_addr.Text = purl.Url; lb_ocp_addr.Text = purl.OriginUrl; lb_depth.Text = purl.Depth.ToString(); lb_date.Text = purl.PostedTime.ToString(); tbox_content.Text = purl.Content;
▷ MainForm.cs
using System; using System.Collections.Generic; using System.Windows.Forms; using WSE_Core; using DBM_ForAll; using WEB_Robot_Lib; namespace WEB_Robot_예광탄 { public partial class MainForm : Form { WebCollect wc = null; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { wc = new WebCollect(); UpdateCandidate(); wc.WebPosted += new WebPostedEventHandler(wc_WebPosted); } void wc_WebPosted(object sendor, WebPostedEventArgs e) { UpdateCandidate(); AddPostedUrl(e.Page); } private void AddPostedUrl(WSE_Core.PostedUrl postedUrl) { lbox_purl.Items.Add(postedUrl); } private void UpdateCandidate() { lview_candidate.Items.Clear(); List<Candidate> list = EHDbmForAll.GetCandidates(); ListViewItem lvi = null; string[] sub_items = null; foreach (Candidate candi in list) { sub_items = new string[2]; sub_items[0] = candi.Url; sub_items[1] = candi.Depth.ToString(); lvi = new ListViewItem(sub_items); lview_candidate.Items.Add(lvi); } } private void btn_start_collect_Click(object sender, EventArgs e) { wc.Enabled = true; } private void btn_stop_collect_Click(object sender, EventArgs e) { wc.Enabled = false; } private void btn_set_period_Click(object sender, EventArgs e) { int period = 0; if (int.TryParse(tbox_period.Text, out period)) { wc.Period = period; } tbox_period.Text = string.Empty; } private void btn_add_seed_Click(object sender, EventArgs e) { EHDbmForAll.AddSeedSite(tbox_seed.Text); tbox_seed.Text = string.Empty; } private void lbox_purl_SelectedIndexChanged(object sender, EventArgs e) { if (lbox_purl.SelectedIndex == -1) { return; } PostedUrl purl = lbox_purl.SelectedItem as PostedUrl; lb_title.Text = purl.Title; lb_cp_addr.Text = purl.Url; lb_ocp_addr.Text = purl.OriginUrl; lb_depth.Text = purl.Depth.ToString(); lb_date.Text = purl.PostedTime.ToString(); tbox_content.Text = purl.Content; } } }