ASP.NET网页如何生成 RSS Feed

前段时间在写RSS Feed。

  经过了几次的修改,把相关的代码写成了单独的类。感觉重用时还算比较方便的。于是贴出来,大家一起研究研究。以下是RssBase.cs类:

 
 1 using  System;
  2
using  System.Collections.Generic;
  3
using  System.Xml;
  
4
  5
namespace  MyMedia.Utilities
  
6 {
  
7      public   class  RssBase
  
8     {
  
9         RssBase constructor #region  RssBase constructor
 
10          public  RssBase(XmlTextWriter rssWriter)
 
11         {
 
12              this .rssWriter  =  rssWriter;
 
13         }
 
14          public  RssBase(XmlTextWriter rssWriter,  bool  hasMedia, IList < ItemInfo >  items)
 
15         {
 
16              this .rssWriter  =  rssWriter;
 
17              this .hasMedia  =  hasMedia;
 
18              this .items  =  items;
 
19         }
 
20          #endregion
 
21
 
22         [Serializable]
 
23          public   sealed   class  ItemInfo
 
24         {
 
25             ItemInfo constructor #region  ItemInfo constructor
 
26              public  ItemInfo() { }
 
27              public  ItemInfo( string  itemTitle,  string  itemLink,  string  itemDescription,  string  itemPubDate,  string  itemAuthor,  string  itemGuid)
 
28             {
 
29                  this .itemTitle  =  itemTitle;
 
30                  this .itemLink  =  itemLink;
 
31                  this .itemDescription  =  itemDescription;
 
32                  this .itemAuthor  =  itemAuthor;
 
33                  this .itemGuid  =  itemGuid;
 
34                  this .itemPubDate  =  itemPubDate;
 
35             }
 
36              public  ItemInfo( string  itemTitle,  string  itemLink,  string  itemDescription,  string  itemPubDate,  string  itemAuthor,
 
37                              string  itemGuid,  string  mediaContentUrl,  string  mediaTitle,  string  mediaDescription,
 
38                              string  mediaThumbUrl,  string  mediaThumbWidth,  string  mediaThumbHeight,  string  mediaAuthor)
 
39             {
 
40                  this .itemTitle  =  itemTitle;
 
41                  this .itemLink  =  itemLink;
 
42                  this .itemDescription  =  itemDescription;
 
43                  this .itemPubDate  =  itemPubDate;
 
44                  this .itemAuthor  =  itemAuthor;
 
45                  this .itemGuid  =  itemGuid;
 
46                  this .mediaContentUrl  =  mediaContentUrl;
 
47                  this .mediaTitle  =  mediaTitle;
 
48                  this .mediaDescription  =  mediaDescription;
 
49                  this .mediaThumbUrl  =  mediaThumbUrl;
 
50                  this .mediaThumbWidth  =  mediaThumbWidth;
 
51                  this .mediaThumbHeight  =  mediaThumbHeight;
 
52                  this .mediaAuthor  =  mediaAuthor;
 
53             }
 
54              #endregion
 
55
 
56             Internal item variables #region  Internal item variables
 
57              //  Item variables
  58              private   string  itemTitle;
 
59              private   string  itemLink;
 
60              private   string  itemDescription;
 
61              private   string  itemPubDate  =  DateTime.Now.ToString( " r " );
 
62              private   string  itemDateTaken  =  DateTime.Now.ToString();
 
63              private   string  itemAuthor;
 
64              private   string  itemGuid;
 
65              //  Media variables
  66              private   string  mediaContentUrl;
 
67              private   string  mediaTitle;
 
68              private   string  mediaDescription;
 
69              private   string  mediaThumbUrl;
 
70              private   string  mediaThumbWidth;
 
71              private   string  mediaThumbHeight;
 
72              private   string  mediaAuthor;
 
73              #endregion
 
74
 
75             Item properties #region  Item properties
 
76              public   string  ItemTitle
 
77             {
 
78                  set  { itemTitle  =  value; }
 
79                  get  {  return  itemTitle; }
 
80             }
 
81              public   string  ItemLink
 
82             {
 
83                  set  { itemLink  =  value; }
 
84                  get  {  return  itemLink; }
 
85             }
 
86              public   string  ItemDescription
 
87             {
 
88                  set  { itemDescription  =  value; }
 
89                  get  {  return  itemDescription; }
 
90             }
 
91              public   string  ItemPubDate
 
92             {
 
93                  set  { itemPubDate  =  value; }
 
94                  get  {  return  itemPubDate; }
 
95             }
 
96         public   string  ItemDateTaken
 
97             {
 
98                  set  { itemDateTaken  =  value; }
 
99                  get  {  return  itemDateTaken; }
100             }
101              public   string  ItemAuthor
102             {
103                  set  { itemAuthor  =  value; }
104                  get  {  return  itemAuthor; }
105             }
106              public   string  ItemGuid
107             {
108                  set  { itemGuid  =  value; }
109                  get  {  return  itemGuid; }
110             }
111              public   string  MediaContentUrl
112             {
113                  set  { mediaContentUrl  =  value; }
114                  get  {  return  mediaContentUrl; }
115             }
116              public   string  MediaTitle
117             {
118                  set  { mediaTitle  =  value; }
119                  get  {  return  mediaTitle; }
120             }
121              public   string  MediaDescription
122             {
123                  set  { mediaDescription  =  value; }
124                  get  {  return  mediaDescription; }
125             }
126              public   string  MediaThumbUrl
127             {
128                  set  { mediaThumbUrl  =  value; }
129                  get  {  return  mediaThumbUrl; }
130             }
131              public   string  MediaThumbWidth
132             {
133                  set  { mediaThumbWidth  =  value; }
134                  get  {  return  mediaThumbWidth; }
135             }
136              public   string  MediaThumbHeight
137             {
138                  set  { mediaThumbHeight  =  value; }
139                  get  {  return  mediaThumbHeight; }
140             }
141              public   string  MediaAuthor
142             {
143                  set  { mediaAuthor  =  value; }
144                  get  {  return  mediaAuthor; }
145             }
146              #endregion
147
148         }
149
150         Const  string #region  Const string
151          private   const   string  TITLE  =   " MyMedia RSS " ;
152          private   const   string  XMLNS_MEDIA  =   " http://www.MyWii.com.au " ;
153          private   const   string  XMLNS_DC  =   " http://purl.org/dc/elements/1.1/ " ;
154          private   const   string  LINK  =   " http://www.MyWii.com.au/ " ;
155          private   const   string  DESCRIPTION  =   " description " ;
156          private   const   string  LANGUAGE  =   " en-us " ;
157          private   const   string  COPYRIGHT  =   " Copyright 2006 " ;
158          private   const   string  GENERATOR  =   " MyMedia RSS Generator " ;
159          private   const   string  IMAGE_URL  =   " http://www.MyWii.com.au/img/main/feed.gif " ;
160          private   const   string  IMAGE_TITLE  =   " MyWii " ;
161          private   const   string  IMAGE_LINK  =   " http://www.MyWii.com.au " ;
162          private   string  PUB_DATE  =  DateTime.Now.ToString( " r " );
163          private   string  LAST_BUILD_DATE  =  DateTime.Now.ToString( " r " );
164
165          #endregion
166
167         Internal member variables #region  Internal member variables
168          private  XmlTextWriter rssWriter;
169          private   bool  hasMedia;
170          private  IList < ItemInfo >  items;
171          #endregion
172
173         Properties #region  Properties
174          public  XmlTextWriter RssWriter
175         {
176              set  { rssWriter  =  value; }
177              get  {  return  rssWriter; }
178         }
179          public   bool  HasMedia
180         {
181              set  { hasMedia  =  value; }
182              get  {  return  hasMedia; }
183         }
184          public  IList < ItemInfo >  Items
185         {
186              set  { items  =  value; }
187              get  {  return  items; }
188         }
189
190          #endregion
191
192         Private method #region  Private method
193
194          private   void  WritePrologue()
195         {
196             rssWriter.WriteStartDocument();
197             rssWriter.WriteStartElement( " rss " );
198             rssWriter.WriteAttributeString( " version " " 2.0 " );
199             rssWriter.WriteAttributeString( " xmlns:media " , XMLNS_MEDIA);
200             rssWriter.WriteAttributeString( " xmlns:dc " , XMLNS_DC);
201             rssWriter.WriteString( "      " );
202              //  Write in channel block
203             rssWriter.WriteStartElement( " channel " );
204             rssWriter.WriteString( "       " );
205             rssWriter.WriteElementString( " title " ,TITLE);
206             rssWriter.WriteString( "       " );
207             rssWriter.WriteElementString( " link " , LINK);
208             rssWriter.WriteString( "       " );
209             rssWriter.WriteElementString( " description " , DESCRIPTION);
210             rssWriter.WriteString( "       " );
211             rssWriter.WriteElementString( " pubDate " , PUB_DATE);
212             rssWriter.WriteString( "       " );
213             rssWriter.WriteElementString( " lastBuildDate " , LAST_BUILD_DATE);
214             rssWriter.WriteString( "       " );
215             rssWriter.WriteElementString( " language " , LANGUAGE);
216             rssWriter.WriteString( "       " );
217             rssWriter.WriteElementString( " copyright " , COPYRIGHT);
218             rssWriter.WriteString( "       " );
219             rssWriter.WriteElementString( " generator " , GENERATOR);
220             rssWriter.WriteString( "       " );
221              //  Write in image block
222             rssWriter.WriteStartElement( " image " );
223             rssWriter.WriteString( "          " );
224             rssWriter.WriteElementString( " url " , IMAGE_URL);
225             rssWriter.WriteString( "          " );
226             rssWriter.WriteElementString( " title " , IMAGE_TITLE);
227             rssWriter.WriteString( "          " );
228             rssWriter.WriteElementString( " link " , IMAGE_LINK);
229             rssWriter.WriteString( "       " );
230             rssWriter.WriteEndElement();
231             rssWriter.WriteString( "       " );
232         }
233
234          /**/ ///   <summary>
235          ///  Write in items
236          ///   </summary>
237          private   void  WriteItem(ItemInfo item)
238         {
239              //  Write in item block
240             rssWriter.WriteStartElement( " item " );
241             rssWriter.WriteString( "          " );
242             rssWriter.WriteElementString( " title " , item.ItemTitle);
243             rssWriter.WriteString( "          " );
244             rssWriter.WriteElementString( " link " , item.ItemLink);
245             rssWriter.WriteString( "          " );
246
247             rssWriter.WriteStartElement( " description " );
248             rssWriter.WriteString( "           " );
249             rssWriter.WriteCData(item.ItemDescription);
250             rssWriter.WriteString( "          " );
251             rssWriter.WriteEndElement();
252
253             rssWriter.WriteString( "          " );
254             rssWriter.WriteElementString( " pubDate " , item.ItemPubDate);
255             rssWriter.WriteString( "          " );
256             rssWriter.WriteElementString( " dc:date.Taken " , item.ItemDateTaken);
257             rssWriter.WriteString( "          " );
258             rssWriter.WriteElementString( " author " , item.ItemAuthor);
259             rssWriter.WriteString( "          " );
260             rssWriter.WriteStartElement( " guid " );
261             rssWriter.WriteAttributeString( " isPermaLink " " false " );
262             rssWriter.WriteString(item.ItemGuid);
263             rssWriter.WriteEndElement();
264
265
266              //  Write item media here
267
268         }
269
270          /**/ ///   <summary>
271          ///  Write in item media
272          ///   </summary>
273          ///   <param name="item"> ItemInfo item </param>
274          private   void  WriteItemMedia(ItemInfo item)
275         {
276              //  Write in media
277             rssWriter.WriteString( "          " );
278             rssWriter.WriteStartElement( " media:content " );
279             rssWriter.WriteAttributeString( " url " , item.MediaContentUrl);
280             rssWriter.WriteAttributeString( " type " " image/jpeg " );
281             rssWriter.WriteEndElement();
282             rssWriter.WriteString( "          " );
283             rssWriter.WriteElementString( " media:title " , item.MediaTitle);
284             rssWriter.WriteString( "          " );
285             rssWriter.WriteStartElement( " media:text " );
286             rssWriter.WriteAttributeString( " type " " html " );
287             rssWriter.WriteString(item.MediaDescription);
288             rssWriter.WriteEndElement();
289             rssWriter.WriteString( "          " );
290             rssWriter.WriteStartElement( " media:thumbnail " );
291             rssWriter.WriteAttributeString( " url " , item.MediaThumbUrl);
292             rssWriter.WriteAttributeString( " height " , item.MediaThumbHeight);
293             rssWriter.WriteAttributeString( " width " , item.MediaThumbWidth);
294             rssWriter.WriteEndElement();
295             rssWriter.WriteString( "          " );
296             rssWriter.WriteStartElement( " media:credit " );
 rssWriter.WriteAttributeString(
" role " " photographer " );
298             rssWriter.WriteString(item.MediaAuthor);
299             rssWriter.WriteEndElement();
300             rssWriter.WriteString( "       " );
301
302         }
303
304          /**/ ///   <summary>
305          ///  Close item element 
306          ///   </summary>
307          private   void  WriteItemEnd()
308         {
309             rssWriter.WriteString( "       " );
310             rssWriter.WriteEndElement();
311             rssWriter.WriteString( "       " );
312         }
313
314          /**/ ///   <summary>
315          ///  Close all the elements
316          ///   </summary>
317          private   void  WriteEnd()
318         {
319             rssWriter.WriteEndElement();
320             rssWriter.WriteString( " " );
321             rssWriter.WriteEndElement();
322             rssWriter.WriteEndDocument();
323         }
324
325          #endregion
326
327          /**/ ///   <summary>
328          ///  Write RSS feed
329          ///   </summary>
330          public   void  WriteRSS()
331         {
332             WritePrologue();
333              foreach  (ItemInfo info  in  items)
334             {
335                 WriteItem(info);
336                  if  (hasMedia)
337                     WriteItemMedia(info);
338                 WriteItemEnd();
339             }
340             WriteEnd();
341         }
342     }
343

  然后使用一个FeedBase.cs类,调用上面的RssBase类中的方法和属性。代码如下。(该文件有改动,如要编译,需做相关修改)

1   using  System.Collections.Generic;
2   using  System.Configuration;
3   using  System.Data;
4   using  System.Text;
5   using  System.Web;
6   using  System.Web.UI;
7   using  System.Xml;
8
9
10
public   class  FeedBase : Page
11 {
12      public   void  GenerateRss()
13     {
14
15         IList < RssBase.ItemInfo >  items  =   new  List < RssBase.ItemInfo > ();
16
17          //  Populate items. 
18          foreach  (DataRow row  in  rows)
19         {
20             RssBase.ItemInfo item  =   new  RssBase.ItemInfo(row[ " Title " ].ToString(),  " link " , row[ " Description " ].ToString(), row[ " PubDate " ].ToString(), row[ " Author " ].ToString(),  " guid " );
21             items.Add(item);
22         }
23
24         XmlTextWriter xmlWriter  =   new  XmlTextWriter(Response.OutputStream,
25             Encoding.UTF8);
26
27         RssBase rssBase  =   new  RssBase(xmlWriter,  false , items);
28         rssBase.WriteRSS();
29
30         xmlWriter.Flush();
31         xmlWriter.Close();
32
33         Response.ContentEncoding  =  Encoding.UTF8;
34         Response.ContentType  =   " text/xml " ;
35         Response.Cache.SetCacheability(HttpCacheability.Public);
36
37         Response.End();
38     }
39
40  }

  最后,只要新建一个feed.aspx文件,继承FeedBase类,调用该类中的GenerateRss()方法就可以轻松生成你所期望的RSS Feed :)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值