ASP.NET做網站RSS閱讀

 一/在本機建立RSS虛擬目錄,再建立測試用的數據庫:(在這裏為了測試方便,使用Access庫,名稱為:db1.mdb),建一個表Article
內有:id,title,Description,Url,Author,Pubdate字段,再錄入適量數據,以便測試

二/打開VS,新建項目

在這個測試項目裏,共有三個文件,相關代碼如下
1-: Default.aspx(首頁)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Web_Rss._Default" %>
<html>
<head runat="server">
    <title>RSS閱讀--首頁</title>
    <link rel="alternate" type="application/rss+xml" title="JPC RSS" href="http://127.0.0.1/RSS/Rss.aspx" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Rss.aspx">RSS閱讀</asp:HyperLink>
    
    </div>
    </form>
</body>
</html>

2-RSS.cs (類文件,公用的產生RSS源的類)
using System;
using System.IO;
using System.Data;
using System.Xml;
using System.Collections.Generic;
using System.Text;
public class RSS {
    //實際工作時,下列公有變數需定義為屬性
    //如private Stream OutputStream=null;
    //public Stream OutputStream
    //{
    //    get
    //    {
    //        return OutputStream;
    //    }
    //    set
    //    {
    //        OutputStream = value;
    //    }
    //}
    public Stream OutputStream;
    public string RssTitle;
    public string PublisherUrl;
    public string Description;
    public string Copyright;
    public string Generator;
    public DataSet ItemSource;
    public string ItemTitleField;
    public string ItemUrlField;
    public string ItemDescriptionField;
    public string ItemPublicationDateField;
    public string ItemAuthor;
    /// <summary>
    /// Create RSS
    /// </summary>
    /// <param name="r">Rss</param>
    public static void PublishRss(RSS r)
    {
       XmlTextWriter writer = new XmlTextWriter(r.OutputStream, Encoding.UTF8);
       writer.WriteStartDocument();
       writer.WriteStartElement("rss");
       writer.WriteAttributeString("version", "2.0");
       writer.WriteStartElement("channel");
       writer.WriteElementString("title", r.RssTitle);
       writer.WriteElementString("link", r.PublisherUrl);
       writer.WriteElementString("description", r.Description);
       writer.WriteElementString("copyright", r.Copyright);
       writer.WriteElementString("generator", r.Generator);
       foreach (DataRow row in r.ItemSource.Tables[0].Rows) {
           writer.WriteStartElement("item");
           writer.WriteElementString("author", row[r.ItemAuthor].ToString());
           writer.WriteElementString("title", row[r.ItemTitleField].ToString());
           //writer.WriteElementString("link", row[r.ItemUrlField].ToString());
           writer.WriteElementString("link", "http://127.0.0.1/RSS/read.aspx?id=" + row[r.ItemUrlField].ToString());
           writer.WriteElementString("description", row[r.ItemDescriptionField].ToString());
           //writer.WriteElementString("pubDate", Convert.ToDateTime(row[r.ItemPublicationDateField]).ToString("dd MMM yyyy hh:mm:00 "));
           writer.WriteElementString("pubDate", GetRssDate(row[r.ItemPublicationDateField]));
           writer.WriteEndElement();
       }
       writer.WriteEndElement();
       writer.WriteEndElement();
       writer.Flush();
    }
    public static string GetRssDate(Object date)
    {
        DateTime rssDate = Convert.ToDateTime(date);
        string[] monthName = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
        StringBuilder sb = new StringBuilder();
        sb.Append(rssDate.Day);
        sb.Append(" ");
        sb.Append(monthName[Convert.ToInt32(rssDate.Month) - 1]);
        sb.Append(" ");
        sb.Append(rssDate.Year);
        sb.Append(" ");
        sb.Append(rssDate.ToLongTimeString());
        return sb.ToString();
    }
}

3-:Rss.aspx.cs(以RSS閱讀方式顯示數據)
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace Web_Rss
{
    public partial class Rss : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DataSet ds = GetDataSet();
            RSS rss = new RSS();
            rss.OutputStream = Response.OutputStream;
            rss.RssTitle = "以RSS方式閱讀本站文章";
            rss.PublisherUrl = "http://127.0.0.1/RSS/"; // Request.Url.Host;
            rss.Description = "RSS JPC";
            rss.Copyright = "Copyright (C) JPC.";
            rss.Generator = "JPC RSS Generator";
            rss.ItemSource = ds;
            rss.ItemTitleField = "Title";
            rss.ItemDescriptionField = "Description";
            rss.ItemPublicationDateField = "Pubdate";
            //rss.ItemUrlField = "Url";
            rss.ItemUrlField = "id";
            rss.ItemAuthor = "Author";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "text/xml";
            RSS.PublishRss(rss);
            Response.End();
        }
        public DataSet GetDataSet()
        {
            //SqlConnection conn = new SqlConnection("你的連接字符串");
            //string sql = "Select * From Article Order By ArticleId Desc";
            //SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            //DataSet ds = new DataSet();
            //da.Fill(ds, "Article");
            //return ds;
            string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                     + this.Server.MapPath("db1.mdb");
            OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
            OleDbCommand myAccessCommand = new OleDbCommand("Select * From Article Order By id Desc", myAccessConn);
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
            myAccessConn.Open();
            DataSet myDataSet = new DataSet();
            myDataAdapter.Fill(myDataSet, "Article");
            myAccessConn.Close();
            return myDataSet;
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章