ساخت یک خروجی RSS برای سایت شما
آموزش داده شده در دانشنامه سوران - دانشنامه صبح ايران
فرمت RSS
همان طور که قبلا اشاره شد RSS چیزی به جز یک XML نشانه گذاری شده با تگ های مخصوص نیست. کد زیر یک نمونه ساده RSS را نشان می دهد.
<rss version="2.0″>
<channel xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>IranASP.NET New Articles RSS Feed</title>
<language>fa-IR</language>
<copyright>(c) 2004 by IranASP.NET</copyright>
<pubDate>Sun, 08 Aug 2004 06:11:37 GMT</pubDate>
<lastBuildDate>Sun, 08 Aug 2004 06:11:37 GMT</lastBuildDate>
<generator>IranASP.NET rss generator</generator>
<item>
<title>کاهش حجم خروجی در ASP.NET</title>
<link>http://www.iranasp.net/articles/showarticle.aspx?articleid=154</link>
<pubDate>Sun, 25 Jul 2004 19:30:00 GMT</pubDate>
</item>
</channel>
</rss>
اجازه بدهید به تگ های این سند کمی دقیق تر نگاه کنیم
آموزش داده شده در دانشنامه سوران - دانشنامه صبح ايران
فرمت RSS
همان طور که قبلا اشاره شد RSS چیزی به جز یک XML نشانه گذاری شده با تگ های مخصوص نیست. کد زیر یک نمونه ساده RSS را نشان می دهد.
<rss version="2.0″>
<channel xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>IranASP.NET New Articles RSS Feed</title>
<language>fa-IR</language>
<copyright>(c) 2004 by IranASP.NET</copyright>
<pubDate>Sun, 08 Aug 2004 06:11:37 GMT</pubDate>
<lastBuildDate>Sun, 08 Aug 2004 06:11:37 GMT</lastBuildDate>
<generator>IranASP.NET rss generator</generator>
<item>
<title>کاهش حجم خروجی در ASP.NET</title>
<link>http://www.iranasp.net/articles/showarticle.aspx?articleid=154</link>
<pubDate>Sun, 25 Jul 2004 19:30:00 GMT</pubDate>
</item>
</channel>
</rss>
اجازه بدهید به تگ های این سند کمی دقیق تر نگاه کنیم
<rss> : تشکیل دهنده تگ ریشه سند است که شامل نسخه سند RSS هم می باشد. آخرین نسخه RSS نسخه ۲ است.
<channel> : گره ریشه سند RSS می تواند تگ <channel> هم داشته باشد. این تگ هم به نوبه خود می تواند شامل گره های <tile>,<link> و <item> باشد.
<title> : مشخص کننده عنوان سند RSS است.
<link> : این تگ URL سایت ارایه دهنده RSS را مشخص می کند.
<description> : جزییات و اطلاعات بیشتر مربوط به این سند را مشخص می کند.
<copyright> : اطلاعات مربوط به کپی رایت سند را مشخص می کند.
<generator> : این تگ Application ای که این سند را ساخته معرفی می کند.
علاوه بر تگ های بالا، یک سند RSS می تواند یک یا چند تگ <item> داشته باشد. تگ <item> مشخص کننده همان محتوایی است که می خواهید به اشتراک بگذارید مثلا یک مقاله یا یکی از پست های یک وبلاگ. هر تگ <item> به علاوه شامل زیرگره های زیر است.
<title> : این تگ عنوان آیتم را مشخص می کند مثلا عنوان مقاله.
<link> : این تگ URL آن آیتم را نشان می دهد مثلا آدرس مقاله در وب.
<description> : این تگ آیتم را توصیف می کند، در مورد یک مقاله می تواند شامل خلاصه مقاله باشد.
<pubDate> : این تگ تاریخ انتشار آن آیتم را نشان می دهد. فرمت معمول برای نمایش این تاریخ به صورت Sun, 25 Jul 2004 12:00:00 GMT است.
چگونه یک سند RSS بسازیم ؟
حالا که با ساختار یک فایل RSS آشنا شدید، به سراغ دات نت می رویم. چگونه در دات نت یک فایل RSS بسازیم؟ دات نت مجوعه ای غنی ای از کلاس های مرتبط با XML دارد. برای ساختن فایل RSS ما از کلاس XML Text writer استفاده می کنیم. ولی می خواهیم یک راه حل کلی داشته باشیم که با هر وب سایتی کار کند. معنی این حرف این است که کد ما باید مستقل از یک جدول یا یک فیلد خاص در دیتابیس سایت باشد. برای این کار ما یک کلاس در VS.NET می سازیم. منبع تگ های <item> سند XML ما هم یک دیتاست است که از جدول دلخواه ما در دیتابیس ساخته می شود. کلاسی که قصد نوشتن آن را داریم ویژگی ها (properties) و متدهای (methods) زیر را دارد:
ویژگی ها(properties)
Outputstream : یک شی جریان ( Stream ) که خروجی سند در آن نوشته می شود.
RssTitle : مقدار تگ <title> را در زیر تگ <channel> مشخص می کند.
PublisherUrl : مقدار تگ <link> را در زیر تگ <channel> مشخص می کند.
Description : مقدار تگ <description> را در تگ <channel> مشخص می کند.
Copyright : مقدار تگ <copyright> را در زیر تگ <channel> مشخص می کند.
Generator : مقدار تگ <generator> را در زیر تگ <channel> مشخص می کند.
ItemSource : تعیین کننده شی دیتاستی است که سطرهای آیتم را شامل می شود.
ItemTitleField : نام Datacolumn ( ستون داده ای در دیتاست ) که مقدار تگ <title> از تگ <item> را نشان می دهد.
ItemURLField : نام Datacolumn که مقدار تگ <link> از تگ <item> را مشخص می کند.
ItemDescriptionField : نام Datacolumn که مقدار تگ <description> از تگ <item> را معرفی می کند.
ItemPublicationDateField : نام Datacolumn که مقدار تگ <pubDate> از تگ <item> را نشان می دهد.
متدها
PublishRss : این متد سند نشانه گذاری شده RSS را در Outputstream می نویسد.
در زیر کد کامل کلاس RSS را می بینید، توجه کنید که برای سادگی و نمایش سریع به جای properties از متغیرهای عمومی ( Public ) استفاده شده است.
Public Class Rss
Public OutputStream As Stream
Public RssTitle As String
Public PublisherUrl As String
Public Description As String
Public Copyright As String
Public Generator As String
Public ItemSource As DataSet
Public ItemTitleField As String
Public ItemUrlField As String
Public ItemDescriptionField As String
Public ItemPublicationDateField As String
Public Shared Function PublishRss(ByVal r As Rss)
Dim writer As New XmlTextWriter(r.OutputStream,
System.Text.Encoding.ASCII)
writer.WriteStartElement("rss")
writer.WriteAttributeString("version", "2.0″)
writer.WriteStartElement("channel")
writer.WriteElementString("title", r.RssTitle)
writer.WriteElementString("link", r.PublisherUrl)
writer.WriteElementString("description", r.Description)
writer.WriteElementString("copyright", r.Copyright)
writer.WriteElementString("generator", r.Generator
For Each row As DataRow In r.ItemSource.Tables(0).Rows
writer.WriteStartElement("item")
writer.WriteElementString("title", row(r.ItemTitleField))
writer.WriteElementString("link", row(r.ItemUrlField))
writer.WriteElementString("description",
row(r.ItemDescriptionField))
writer.WriteElementString("pubDate",
CType(row(r.ItemPublicationDateField),
DateTime).ToString("ddd, dd MMM yyyy 12:00:00 tt G\MT"))
writer.WriteEndElement()
Next
writer.WriteEndElement()
writer.WriteEndElement()
writer.Flush()
End Function
End Class
در کد کلاس بالا متد PublishRss مهمترین اتفاقی است که در کلاس می افتد. ابتدا ما یک نمونه از کلاس System.XML.XmlTextwriter ساخته ایم. این کلاس سریع ترین راه برای نوشتن اسناد XML است. بعد OutputStream را به تابع پاس کرده و encoding سند را مشخص کردیم. در مورد این کد از ASCII استفاده شده است. بعد از این شروع به نوشتن بخش های مختلف سند RSS خودمان کردیم. در کلاسXmlTextwriter ما از متدهای زیر برای نوشتن سند خودمون استفاده کردیم:
WritestartElement : این متد تگ شروع را برای یک تگ خاص می نویسد (هر تگ شامل یک تگ شروع هست و یک تگ پایان مثلا <channel> تگ شروع و <channel/> تگ پایان می باشد) .
WriteAttributeString : خواص تگ باز فعلی را می نویسد.
WriteElementString : مقدار هر تگ که بین تگ شروع و تگ پایان قرار دارد را می نویسد.
WriteEndElement : تگ پایان را برای تگی که اخیرا باز بوده می نویسد. نیازی نیست که تگ های داخلی تر را مشخص کنید.
Flush : این متد، تمام خروجی های بافرشده را به مقصد منتقل می کند.
توجه کنید که شما باید متدهای WriteStartElement و WriteEndElement را برای بهتر شکل دادن به سند خودتان استفده کنید.
ساختن وب فرم ASP.NET
حالا که یک کلاس کلی نوشتیم، می تونیم از این کلاس در وب فرم خودمان استفاده کنیم. یک ساختار که به عنوان نمونه می توانید در بانک اطلاعاتی از آن استفاده کنید به شکل زیر می باشد. از اطلاعات این ساختار در بانک اطلاعاتی برای ساخت سند RSS استفاده می گردد.
Article_ title - Varchar (255)
Article_ Description -Varchar (1000)
Article_ url - Varchar (255)
Article_ pubdate - DateTime
ما به کمک یک تابع به نام GetDataSet اطلاعات را به دیتاست می دهیم، این دیتاست به عنوان منبع برای تولید فایل RSS مورد استفاده قرار می گیرد. برای پر کردن دیتاست از یک DataAdapter استفاده می کنیم :
Function GetDataSet() as DataSet
Dim cnn as New SqlConnection("connection string here")
sql = "select * from sometable order by Article_pubdate desc"
Dim da As New SqlDataAdapter(sql,cnn)
Dim ds as New DataSet()
da.Fill(ds,"MyArticles")
Return ds
End Function
برای ایجاد یک خروجی RSS از محتوای سایت، باید یک نمونه از کلاس Rss که نوشتیم بسازیم، سپس ویژگی های مختلف آن را مقداردهی کنیم و سپس متد GetDataSet را فراخوانی کنیم. بعد از اینکه دیتاست را بدست آوردیم فقط کافی است که خصوصیت ItemSource شئ گرفته شده از کلاس Rss را به همین دیتاست مقدار دهیم. به علاوه دو خصوصیت از شئ response یعنی ContentEncoding و ContentType را هم مقدار می دهیم.
Private Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Dim r As New Rss
Dim ds As DataSet = GetDataSet()
r.OutputStream = Response.OutputStream
r.RssTitle = "DotNetBips.com Latest Articles"
r.PublisherUrl = Request.Url.Host
r.Description = "DotNetBips.com - Applying.NET"
r.Copyright = "Copyright (C) DotNetBips.com."
r.Generator = "DotNetBips.com RSS Generator"
r.ItemSource = ds
r.ItemTitleField = "Article_title"
r.ItemDescriptionField = "Article_Description"
r.ItemPublicationDateField = "Article_pubdate"
r.ItemUrlField = "Article_url"
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.ContentType = "text/xml"
Rss.PublishRss(r)
Response.End()
End Sub
حالا تابع PublishRss را فراخوانی می کنیم و شئ گرفته شده از کلاس Rss را به این تابع پاس می کنیم. تمام شد! حالا یک خروجی XML بر اساس استاندارد RSS داریم.
<channel> : گره ریشه سند RSS می تواند تگ <channel> هم داشته باشد. این تگ هم به نوبه خود می تواند شامل گره های <tile>,<link> و <item> باشد.
<title> : مشخص کننده عنوان سند RSS است.
<link> : این تگ URL سایت ارایه دهنده RSS را مشخص می کند.
<description> : جزییات و اطلاعات بیشتر مربوط به این سند را مشخص می کند.
<copyright> : اطلاعات مربوط به کپی رایت سند را مشخص می کند.
<generator> : این تگ Application ای که این سند را ساخته معرفی می کند.
علاوه بر تگ های بالا، یک سند RSS می تواند یک یا چند تگ <item> داشته باشد. تگ <item> مشخص کننده همان محتوایی است که می خواهید به اشتراک بگذارید مثلا یک مقاله یا یکی از پست های یک وبلاگ. هر تگ <item> به علاوه شامل زیرگره های زیر است.
<title> : این تگ عنوان آیتم را مشخص می کند مثلا عنوان مقاله.
<link> : این تگ URL آن آیتم را نشان می دهد مثلا آدرس مقاله در وب.
<description> : این تگ آیتم را توصیف می کند، در مورد یک مقاله می تواند شامل خلاصه مقاله باشد.
<pubDate> : این تگ تاریخ انتشار آن آیتم را نشان می دهد. فرمت معمول برای نمایش این تاریخ به صورت Sun, 25 Jul 2004 12:00:00 GMT است.
چگونه یک سند RSS بسازیم ؟
حالا که با ساختار یک فایل RSS آشنا شدید، به سراغ دات نت می رویم. چگونه در دات نت یک فایل RSS بسازیم؟ دات نت مجوعه ای غنی ای از کلاس های مرتبط با XML دارد. برای ساختن فایل RSS ما از کلاس XML Text writer استفاده می کنیم. ولی می خواهیم یک راه حل کلی داشته باشیم که با هر وب سایتی کار کند. معنی این حرف این است که کد ما باید مستقل از یک جدول یا یک فیلد خاص در دیتابیس سایت باشد. برای این کار ما یک کلاس در VS.NET می سازیم. منبع تگ های <item> سند XML ما هم یک دیتاست است که از جدول دلخواه ما در دیتابیس ساخته می شود. کلاسی که قصد نوشتن آن را داریم ویژگی ها (properties) و متدهای (methods) زیر را دارد:
ویژگی ها(properties)
Outputstream : یک شی جریان ( Stream ) که خروجی سند در آن نوشته می شود.
RssTitle : مقدار تگ <title> را در زیر تگ <channel> مشخص می کند.
PublisherUrl : مقدار تگ <link> را در زیر تگ <channel> مشخص می کند.
Description : مقدار تگ <description> را در تگ <channel> مشخص می کند.
Copyright : مقدار تگ <copyright> را در زیر تگ <channel> مشخص می کند.
Generator : مقدار تگ <generator> را در زیر تگ <channel> مشخص می کند.
ItemSource : تعیین کننده شی دیتاستی است که سطرهای آیتم را شامل می شود.
ItemTitleField : نام Datacolumn ( ستون داده ای در دیتاست ) که مقدار تگ <title> از تگ <item> را نشان می دهد.
ItemURLField : نام Datacolumn که مقدار تگ <link> از تگ <item> را مشخص می کند.
ItemDescriptionField : نام Datacolumn که مقدار تگ <description> از تگ <item> را معرفی می کند.
ItemPublicationDateField : نام Datacolumn که مقدار تگ <pubDate> از تگ <item> را نشان می دهد.
متدها
PublishRss : این متد سند نشانه گذاری شده RSS را در Outputstream می نویسد.
در زیر کد کامل کلاس RSS را می بینید، توجه کنید که برای سادگی و نمایش سریع به جای properties از متغیرهای عمومی ( Public ) استفاده شده است.
Public Class Rss
Public OutputStream As Stream
Public RssTitle As String
Public PublisherUrl As String
Public Description As String
Public Copyright As String
Public Generator As String
Public ItemSource As DataSet
Public ItemTitleField As String
Public ItemUrlField As String
Public ItemDescriptionField As String
Public ItemPublicationDateField As String
Public Shared Function PublishRss(ByVal r As Rss)
Dim writer As New XmlTextWriter(r.OutputStream,
System.Text.Encoding.ASCII)
writer.WriteStartElement("rss")
writer.WriteAttributeString("version", "2.0″)
writer.WriteStartElement("channel")
writer.WriteElementString("title", r.RssTitle)
writer.WriteElementString("link", r.PublisherUrl)
writer.WriteElementString("description", r.Description)
writer.WriteElementString("copyright", r.Copyright)
writer.WriteElementString("generator", r.Generator
For Each row As DataRow In r.ItemSource.Tables(0).Rows
writer.WriteStartElement("item")
writer.WriteElementString("title", row(r.ItemTitleField))
writer.WriteElementString("link", row(r.ItemUrlField))
writer.WriteElementString("description",
row(r.ItemDescriptionField))
writer.WriteElementString("pubDate",
CType(row(r.ItemPublicationDateField),
DateTime).ToString("ddd, dd MMM yyyy 12:00:00 tt G\MT"))
writer.WriteEndElement()
Next
writer.WriteEndElement()
writer.WriteEndElement()
writer.Flush()
End Function
End Class
در کد کلاس بالا متد PublishRss مهمترین اتفاقی است که در کلاس می افتد. ابتدا ما یک نمونه از کلاس System.XML.XmlTextwriter ساخته ایم. این کلاس سریع ترین راه برای نوشتن اسناد XML است. بعد OutputStream را به تابع پاس کرده و encoding سند را مشخص کردیم. در مورد این کد از ASCII استفاده شده است. بعد از این شروع به نوشتن بخش های مختلف سند RSS خودمان کردیم. در کلاسXmlTextwriter ما از متدهای زیر برای نوشتن سند خودمون استفاده کردیم:
WritestartElement : این متد تگ شروع را برای یک تگ خاص می نویسد (هر تگ شامل یک تگ شروع هست و یک تگ پایان مثلا <channel> تگ شروع و <channel/> تگ پایان می باشد) .
WriteAttributeString : خواص تگ باز فعلی را می نویسد.
WriteElementString : مقدار هر تگ که بین تگ شروع و تگ پایان قرار دارد را می نویسد.
WriteEndElement : تگ پایان را برای تگی که اخیرا باز بوده می نویسد. نیازی نیست که تگ های داخلی تر را مشخص کنید.
Flush : این متد، تمام خروجی های بافرشده را به مقصد منتقل می کند.
توجه کنید که شما باید متدهای WriteStartElement و WriteEndElement را برای بهتر شکل دادن به سند خودتان استفده کنید.
ساختن وب فرم ASP.NET
حالا که یک کلاس کلی نوشتیم، می تونیم از این کلاس در وب فرم خودمان استفاده کنیم. یک ساختار که به عنوان نمونه می توانید در بانک اطلاعاتی از آن استفاده کنید به شکل زیر می باشد. از اطلاعات این ساختار در بانک اطلاعاتی برای ساخت سند RSS استفاده می گردد.
Article_ title - Varchar (255)
Article_ Description -Varchar (1000)
Article_ url - Varchar (255)
Article_ pubdate - DateTime
ما به کمک یک تابع به نام GetDataSet اطلاعات را به دیتاست می دهیم، این دیتاست به عنوان منبع برای تولید فایل RSS مورد استفاده قرار می گیرد. برای پر کردن دیتاست از یک DataAdapter استفاده می کنیم :
Function GetDataSet() as DataSet
Dim cnn as New SqlConnection("connection string here")
sql = "select * from sometable order by Article_pubdate desc"
Dim da As New SqlDataAdapter(sql,cnn)
Dim ds as New DataSet()
da.Fill(ds,"MyArticles")
Return ds
End Function
برای ایجاد یک خروجی RSS از محتوای سایت، باید یک نمونه از کلاس Rss که نوشتیم بسازیم، سپس ویژگی های مختلف آن را مقداردهی کنیم و سپس متد GetDataSet را فراخوانی کنیم. بعد از اینکه دیتاست را بدست آوردیم فقط کافی است که خصوصیت ItemSource شئ گرفته شده از کلاس Rss را به همین دیتاست مقدار دهیم. به علاوه دو خصوصیت از شئ response یعنی ContentEncoding و ContentType را هم مقدار می دهیم.
Private Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Dim r As New Rss
Dim ds As DataSet = GetDataSet()
r.OutputStream = Response.OutputStream
r.RssTitle = "DotNetBips.com Latest Articles"
r.PublisherUrl = Request.Url.Host
r.Description = "DotNetBips.com - Applying.NET"
r.Copyright = "Copyright (C) DotNetBips.com."
r.Generator = "DotNetBips.com RSS Generator"
r.ItemSource = ds
r.ItemTitleField = "Article_title"
r.ItemDescriptionField = "Article_Description"
r.ItemPublicationDateField = "Article_pubdate"
r.ItemUrlField = "Article_url"
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.ContentType = "text/xml"
Rss.PublishRss(r)
Response.End()
End Sub
حالا تابع PublishRss را فراخوانی می کنیم و شئ گرفته شده از کلاس Rss را به این تابع پاس می کنیم. تمام شد! حالا یک خروجی XML بر اساس استاندارد RSS داریم.
تاريخ:جمعه، 18 اردیبهشتماه 1388 | نظرات [ 0 ] |

