●前段时间在写RSSFeed。 经过了几次...... 前段时间在写RSS Feed。 经过了几次的修改,把相关的代码写成了单独的类。感觉重用时还算比较方便的。于是贴出来,大家一起研究研究。以下是RssBase.cs类: 1using System; 2using System.Collections.Generic; 3using System.Xml; 4 5namespace 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 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 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 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("\n "); 202 // Write in channel block 203 rssWriter.WriteStartElement("channel"); 204 rssWriter.WriteString("\n "); 205 rssWriter.WriteElementString("title", TITLE); 206 rssWriter.WriteString("\n "); 207 rssWriter.WriteElementString("link", LINK); 208 rssWriter.WriteString("\n "); 209 rssWriter.WriteElementString("description", DESCRIPTION); 210 rssWriter.WriteString("\n "); 211 rssWriter.WriteElementString("pubDate", PUB_DATE); 212 rssWriter.WriteString("\n "); 213 rssWriter.WriteElementString("lastBuildDate", LAST_BUILD_DATE); 214 rssWriter.WriteString("\n "); 215 rssWriter.WriteElementString("language", LANGUAGE); 216 rssWriter.WriteString("\n "); 217 rssWriter.WriteElementString("copyright", COPYRIGHT); 218 rssWriter.WriteString("\n "); 219 rssWriter.WriteElementString("generator", GENERATOR); 220 rssWriter.WriteString("\n "); 221 // Write in image block 222 rssWriter.WriteStartElement("image"); 223 rssWriter.WriteString("\n "); 224 rssWriter.WriteElementString("url", IMAGE_URL); 225 rssWriter.WriteString("\n "); 226 rssWriter.WriteElementString("title", IMAGE_TITLE); 227 rssWriter.WriteString("\n "); 228 rssWriter.WriteElementString("link", IMAGE_LINK); 229 rssWriter.WriteString("\n "); 230 rssWriter.WriteEndElement(); 231 rssWriter.WriteString("\n "); 232 } 233 234 /**//// 235 /// Write in items 236 /// 237 private void WriteItem(ItemInfo item) 238 { 239 // Write in item block 240 rssWriter.WriteStartElement("item"); 241 rssWriter.WriteString("\n "); 242 rssWriter.WriteElementString("title", item.ItemTitle); 243 rssWriter.WriteString("\n "); 244 rssWriter.WriteElementString("link", item.ItemLink); 245 rssWriter.WriteString("\n "); 246 247 rssWriter.WriteStartElement("description"); 248 rssWriter.WriteString("\n "); 249 rssWriter.WriteCData(item.ItemDescription); 250 rssWriter.WriteString("\n "); 251 rssWriter.WriteEndElement(); 252 253 rssWriter.WriteString("\n "); 254 rssWriter.WriteElementString("pubDate", item.ItemPubDate); 255 rssWriter.WriteString("\n "); 256 rssWriter.WriteElementString("dc:date.Taken", item.ItemDateTaken); 257 rssWriter.WriteString("\n "); 258 rssWriter.WriteElementString("author", item.ItemAuthor); 259 rssWriter.WriteString("\n "); 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 /**//// 271 /// Write in item media 272 /// 273 /// ItemInfo item 274 private void WriteItemMedia(ItemInfo item) 275 { 276 // Write in media 277 rssWriter.WriteString("\n "); 278 rssWriter.WriteStartElement("media:content"); 279 rssWriter.WriteAttributeString("url", item.MediaContentUrl); 280 rssWriter.WriteAttributeString("type", "image/jpeg"); 281 rssWriter.WriteEndElement(); 282 rssWriter.WriteString("\n "); 283 rssWriter.WriteElementString("media:title", item.MediaTitle); 284 rssWriter.WriteString("\n "); 285 rssWriter.WriteStartElement("media:text"); 286 rssWriter.WriteAttributeString("type", "html"); 287 rssWriter.WriteString(item.MediaDescription); 288 rssWriter.WriteEndElement(); 289 rssWriter.WriteString("\n "); 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("\n "); 296 rssWriter.WriteStartElement("media:credit"); 297 rssWriter.WriteAttributeString("role", "photographer"); 298 rssWriter.WriteString(item.MediaAuthor); 299 rssWriter.WriteEndElement(); 300 rssWriter.WriteString("\n "); 301 302 } 303 304 /**//// 305 /// Close item element 306 /// 307 private void WriteItemEnd() 308 { 309 rssWriter.WriteString("\n "); 310 rssWriter.WriteEndElement(); 311 rssWriter.WriteString("\n "); 312 } 313 314 /**//// 315 /// Close all the elements 316 /// 317 private void WriteEnd() 318 { 319 rssWriter.WriteEndElement(); 320 rssWriter.WriteString("\n"); 321 rssWriter.WriteEndElement(); 322 rssWriter.WriteEndDocument(); 323 } 324 325 #endregion 326 327 /**//// 328 /// Write RSS feed 329 /// 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 10public class FeedBase : Page 11{ 12 public void GenerateRss() 13 { 14 15 IList 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 :) |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 23:30 , Processed in 0.242268 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.