나는 얼마 전에 RSS 피드를 작성하고 있었습니다.
여러 수정을 거쳐 관련 코드가 별도의 클래스에 작성되었습니다.
재사용이 매우 편리한 느낌입니다. 그래서 게시하고 모두가 함께 공부하게 했습니다.
다음은 RssBase.cs 클래스입니다.
1사용 시스템;
2System.Collections.Generic을 사용합니다.
3System.Xml을 사용합니다.
4
5네임스페이스 MyMedia.Utilities
6{
7 공개 클래스 RssBase
8 {
9 RssBase 생성자#region RssBase 생성자
10 공개 RssBase(XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14개 공용 RssBase(XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo> 항목)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = 아이템;
19}
20 #끝지역
스물하나
22 [직렬화 가능]
23 공개 봉인 클래스 ItemInfo
스물넷 {
25 ItemInfo 생성자#region ItemInfo 생성자
26 공개 ItemInfo() { }
27 public ItemInfo(문자열 itemTitle, 문자열 itemLink, 문자열 itemDescription, 문자열 itemPubDate, 문자열 itemAuthor, 문자열 itemGuid)
28 {
29 this.itemTitle = 아이템제목;
30 this.itemLink = 아이템링크;
31 this.itemDescription = itemDescription;
32 this.itemAuthor = 아이템저자;
33 this.itemGuid = itemGuid;
34 this.itemPubDate = itemPubDate;
35}
36 public ItemInfo(문자열 itemTitle, 문자열 itemLink, 문자열 itemDescription, 문자열 itemPubDate, 문자열 itemAuthor,
37 문자열 itemGuid, 문자열 mediaContentUrl, 문자열 mediaTitle, 문자열 mediaDescription,
38 문자열 mediaThumbUrl, 문자열 mediaThumbWidth, 문자열 mediaThumbHeight, 문자열 mediaAuthor)
39 {
40 this.itemTitle = 아이템제목;
41 this.itemLink = 아이템링크;
42 this.itemDescription = 아이템설명;
43 this.itemPubDate = itemPubDate;
44 this.itemAuthor = 아이템저자;
45 this.itemGuid = 아이템가이드;
46 this.mediaContentUrl = 미디어컨텐트Url;
47 this.mediaTitle = 미디어타이틀;
48 this.mediaDescription = 미디어설명;
49 this.mediaThumbUrl = 미디어ThumbUrl;
50 this.mediaThumbWidth = 미디어ThumbWidth;
51 this.mediaThumbHeight = 미디어ThumbHeight;
52 this.mediaAuthor = 미디어저자;
53}
54 #끝지역
55
56 내부 항목 변수#region 내부 항목 변수
57 // 아이템 변수
58 개인 문자열 itemTitle;
59 개인 문자열 itemLink;
60 개인 문자열 itemDescription;
61 개인 문자열 itemPubDate = DateTime.Now.ToString("r");
62 개인 문자열 itemDateTaken = DateTime.Now.ToString();
63 개인 문자열 itemAuthor;
64 개인 문자열 itemGuid;
65 // 미디어 변수
66 개인 문자열 mediaContentUrl;
67 개인 문자열 mediaTitle;
68 개인 문자열 mediaDescription;
69 개인 문자열 mediaThumbUrl;
70 개인 문자열 mediaThumbWidth;
71 비공개 문자열 mediaThumbHeight;
72 개인 문자열 mediaAuthor;
73 #끝지역
74
75 아이템 속성#region 아이템 속성
76 공개 문자열 ItemTitle
77 {
78 세트 { 항목제목 = 값 }
79 get { 항목 제목 반환 }
80}
81 공개 문자열 ItemLink
82 {
83 세트 { itemLink = 값 }
84 get { 아이템링크 반환 }
85}
86 공개 문자열 항목 설명
87 {
88 세트 { 항목 설명 = 값 }
89 get { 항목 설명 반환 }
90}
91 공개 문자열 ItemPubDate
92 {
93 세트 { itemPubDate = 값 }
94 get { return itemPubDate };
95 }
96 공개 문자열 ItemDateTaken
97 {
98 세트 { itemDateTaken = 값 }
99 get { return itemDateTaken };
100}
101 공개 문자열 ItemAuthor
102 {
103 세트 { itemAuthor = 값 }
104 get { 항목 작성자 반환 }
105 }
106 공개 문자열 ItemGuid
107 {
108 세트 { itemGuid = 값 }
109 get { itemGuid 반환 }
110 }
111 공개 문자열 MediaContentUrl
112 {
113 세트 { mediaContentUrl = 값 }
114 get { return mediaContentUrl };
115 }
116 공개 문자열 MediaTitle
117 {
118 세트 { mediaTitle = 값 }
119 get { 미디어타이틀 반환 }
120 }
121 공개 문자열 MediaDescription
122 {
123 세트 { 미디어 설명 = 값 }
124 get { 미디어 설명 반환 }
125 }
126 공개 문자열 MediaThumbUrl
127 {
128 세트 { mediaThumbUrl = 값 }
129 get { 미디어ThumbUrl 반환 }
130 }
131 공개 문자열 MediaThumbWidth
132 {
133 세트 { mediaThumbWidth = 값 }
134 get { return mediaThumbWidth };
135 }
136 공개 문자열 MediaThumbHeight
137 {
138 세트 { mediaThumbHeight = 값 }
139 get { return mediaThumbHeight };
140 }
141 공개 문자열 MediaAuthor
142 {
143 세트 { mediaAuthor = 값 }
144 get { 미디어작성자 반환 }
145 }
146 #끝지역
147
148 }
149
150 Const 문자열#region Const 문자열
151 개인 const 문자열 TITLE = "MyMedia RSS";
152 private const string XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 개인 const 문자열 XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 개인 const 문자열 LINK = " http://www.MyWii.com.au/ ";
155 개인 const 문자열 DESCRIPTION = "설명";
156 개인 const 문자열 LANGUAGE = "en-us";
157 private const string COPYRIGHT = "저작권 2006";
158 private const string GENERATOR = "MyMedia RSS 생성기";
159 개인 const 문자열 IMAGE_URL = " 160 개인 const 문자열 IMAGE_TITLE = "MyWii";
161 private const string IMAGE_LINK = " http://www.MyWii.com.au ";
162 개인 문자열 PUB_DATE = DateTime.Now.ToString("r");
163 개인 문자열 LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #끝지역
166
167 내부멤버변수#region 내부멤버변수
168 개인 XmlTextWriter rssWriter;
169 개인 bool hasMedia;
비공개 IList<ItemInfo> 항목 170개;
171 #끝지역
172
173 속성#지역 속성
174 공개 XmlTextWriter RssWriter
175 {
176 설정 {rssWriter = 값 }
177 get { 반환 rssWriter }
178 }
179 공개 bool HasMedia
180 {
181 세트 { hasMedia = 값 }
182 get { 반환 hasMedia }
183}
184 공개 IList<ItemInfo> 항목
185 {
186 세트 { 항목 = 값 }
187 get {반품 항목 }
188 }
189
190 #끝지역
191
192 프라이빗 메소드#region 프라이빗 메소드
193
194 비공개 무효 WritePrologue()
195 {
196 RSSWriter.WriteStartDocument();
197 RSSWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("버전", "2.0");
199 rssWriter.WriteAttributeString("xmlns:미디어", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // 채널 블록에 쓰기
203 rssWriter.WriteStartElement("채널");
204 RSSWriter.WriteString("n");
205 rssWriter.WriteElementString("제목", TITLE);
206 RSSWriter.WriteString("n");
207 rssWriter.WriteElementString("링크", LINK);
208 RSSWriter.WriteString("n");
209 rssWriter.WriteElementString("설명", 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);
216 rssWriter.WriteString("n");
217 rssWriter.WriteElementString("저작권", COPYRIGHT);
218 RSSWriter.WriteString("n");
219 rssWriter.WriteElementString("생성기", GENERATOR);
220 rssWriter.WriteString("n ");
221 // 이미지 블록에 쓰기
222 rssWriter.WriteStartElement("이미지");
223 RSSWriter.WriteString("n");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n");
226 rssWriter.WriteElementString("제목", IMAGE_TITLE);
227 rssWriter.WriteString("n");
228 rssWriter.WriteElementString("링크", IMAGE_LINK);
229 RSSWriter.WriteString("n");
230 RSSWriter.WriteEndElement();
231 RSSWriter.WriteString("n");
232 }
233
234 /**//// <요약>
235 /// 항목 쓰기
236 /// </summary>
237 개인 무효 WriteItem(ItemInfo 항목)
238 {
239 // 아이템 블록에 쓰기
240 rssWriter.WriteStartElement("항목");
241 RSSWriter.WriteString("n");
242 rssWriter.WriteElementString("제목", item.ItemTitle);
243 RSSWriter.WriteString("n");
244 rssWriter.WriteElementString("link", item.ItemLink);
245 RSSWriter.WriteString("n");
246
247 rssWriter.WriteStartElement("설명");
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("작성자", 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 // 여기에 아이템 미디어 쓰기
267
268 }
269
270 /**//// <요약>
271 /// 아이템 미디어 쓰기
272 /// </summary>
273 /// <param name="item">ItemInfo 항목</param>
274 개인 무효 WriteItemMedia(ItemInfo 항목)
275 {
276 //미디어에 쓰기
277 RSSWriter.WriteString("n");
278 rssWriter.WriteStartElement("미디어:콘텐츠");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("type", "image/jpeg");
281 RSSWriter.WriteEndElement();
282 RSSWriter.WriteString("n");
283 rssWriter.WriteElementString("미디어:제목", item.MediaTitle);
284 RSSWriter.WriteString("n");
285 rssWriter.WriteStartElement("미디어:텍스트");
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("높이", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("너비", item.MediaThumbWidth);
294 RSSWriter.WriteEndElement();
295 RSSWriter.WriteString("n");
296 rssWriter.WriteStartElement("미디어:신용");
297 rssWriter.WriteAttributeString("역할", "사진가");
298 rssWriter.WriteString(item.MediaAuthor);
299 RSSWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <요약>
305 /// 항목 요소 닫기
306 /// </summary>
307 개인 무효 WriteItemEnd()
308 {
309 RSSWriter.WriteString("n");
310 RSSWriter.WriteEndElement();
311 rssWriter.WriteString("n");
312 }
313
314 /**//// <요약>
315 /// 모든 요소를 닫습니다.
316 /// </summary>
317 개인 무효 WriteEnd()
318 {
319 RSSWriter.WriteEndElement();
320 RSSWriter.WriteString("n");
321 RSSWriter.WriteEndElement();
322 RSSWriter.WriteEndDocument();
323 }
324
325 #끝지역
326
327 /**//// <요약>
328 /// RSS 피드 쓰기
329 /// </summary>
330 공개 무효 WriteRSS()
331 {
332 쓰기프롤로그();
333 foreach(항목의 ItemInfo 정보)
334 {
335 쓰기항목(정보);
336 if(미디어 있음)
337 쓰기항목미디어(정보);
338 쓰기항목끝();
339 }
340 쓰기끝();
341 }
342 }
343}
그런 다음 FeedBase.cs 클래스를 사용하여 위 RssBase 클래스의 메서드와 속성을 호출합니다. 코드는 다음과 같습니다. (이 파일은 변경되었습니다. 컴파일하려면 관련 수정이 필요합니다.)
1using System.Collections.Generic;
2시스템 구성 사용;
3System.Data 사용;
4System.Text 사용;
5System.Web 사용;
6System.Web.UI 사용;
7System.Xml 사용;
8
9
10공개 클래스 FeedBase : 페이지
11{
12 공개 무효 생성Rss()
13 {
14
15 IList<RssBase.ItemInfo> 항목 = new List<RssBase.ItemInfo>();
16
17 // 항목을 채웁니다.
18 foreach(행의 DataRow 행)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row[ "저자"].ToString(), "guid");
21개 항목.추가(항목);
스물 둘 }
스물셋
24 XmlTextWriter xmlWriter = 새로운 XmlTextWriter(Response.OutputStream,
25 인코딩.UTF8);
26
27 RssBase rssBase = new RssBase(xmlWriter, false, 항목);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Response.ContentEncoding = 인코딩.UTF8;
34 Response.ContentType = "텍스트/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 응답.끝();
38 }
39
40}
41
42
마지막으로, 새로운 Feed.aspx 파일을 생성하고 FeedBase 클래스를 상속한 후 이 클래스에서 생성Rss() 메서드를 호출하면 원하는 RSS 피드를 쉽게 생성할 수 있습니다. :)
제안이나 아이디어가 있으시면 메시지를 남겨주세요!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html