item insert 구조 수정, sort 추가
This commit is contained in:
1
Form1.Designer.cs
generated
1
Form1.Designer.cs
generated
@@ -67,6 +67,7 @@
|
||||
this.lvList.TabIndex = 0;
|
||||
this.lvList.UseCompatibleStateImageBehavior = false;
|
||||
this.lvList.View = System.Windows.Forms.View.Details;
|
||||
this.lvList.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvList_ColumnClick);
|
||||
this.lvList.SelectedIndexChanged += new System.EventHandler(this.lvList_SelectedIndexChanged);
|
||||
//
|
||||
// chTime
|
||||
|
||||
247
Form1.cs
247
Form1.cs
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
@@ -16,36 +17,88 @@ namespace NewsCrawler
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
class NEWS_ITEM
|
||||
{
|
||||
public string m_strTitle;
|
||||
public DateTime m_Time;
|
||||
public string m_strURL;
|
||||
public string m_strReference;
|
||||
}
|
||||
delegate void InsertListView(bool bInitial, string strTitle, DateTime time, string strURL, string strRef);
|
||||
|
||||
System.Timers.Timer m_CrawlTimer = new System.Timers.Timer();
|
||||
int m_iCrawlInterval = 500;
|
||||
Timer m_UITimer = new Timer();
|
||||
List<NEWS_ITEM> m_ItemList = new List<NEWS_ITEM>();
|
||||
int m_iLastItemCnt = 0;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
wbView.ScriptErrorsSuppressed = false;
|
||||
|
||||
m_CrawlTimer.Elapsed+=CrawlTimer_Tick;
|
||||
m_CrawlTimer.Interval=1000;
|
||||
m_CrawlTimer.Start();
|
||||
ReadKIND(true);
|
||||
ReadDart(true);
|
||||
ReadAsiaE(true);
|
||||
ReadEtoday(true);
|
||||
|
||||
m_UITimer.Tick += UITimer_Tick;
|
||||
m_UITimer.Interval = m_iCrawlInterval;
|
||||
m_UITimer.Start();
|
||||
lvList.ListViewItemSorter = new ListViewItemComparer(0, SortOrder.Ascending);
|
||||
lvList.Sorting = SortOrder.Ascending;
|
||||
lvList.Sort();
|
||||
|
||||
if(lvList.Items.Count > 0)
|
||||
{
|
||||
lvList.Items[lvList.Items.Count - 1].Selected = true;
|
||||
lvList.Select();
|
||||
if(lvList.SelectedItems.Count > 0)
|
||||
lvList.SelectedItems[0].EnsureVisible();
|
||||
}
|
||||
|
||||
bool ReadAsiaE()
|
||||
|
||||
m_CrawlTimer.Elapsed+=CrawlTimer_Tick;
|
||||
m_CrawlTimer.Interval=m_iCrawlInterval;
|
||||
m_CrawlTimer.Start();
|
||||
}
|
||||
|
||||
private void InsertItem(bool bInitial, string strTitle, DateTime time, string strURL, string strRef)
|
||||
{
|
||||
if(strTitle == "")
|
||||
Console.WriteLine("break");
|
||||
|
||||
try
|
||||
{
|
||||
if(this.InvokeRequired)
|
||||
{
|
||||
this.Invoke(new InsertListView(InsertItem), bInitial, strTitle, time, strURL, strRef);
|
||||
}
|
||||
else
|
||||
{
|
||||
//lock(lvList)
|
||||
{
|
||||
foreach(ListViewItem item in lvList.Items)
|
||||
{
|
||||
if(item.SubItems[chLink.Index].Text == strURL)
|
||||
return;
|
||||
}
|
||||
|
||||
lvList.Items.Add(new ListViewItem(new string[] { time.ToString("HH:mm:ss"), strTitle, "", "", strRef, strURL }));
|
||||
|
||||
|
||||
if(chAutoSelect.Checked == true)
|
||||
{
|
||||
lvList.Items[lvList.Items.Count - 1].Selected = true;
|
||||
lvList.Select();
|
||||
if(lvList.SelectedItems.Count > 0)
|
||||
lvList.SelectedItems[0].EnsureVisible();
|
||||
}
|
||||
|
||||
if(bInitial == false)
|
||||
{
|
||||
lvList.Sort();
|
||||
}
|
||||
|
||||
foreach(ColumnHeader col in lvList.Columns)
|
||||
col.Width = -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
bool ReadAsiaE(bool bInitial = false)
|
||||
{
|
||||
bool bHasNew = false;
|
||||
|
||||
@@ -63,6 +116,7 @@ namespace NewsCrawler
|
||||
using(StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding("EUC-KR")))
|
||||
{
|
||||
string responseFromServer = WebUtility.HtmlDecode(reader.ReadToEnd());
|
||||
responseFromServer = responseFromServer.Replace("\"\"", "\"");
|
||||
|
||||
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
|
||||
doc.LoadHtml(responseFromServer);
|
||||
@@ -81,26 +135,7 @@ namespace NewsCrawler
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if(m_ItemList.Any(c => c.m_strURL==strURL)==false)
|
||||
{
|
||||
NEWS_ITEM news = new NEWS_ITEM();
|
||||
news.m_strTitle=strTitle;
|
||||
news.m_Time=DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture);
|
||||
news.m_strURL=strURL;
|
||||
news.m_strReference="아시아경제";
|
||||
|
||||
lock(m_ItemList)
|
||||
{
|
||||
m_ItemList.Add(news);
|
||||
}
|
||||
|
||||
bHasNew=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
InsertItem(bInitial, strTitle, DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture), strURL, "아시아경제");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -115,7 +150,7 @@ namespace NewsCrawler
|
||||
return bHasNew;
|
||||
}
|
||||
|
||||
bool ReadEtoday()
|
||||
bool ReadEtoday(bool bInitial = false)
|
||||
{
|
||||
bool bHasNew = false;
|
||||
|
||||
@@ -151,25 +186,7 @@ namespace NewsCrawler
|
||||
continue;
|
||||
}
|
||||
|
||||
if(m_ItemList.Any(c => c.m_strURL==strURL)==false)
|
||||
{
|
||||
NEWS_ITEM news = new NEWS_ITEM();
|
||||
news.m_strTitle=strTitle;
|
||||
news.m_Time=DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture);
|
||||
news.m_strURL=strURL;
|
||||
news.m_strReference="이투데이";
|
||||
|
||||
lock(m_ItemList)
|
||||
{
|
||||
m_ItemList.Add(news);
|
||||
}
|
||||
|
||||
bHasNew=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
InsertItem(bInitial, strTitle, DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture), strURL, "이투데이");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -183,7 +200,7 @@ namespace NewsCrawler
|
||||
return bHasNew;
|
||||
}
|
||||
|
||||
bool ReadDart()
|
||||
bool ReadDart(bool bInitial=false)
|
||||
{
|
||||
bool bHasNew = false;
|
||||
|
||||
@@ -210,6 +227,8 @@ namespace NewsCrawler
|
||||
foreach(var item in lists)
|
||||
{
|
||||
var rows = item.SelectNodes(".//td");
|
||||
if(rows.Count < 3)
|
||||
continue;
|
||||
|
||||
string strTitle = rows[2].InnerText;
|
||||
strTitle=strTitle.Trim();
|
||||
@@ -225,25 +244,7 @@ namespace NewsCrawler
|
||||
continue;
|
||||
}
|
||||
|
||||
if(m_ItemList.Any(c => c.m_strURL==strURL)==false)
|
||||
{
|
||||
NEWS_ITEM news = new NEWS_ITEM();
|
||||
news.m_strTitle=strTitle;
|
||||
news.m_Time=DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture);
|
||||
news.m_strURL=strURL;
|
||||
news.m_strReference="DART";
|
||||
|
||||
lock(m_ItemList)
|
||||
{
|
||||
m_ItemList.Add(news);
|
||||
}
|
||||
|
||||
bHasNew=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
InsertItem(bInitial, strTitle, DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture), strURL, "DART");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -257,7 +258,7 @@ namespace NewsCrawler
|
||||
return bHasNew;
|
||||
}
|
||||
|
||||
bool ReadKIND()
|
||||
bool ReadKIND(bool bInitial=false)
|
||||
{
|
||||
bool bHasNew = false;
|
||||
|
||||
@@ -282,6 +283,9 @@ namespace NewsCrawler
|
||||
|
||||
string strXPath = "//item";
|
||||
var lists = doc.DocumentNode.SelectNodes(strXPath);
|
||||
if(lists == null)
|
||||
return false;
|
||||
|
||||
foreach(var item in lists)
|
||||
{
|
||||
string strTitle = item.SelectSingleNode(".//title").InnerText;
|
||||
@@ -298,25 +302,7 @@ namespace NewsCrawler
|
||||
continue;
|
||||
}
|
||||
|
||||
if(m_ItemList.Any(c => c.m_strURL==strURL)==false)
|
||||
{
|
||||
NEWS_ITEM news = new NEWS_ITEM();
|
||||
news.m_strTitle=strTitle;
|
||||
news.m_Time=DateTime.ParseExact(strTime, "HH:mm:ss", CultureInfo.CurrentCulture);
|
||||
news.m_strURL=strURL;
|
||||
news.m_strReference="KIND";
|
||||
|
||||
lock(m_ItemList)
|
||||
{
|
||||
m_ItemList.Add(news);
|
||||
}
|
||||
|
||||
bHasNew=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
InsertItem(bInitial, strTitle, DateTime.ParseExact(strTime, "HH:mm", CultureInfo.CurrentCulture), strURL, "KIND");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -346,38 +332,6 @@ namespace NewsCrawler
|
||||
m_CrawlTimer.Enabled = true;
|
||||
}
|
||||
|
||||
private void UITimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (m_iLastItemCnt == m_ItemList.Count)
|
||||
return;
|
||||
|
||||
lock(m_ItemList)
|
||||
{
|
||||
m_ItemList.Sort((NEWS_ITEM news1, NEWS_ITEM news2) => news1.m_Time.CompareTo(news2.m_Time));
|
||||
}
|
||||
|
||||
foreach (var item in m_ItemList)
|
||||
{
|
||||
string strResult = string.Format("[{0}] {1} ({2})", item.m_Time, item.m_strTitle, item.m_strURL);
|
||||
lvList.Items.Add(new ListViewItem(new string[] { item.m_Time.ToString("HH:mm:ss"), item.m_strTitle, "", "", item.m_strReference, item.m_strURL }));
|
||||
|
||||
//Console.WriteLine(strResult);
|
||||
//System.IO.File.AppendAllText("output.txt", strResult+"\n", Encoding.GetEncoding("EUC-KR"));
|
||||
}
|
||||
|
||||
if (chAutoSelect.Checked == true)
|
||||
{
|
||||
lvList.Items[lvList.Items.Count - 1].Selected = true;
|
||||
lvList.Select();
|
||||
lvList.SelectedItems[0].EnsureVisible();
|
||||
}
|
||||
|
||||
foreach (ColumnHeader col in lvList.Columns)
|
||||
col.Width = -2;
|
||||
|
||||
m_iLastItemCnt = m_ItemList.Count;
|
||||
}
|
||||
|
||||
private void lvList_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (lvList.SelectedItems.Count <= 0)
|
||||
@@ -399,5 +353,38 @@ namespace NewsCrawler
|
||||
tbInterval.Text = (m_iCrawlInterval / (float)1000).ToString("##0.0") + "초";
|
||||
}
|
||||
}
|
||||
|
||||
private void lvList_ColumnClick(object sender, ColumnClickEventArgs e)
|
||||
{
|
||||
SortOrder Order = (lvList.Sorting == SortOrder.Descending || lvList.Sorting == SortOrder.None) ? SortOrder.Ascending : SortOrder.Descending;
|
||||
|
||||
lvList.ListViewItemSorter = new ListViewItemComparer(e.Column, Order);
|
||||
lvList.Sorting = Order;
|
||||
lvList.Sort();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ListViewItemComparer : IComparer
|
||||
{
|
||||
int m_iColumn = 0;
|
||||
SortOrder m_Order = SortOrder.Ascending;
|
||||
|
||||
public ListViewItemComparer(int column, SortOrder Order)
|
||||
{
|
||||
m_iColumn = column;
|
||||
m_Order = Order;
|
||||
}
|
||||
|
||||
public int Compare(object x, object y)
|
||||
{
|
||||
ListViewItem item1 = (ListViewItem)x;
|
||||
ListViewItem item2 = (ListViewItem)y;
|
||||
if(m_Order == SortOrder.Ascending)
|
||||
return string.Compare(item1.SubItems[m_iColumn].Text, item2.SubItems[m_iColumn].Text);
|
||||
else
|
||||
return string.Compare(item2.SubItems[m_iColumn].Text, item1.SubItems[m_iColumn].Text);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user