6. 3 웹 로봇 예광탄 구현
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; } } } |
'프로그래밍 기술 > 웹 검색 엔진 만들기' 카테고리의 다른 글
8. 역 파일 생성기 만들기 (0) | 2017.12.07 |
---|---|
7. 형태소 분석기 만들기 (0) | 2017.12.07 |
6.4.3 WebRobot 서비스 테스트 클라이언트 만들기 (0) | 2017.12.07 |
6.4.2 WebRobot 서비스 만들기 (0) | 2017.12.07 |
6. 4 웹 로봇 서비스 만들기 (0) | 2017.12.07 |
6.2.5 WebPostedEventArgs 구현 (0) | 2017.12.07 |
6.2.4 RawPostedPage 구현 (0) | 2017.12.07 |
6.2.3 RawUrl 구현 (0) | 2017.12.07 |
6.2.2 WebPageGetter 구현 (0) | 2017.12.07 |
6.2.1 WebCollect 구현 (0) | 2017.12.07 |