分享
 
 
 

ASP.NET 生成 RSS Feed

王朝asp·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

前段时间在写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<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("\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 /**//// <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("\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 /**//// <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("\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 /**//// <summary>

305 /// Close item element

306 /// </summary>

307 private void WriteItemEnd()

308 {

309 rssWriter.WriteString("\n ");

310 rssWriter.WriteEndElement();

311 rssWriter.WriteString("\n ");

312 }

313

314 /**//// <summary>

315 /// Close all the elements

316 /// </summary>

317 private void WriteEnd()

318 {

319 rssWriter.WriteEndElement();

320 rssWriter.WriteString("\n");

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类中的方法和属性。代码如下。(该文件有改动,如要编译,需做相关修改)

1using System.Collections.Generic;

2using System.Configuration;

3using System.Data;

4using System.Text;

5using System.Web;

6using System.Web.UI;

7using System.Xml;

8

9

10public 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}

41

42

最后,只要新建一个feed.aspx文件,继承FeedBase类,调用该类中的GenerateRss()方法就可以轻松生成你所期望的RSS Feed :)

有什么建议和想法,请留言!

http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有