阅读rss的其中一个主页面的程序,最近写的,多多指教

本文介绍了一个用于解析RSS源并更新数据库的应用程序页面。该程序能够检查RSS链接的有效性,并更新指定作者的文章记录。它还包含了错误处理机制,确保了即使某个RSS源无法访问也能继续处理其他RSS源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Threading;
using System.Xml;
using System.Data.OleDb;

public partial class admin_readrss : System.Web.UI.Page
{
  
    protected void Page_Load(object sender, EventArgs e)
    {
       string linkxml;
       string name;
        DateTime times;
        Session["count"] = 0;
        Session["pass"] = 0;
        Session["rsscount"] = 0;
        Session["rsspass"] = 0;
        try{
            linkxml = Request["linkxml"];
            name = Request["name"];
            times=Convert.ToDateTime(Request["times"]);
             reedrss(linkxml,name,times);
            //如果没传入url,就是全部的重新更新
        }
        catch
        {
            readevery();
        }
        Response.Write("共更新的blog网站为:"+Session["rsscount"].ToString()+"个<br />");
        Response.Write("更新失败的blog为:" + Session["rsspass"].ToString() + "个<br />");
        Response.Write("共更新记录:"+Session["count"]+"条 .");
        Response.Write("抛弃记录:"+Session["pass"]+"条");
       // Thread.Sleep(10000);
    }
    private XmlNode FoundChildNode(XmlNode Node, string Name)
    {
        XmlNode childlNode = null;
        for (int i = 0; i < Node.ChildNodes.Count; i++)
        {
            if (Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0)
            {
                childlNode = Node.ChildNodes[i];
                return childlNode;
            }
        }
        return childlNode;
    }
    protected void readevery()
    {
        OleDbConnection mycon = DB.CreateDB();
        DataSet myset = new DataSet();
        string sqlstr="select * from blogrss";
        mycon.Open();
        OleDbDataAdapter myadt = new OleDbDataAdapter(sqlstr,mycon);
        myadt.Fill(myset,"rsses");
        for (int i = 0; i < myset.Tables["rsses"].Rows.Count; i++)
        {
            string xmlstr = myset.Tables[0].Rows[i]["linkxml"].ToString();
            string name=myset.Tables["rsses"].Rows[i]["author"].ToString();
            DateTime time =Convert.ToDateTime( myset.Tables["rsses"].Rows[i]["lastupdatetime"]);
            if (isuse(xmlstr))
            {
                reedrss(xmlstr, name, time);
                Session["rsscount"]=Convert.ToInt32(Session["rsscount"])+1;
            }
            else
            {
                Session["rsspass"] = Convert.ToInt32(Session["rsspass"]) + 1;
            }
        }
        mycon.Close();
    }
    //测试链接是否可用
    protected bool isuse(string xmlurl)
    {
        XmlTextReader Reader = new XmlTextReader(xmlurl);
        XmlDocument xmlDoc = new XmlDocument();
        try
        {
            xmlDoc.Load(Reader);
            xmlDoc.RemoveAll();
            return true;
        }
        catch (Exception x)
        {

            xmlDoc.RemoveAll();
            return false;
        }
    }
    protected void reedrss(string url,string name,DateTime lastupdate)
    {
        string URL = url;
        int xx=0;//记录是不是第一次读取日期
        XmlTextReader Reader = new XmlTextReader(URL);
     
        XmlValidatingReader Valid = new XmlValidatingReader(Reader);

        Valid.ValidationType = ValidationType.None;
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(Reader);

        XmlNode rssNode = FoundChildNode(xmlDoc, "rss");
        XmlNode channelNode = FoundChildNode(rssNode, "channel");
        rss.Channel channel = new rss.Channel();
        //------------------------------------------
        OleDbConnection mycon = DB.CreateDB();
        string sqlstr;
       // mycon.Open();
        OleDbCommand mycmd = new OleDbCommand();
        mycmd.Connection = mycon;

        //------------------------------------------
        channel.Items = new Hashtable();
        int i = 0;
        for (i = 0; i < channelNode.ChildNodes.Count; i++)
        {
            rss.Item itemss;

            switch (channelNode.ChildNodes[i].Name)
            {


                case "title":
                    {
                        channel.Title = channelNode.ChildNodes[i].InnerText;
                      
                        break;
                    }
                case "link":
                    {
                        channel.link = channelNode.ChildNodes[i].InnerText;
                    
                        break;
                    }

                case "item":
                    {

                     
                        int j = 0;
                        itemss.Link = "";
                        itemss.author = "";
                        itemss.Description = "";
                        itemss.guid = "";
                        itemss.pubDate = "";
                        itemss.Title = "";


                        for (j = 0; j < channelNode.ChildNodes[i].ChildNodes.Count; j++)
                            switch (channelNode.ChildNodes[i].ChildNodes[j].Name.ToString().Trim())
                            {
                                case "title":
                                    {
                                        itemss.Title = channelNode.ChildNodes[i].ChildNodes[j].InnerText;

                                      
                                        break;
                                    }
                                case "link":
                                    {
                                        itemss.Link = channelNode.ChildNodes[i].ChildNodes[j].InnerText;
                                     
                                        break;
                                    }


                                case "guid":
                                    {
                                        itemss.guid = channelNode.ChildNodes[i].ChildNodes[j].InnerText;
                                     

                                        break;
                                    }
                                case "pubDate":
                                    {
                                       
                                      
                                        itemss.pubDate = channelNode.ChildNodes[i].ChildNodes[j].InnerText;
                                        string times=itemss.pubDate;
                                        if (itemss.pubDate.Length > 28)
                                        {
                                          
                                            times = itemss.pubDate.Substring(0, itemss.pubDate.Trim().Length - 2).Trim();
                                           
                                        }
                                        if (xx == 0)
                                        {
                                           sqlstr = "update blogrss set lastupdatetime=@lastupdatetime where linkxml='" + url + "'";
                                            //sqlstr = "update blogrss set lastupdatetime="+Convert.ToDateTime(itemss.pubDate).ToShortDateString()+" where linkxml='"+url+"'";
                                            //sqlstr = "update blogrss set lastupdatetime="+DateTime.Now.ToShortDateString()+" where linkxml='" + url + "'";
                                            mycon.Open();
                                           mycmd.Parameters.Add("@lastupdatetime", OleDbType.Date);
                                           // mycmd.Parameters["@lasttime"].Value = Convert.ToDateTime(itemss.pubDate);
                                           mycmd.Parameters["@lastupdatetime"].Value = Convert.ToDateTime(times); 
                                            mycmd.CommandText = sqlstr;
                                            mycmd.ExecuteNonQuery();
                                            mycon.Close();
                                        }
                                        xx++;
                                        break;
                                    }
                                case "author":
                                    {
                                        itemss.author = channelNode.ChildNodes[i].ChildNodes[j].InnerText;
                                      
                                        break;
                                    }
                                case "description":
                                    {

                                        itemss.Description = channelNode.ChildNodes[i].ChildNodes[j].InnerText;
                                     

                                        break;

                                    }
                                 
                            }
                        string time123 = itemss.pubDate;
                        if (itemss.pubDate.Length > 28)
                        {

                            time123 = itemss.pubDate.Substring(0, itemss.pubDate.Trim().Length - 2).Trim();

                        }
                        if ( Convert.ToDateTime(time123)<=lastupdate)
                        {
                            Session["pass"] = Convert.ToInt32(Session["pass"]) + 1;
                            break;
                        }
                        if (itemss.Link == "")
                        {
                            itemss.Link = itemss.guid;
                        }
                        if (itemss.author == "" || itemss.Description == "" || itemss.Link == "" || itemss.pubDate == "")
                        {
                            Session["pass"] = Convert.ToInt32(Session["pass"]) + 1;
                            break;
                        }
                        sqlstr = "insert into artcle(pubDate,title,author,site,description,author_ID)values(@pubDate,@title,@author,@site,@description,'" + name + "')";
                        mycmd.CommandText = sqlstr;
                     //   mycmd.Connection = mycon;
                        mycmd.Parameters.Add("@pubDate", OleDbType.Date);
                        if (itemss.pubDate.Length > 28)
                        {
                            string datestr = itemss.pubDate.Substring(0, itemss.pubDate.Length - 6).Trim();
                            mycmd.Parameters["@pubDate"].Value = Convert.ToDateTime(datestr);
                        }
                        else
                        {
                            mycmd.Parameters["@pubDate"].Value = Convert.ToDateTime(itemss.pubDate);
                        }
                        //1
                        mycmd.Parameters.Add("@title", OleDbType.LongVarChar);
                        mycmd.Parameters["@title"].Value = itemss.Title;
                        //2
                        mycmd.Parameters.Add("@author", OleDbType.LongVarChar);
                        mycmd.Parameters["@author"].Value = itemss.author;
                        //3
                       // mycmd.Parameters.Add("@pubDate",OleDbType.Date);
                       //if (itemss.pubDate.Length > 28)
                       // {
                       //     string datestr = itemss.pubDate.Substring(0, itemss.pubDate.Length - 6).Trim();
                       //     mycmd.Parameters["@pubDate"].Value = Convert.ToDateTime(datestr);
                       // }
                       //else
                       //{
                       // mycmd.Parameters["@pubDate"].Value = Convert.ToDateTime(itemss.pubDate);
                       //}
                        //4
                        mycmd.Parameters.Add("@site",OleDbType.LongVarChar);
                        mycmd.Parameters["@site"].Value = itemss.Link;
                        //5
                        mycmd.Parameters.Add("@description",OleDbType.VarChar);
                        mycmd.Parameters["@description"].Value = itemss.Description;
                        //
                        mycon.Open();
                        mycmd.ExecuteNonQuery();
                        Session["count"] = Convert.ToInt32(Session["count"]) + 1;
                        mycon.Close();
                        break;
                    }
            }
        }
      
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值