آشنایی با سند RSS و برنامه نویسی آن با C#.NET

RSS مخفف کلمات Rich Site Summary یا Really Simple Syndication می‌‌باشد. هدف از RSS فراهم کردن روشی بوده است که بتوان از طریق آن بدون مراجعه به یک وبلاگ، سایت خبری یا هر سایتی که به مرور مطالبی در آن منتشر می‌شود، از محتویات جدید آن سایت مطلع شد. در حقیقت به جای اینکه به بقیه از طریق ایمیل و یا فرستادن یک پیغام در messenger، یا عضویت در خبرنامه سایت اطلاع دهیم که مطلب جدیدی به سایت اضافه شده است، می‌توان یک منبع RSS برای سایت تولید کرد و سپس وظیفه وجود یا عدم وجود مطلب جدید در سایت مورد نظر را به نرم‌افزارهای RSS Reader واگذار کرد. یک منبع RSS چیزی جز یک سند XML نیست که در آن محتویات سایت به همراه مشخصات مربوط به آن در قالب یک سند XML با رعایت استانداردهای RSS قرار داده می‌شود.
اولین روشی که برای ساخت یک منبع RSS برای سایت وجود دارد، ایجاد آن به صورت دستی است. ایراد این روش آن است که هر دفعه که مطالب سایت بروزرسانی می شود و مطلب جدیدی اضافه می‌شود، باید محتویات این سند RSS را نیز به صورت دستی تغییر داد.
در این مقاله می خواهیم با استفاده از زبان C#.NET، یک منبع RSS برای سایت به صورت دینامیک ایجاد کنیم. هر بار که محتویات سایت بروز می شوند این برنامه محتویات منبع RSS را نیز بروز خواهد کرد. نمونه‌ای از یک سند RSS در پایین دیده می‌شود.
<?xml version=”1.0″ encoding=”utf-8″ ?>
<rss version=”2.0″>
<channel>
<title>دفتر ایام</title>
<managingEditor>حسن شجاعی</managingEditor>
<generator>Hassan Shojaee’‘s personal website manager</generator>
<link>http://www.shojaee.com/weblog</link>
<lastBuildDate>5/17/2007 1:43:02 PM</lastBuildDate>
<language>fa</language>
<item>
<title>عنوان مطلب اول</title>
<description>این مطلب اول وبلاگ است</description>
<link>http://www.shojaee.com/weblog/archives/1386/first-post</link>
<pubDate>5/11/2007 10:00:00 AM</pubDate>
<guid>weblog.shojaee.com.153</guid>
<author>حسن شجاعی</author>
</item>
<item>
<title>عنوان مطلب دوم</title>
<description>این مطلب دوم این وبلاگ است</description>
<link>http://www.shojaee.com/weblog/archives/1386/second-post</link>
<pubDate>5/11/2007 10:00:00 AM</pubDate>
<guid>weblog.shojaee.com.153</guid>
<author>حسن شجاعی</author>
</item>
</channel>
</rss>
همانگونه که دیده می شود، سند RSS خیلی ساده است. خط اول حاوی یک توضیح است که می‌گوید این یک سند XML است که نسخه ۱/۰ می‌باشد و از روش کدگذاری utf-8 برای ذخیره محتویات آن استفاده شده است. این خط دقیقا شبیه به شروع یک سند XML می‌باشد. همانگونه که قبلا گفته شد، هر سند RSS یک سند XML است که تگ‌های بکاربرده شده در آن به تگ‌های خاصی محدود شده‌اند. به عبارت دیگر، استانداردی برای نام تگ‌ها و نحوه قرار گرفتن آنها در سند RSS تعیین شده است. تگ اصلی این سند، rss است که فعلا نسخه ۲/۰ آن استفاده می‌شود. در داخل این تگ، باید یک تگ دیگر با نام channel ایجاد کرد. می‌توان در داخل یک سند RSS، چندین تگ channel داشت، در داخل هر کدام از این تگ‌ها اطلاعات یک سایت نگهداری می‌شود. در اینجا، چون فقط می‌خواهیم اطلاعات یک سایت را در داخل سند RSS خود ذخیره کنیم، تنها از یک تگ channel استفاده شده است. اطلاعاتی که در مورد یک سایت می‌توان ارائه داد، شامل عنوان سایت می‌باشد با تگ title در بالا مشخص شده‌ است، مدیر سایت که با تگ managingEditor مشخص شده است، تولید کننده سند RSS که در تگ generator قرار می‌گیرد، آدرس سایت در تگ link، تاریخ آخرین بروزرسانی سایت در تگ lastBuildDate و زبان استفاده شده در سایت که در تگ language قرار می‌گیرد. همچنین یکسری تگ item داریم که هر کدام از آنها به یک مطلب اخصاص دارد. در داخل این تگ‌های item، اطلاعات مطالب موجود در سایت را قرار می‌دهیم. همانگونه که در مثال بالا دیده می‌شود، اطلاعاتی که برای هر مطلب باید در این سند قرار بگیرد شامل عنوان مطلب، متن مطلب، آدرس آن، تاریخ اضافه شده مطلب، نویسنده آن و یک مشخصه واحد برای هر مطلب که این مشخصه باید واحد باشد(این تعریف ایده‌آل آن است که مشخصه هیچ مطلب دیگری در اینترنت نباید مشابه این مشخصه شود).
مواردی که در بالا در مورد یک سند RSS گفته شد، به‌گونه‌ای است که امکان ساخت آن به صورت دستی هم وجود دارد، ولی در ادامه این مقاله، می‌خواهیم سورس برنامه ایجاد یک سند RSS برای محتویات یک سایت از طریق C#.NET را بیاوریم. در خط اول این برنامه، باید محتویات سایت شما، در داخل یک DataSet قرار گیرد و سپس بعد از همان سند RSSای که در بالا توضیح داده شد، قدم به قدم و تگ به تگ ساخته می‌شود. کد زیر نیاز به توضیح ندارد!
DataSet ds=get_weblog_data();
XmlElement workNode;
XmlElement itemNode;
XmlAttribute workAttr;
XmlDocument rssDoc = new XmlDocument();
XmlElement docNode = rssDoc.CreateElement(”rss”);
XmlAttribute attr = rssDoc.CreateAttribute(”version”);
attr.Value = “2.0″;
docNode.Attributes.Append(attr);
rssDoc.AppendChild(docNode);
XmlElement chanNode = rssDoc.CreateElement(”channel”);
docNode.AppendChild(chanNode);
workNode = rssDoc.CreateElement(”title”);
workNode.InnerText = “دفتر ایام”;
chanNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”managingEditor”);
workNode.InnerText = “حسن شجاعی”;
chanNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”generator”);
workNode.InnerText = “Hassan Shojaee’‘s personal website manager”;
chanNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”link”);
workNode.InnerText = “http://www.shojaee.com/weblog”;
chanNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”lastBuildDate”);
workNode.InnerText = DateTime.Now.ToString();
chanNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”language”);
workNode.InnerText = “fa”;
chanNode.AppendChild(workNode);
DataRow dr;
String tmp;
for( int index=0; index < ds.Tables[0].Rows.Count; index++ )
{
dr = ds.Tables[0].Rows[index];
itemNode = rssDoc.CreateElement(”item”);
chanNode.AppendChild(itemNode);
workNode = rssDoc.CreateElement(”title”);
workNode.InnerText = dr["title"].ToString();
itemNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”description”);
workNode.InnerText = dr["content"].ToString();
itemNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”link”);
workNode.InnerText = dr["filename"].ToString();
itemNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”pubDate”);
workNode.InnerText = dr["miladi"].ToString();
itemNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”guid”);
workNode.InnerText = “weblog.shojaee.com.” + dr["id"].ToString();
itemNode.AppendChild(workNode);
workNode = rssDoc.CreateElement(”author”);
workNode.InnerText = “حسن شجاعی”;
itemNode.AppendChild(workNode);
}
rssDoc.CreateXmlDeclaration(”1.0″,”UTF-8″,”");
XmlTextWriter w=new XmlTextWriter(”rss.xml”, new System.Text.UTF8Encoding());
rssDoc.Save(w);
منبع:

 

/ 0 نظر / 25 بازدید