⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cs

📁 智能新闻自动采集系统.能够自动下载各类新闻网站的内容,比较使用
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Xml;

namespace 个性系列_智能新闻自动采集系统
{
    public partial class Main : Form
    {
        Thread ThreadGetNews;
        public Main()
        {
            InitializeComponent();
        }
        private void Main_Load(object sender, EventArgs e)
        {
            BindGrid();
            if (IsAutoGet())
            {
                GetNews();
            }
        }
        bool IsAutoGet()
        {
            XmlDocument XML = new XmlDocument();
            XML.Load("RssNews.xml");
            string autoGet = "";
            XmlNode Node = XML.SelectSingleNode("RssNews/Config");
            if (Node != null)
            {
                autoGet = Node["IsAutoGet"].InnerText;
                if (autoGet == "True")
                {
                    程序启动就开始获取ToolStripMenuItem.Checked = true;
                    return true;
                }
            }
            return false;
        }
        void SetGetNewsBtn(string Enable)
        {
            if (Enable == "false")
            {
                停止获取新闻ToolStripMenuItem.Enabled = true;
                开始获取新闻ToolStripMenuItem.Enabled = false;
            }
            else
            {
                停止获取新闻ToolStripMenuItem.Enabled = false;
                开始获取新闻ToolStripMenuItem.Enabled = true;
            }
        }
        void GetNews()
        {
            treeView1.Nodes.Clear();
            ThreadGetNews = new Thread(new ThreadStart(BeginGetNews));
            ThreadGetNews.Start();
        }
        void AddTreeNode(TreeNode Node1, TreeNode Node2)
        {
            Node1.Nodes.Add(Node2);
            //Node1.ExpandAll();
        }
        void SetStateText(string a)
        {
            txtState.Text = a;
        }
        void AddRootTreeNode(TreeNode Node1, TreeNode Node2)
        {
            treeView1.Nodes.Add(Node1);
        }
        delegate void A(string a);
        delegate void B(TreeNode Node1, TreeNode Node2);
        void BeginGetNews()
        {
            object o = new object();
            lock (o)
            {
                try
                {
                    int NewsCount = 0;
                    int Rsscount = 0;
                    A detSetGetNewsBtn = new A(SetGetNewsBtn);
                    A detSetStateText = new A(SetStateText);
                    B detAddRootTreeNode = new B(AddRootTreeNode);
                    B detAddTreeNode = new B(AddTreeNode);
                    this.Invoke(detSetGetNewsBtn, "false");
                    List<RssModel> rssList = News.GetRssList();
                    foreach (RssModel rss in rssList)
                    {
                        this.Invoke(detSetStateText, "正在获取:" + rss.NewsName);
                        Rsscount++;
                        List<NewsModel> newsList = News.GetNewsList(rss);
                        TreeNode Node = new TreeNode(rss.NewsName + "(" + newsList.Count.ToString() + "," + rss.MaxNewscount + ")");
                        this.Invoke(detAddRootTreeNode, Node, null);
                        int MaxNewsCount = 0;
                        foreach (NewsModel news in newsList)
                        {
                            if (MaxNewsCount >= int.Parse(news.Rss.MaxNewscount))
                                break;
                            try
                            {
                                TreeNode ChildNode;
                                this.Invoke(detSetStateText, "正在获取:" + news.Rss.NewsName + "/" + news.NewsTitle + "(" + news.NewsUrl + ")");
                                if (News.ExistNews(news))
                                {
                                    this.Invoke(detSetStateText, news.Rss.NewsName + "/" + news.NewsTitle + "(" + news.NewsUrl + ")已经有了");
                                    ChildNode = new TreeNode(news.NewsTitle + "(已经有了)");
                                    ChildNode.SelectedImageIndex = 1;
                                    ChildNode.ImageIndex = 1;
                                    ChildNode.Tag = news.NewsUrl;
                                    this.Invoke(detAddTreeNode, Node, ChildNode);
                                    //Thread.Sleep(1000);
                                    NewsCount++;
                                    MaxNewsCount++;
                                    continue;
                                }
                                NewsModel news1 = News.GetNewsByNewsLink(news);
                                if (news1.NewsBody != null && news1.NewsBody != "")
                                {
                                    ChildNode = new TreeNode(news.NewsTitle + "(获取成功)");
                                    ChildNode.SelectedImageIndex = 1;
                                    ChildNode.ImageIndex = 1;
                                    ChildNode.Tag = news.NewsUrl;
                                    this.Invoke(detAddTreeNode, Node, ChildNode);
                                    News.AddToDatabase(news);
                                    //Thread.Sleep(1000);
                                    NewsCount++;
                                    MaxNewsCount++;
                                }
                                else
                                {
                                    ChildNode = new TreeNode(news.NewsTitle + "(获取失败)");
                                    ChildNode.SelectedImageIndex = 1;
                                    ChildNode.ImageIndex = 1;
                                    ChildNode.Tag = news.NewsUrl;
                                    this.Invoke(detAddTreeNode, Node, ChildNode);
                                    //Thread.Sleep(1000);
                                    NewsCount++;
                                }

                            }
                            catch (Exception e)
                            {
                                MessageBox.Show(e.Message);
                            }
                        }
                        this.Invoke(detSetStateText, rss.NewsName + "获取完毕");
                    }
                    this.Invoke(detSetStateText, "全部获取完毕,共" + Rsscount.ToString() + "个频道," + NewsCount.ToString() + "篇新闻");
                    this.Invoke(detSetGetNewsBtn, "true");
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
        }
        private void Main_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
        void BindGrid()
        {
            dataGridView1.DataSource = Rss.GetChannel();
            dataGridView1.Columns["NewsID"].HeaderText = "站点标识(接口)";
            dataGridView1.Columns["NewsName"].HeaderText = "站点名称";
            dataGridView1.Columns["NewsUrl"].HeaderText = "站点Url(只读)";
            dataGridView1.Columns["NewsUrl"].Width = 200;
            dataGridView1.Columns["StartTag"].HeaderText = "新闻起始标签(支持正则表达式)";
            dataGridView1.Columns["StartTag"].Width = 200;
            dataGridView1.Columns["EndTag"].HeaderText = "新闻结束标签(支持正则表达式)";
            dataGridView1.Columns["EndTag"].Width = 200;
            dataGridView1.Columns["ImgStartTag"].HeaderText = "图片起始标签(支持正则表达式)";
            dataGridView1.Columns["ImgStartTag"].Width = 200;
            dataGridView1.Columns["ImgEndTag"].HeaderText = "图片结束标签(支持正则表达式)";
            dataGridView1.Columns["ImgEndTag"].Width = 200;
            dataGridView1.Columns["IsGetNews"].HeaderText = "是否获取该站点";
            dataGridView1.Columns["NewsDescription"].HeaderText = "站点描述";
            dataGridView1.Columns["MaxNewscount"].HeaderText = "最大获取新闻条数";
            dataGridView1.Columns["NewsUrl"].ReadOnly = true;
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0 || e.ColumnIndex < 0)
            {
                return;
            }
            string CommandName = dataGridView1.Columns[e.ColumnIndex].Name;
            switch (CommandName)
            {
                case "Delete":
                    {
                        DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                        RssModel rss = new RssModel();
                        rss.NewsUrl = row.Cells["NewsUrl"].Value.ToString();
                        Rss.DeleteRssNews(rss);
                        BindGrid();
                        break;
                    }
                case "Update":
                    {
                        try
                        {
                            DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                            RssModel rss = new RssModel();
                            rss.NewsDescription = row.Cells["NewsDescription"].Value.ToString();
                            rss.EndTag = row.Cells["EndTag"].Value.ToString();
                            rss.ImgEndTag = row.Cells["ImgEndTag"].Value.ToString();
                            rss.NewsName = row.Cells["NewsName"].Value.ToString();
                            rss.StartTag = row.Cells["StartTag"].Value.ToString();
                            rss.ImgStartTag = row.Cells["ImgStartTag"].Value.ToString();
                            rss.IsGetNews = row.Cells["IsGetNews"].Value.ToString();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -