PDA

View Full Version : سوال: ایجاد rss reader در سایت



mohsen_1687
سه شنبه 25 مهر 1391, 21:56 عصر
سلام به همگی
میخواستم اگه امکان داره یکی طریقه ایجاد rss تو سایتو بهم یاد بد ، میخوام تو سایتم rss داشته باشم

arashnaderi
سه شنبه 25 مهر 1391, 23:06 عصر
سلام.امیدوارم مطالب زیر براتون مفید باشه

http://www.w3schools.com/rss/default.asp

fakhravari
چهارشنبه 26 مهر 1391, 09:46 صبح
اقای راد یک dll جالب داره برای تولید rss
barnamenevis.org/showthread.php?101923

mohsen_1687
چهارشنبه 26 مهر 1391, 21:07 عصر
اقا من تمام تاپیکارو خوندم ولی متاسفانه چیز درست درمونی پیدا نکرم
میشه خودت راهنمایی کنی چیکار باید کنم ، اگه امکان داره کداشو واسم بذار و مشخص کن کجا باید بذارمشون :گیج:

fakhravari
چهارشنبه 26 مهر 1391, 21:32 عصر
پست 28 اقای راد یه نمونه داده http://barnamenevis.org/attachment.php?attachmentid=93954&d=1350188432

mohsen_1687
پنج شنبه 27 مهر 1391, 20:27 عصر
ممنون
الان من اینو گرفتم
مثلا من میخوام خبرای سایت farsnews.ir رو تو rss خودم نشون بدم ؛ باید برای هرکدوم ار خبراش جداگانه id بدم ؟!
ببینید اقای fakhravari من میخوام ادمین سایتم تو DB اسم چنتا سایت که مد نظرش هستو درج کنه از اون به بعد خبرای اون سایت تو صفحه rss سایتم نمایش داده بشه
باید برای این کار برای هرکدوم از خبرا id جداگانه بدم ؟

fakhravari
جمعه 28 مهر 1391, 12:01 عصر
http://barnamenevis.org/showthread.php?257858-RSS-%D9%88-%D9%86%D9%82%D8%B4-%D8%A2%D9%86-%D8%AF%D8%B1-ASP.NET-%E2%80%93-%D8%A7%D8%B2-%D8%A2%D8%BA%D8%A7%D8%B2-%D8%AA%D8%A7-%D9%BE%D8%A7%DB%8C%D8%A7%D9%86...&highlight=%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA+%D8 %AE%D8%A8%D8%B1+%D8%A7%D8%B2+rss

fakhravari
جمعه 28 مهر 1391, 12:25 عصر
در پایان گفته های اقای راد در پست خودشون برای این دوستمون یه نمونه سمپل میزارم
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myRepeater.DataSource = GetRss("http://www.fakhravary.somee.com/Show/RSS.aspx");
myRepeater.DataBind();
}
}


protected DataTable GetRss(string strURL)
{
XmlTextReader reader = new XmlTextReader(strURL);
DataSet ds = new DataSet();
ds.ReadXml(reader);
DataTable d0 = ds.Tables[0];
DataTable d1 = ds.Tables[1];
DataTable d2 = ds.Tables[2];
return d2;
}


protected static string FormatForXML(object input)
{
string data = input.ToString();
data = data.Replace("&", "&");
data = data.Replace("\"", """);
data = data.Replace("'", "'");
data = data.Replace("<", "&lt;");
data = data.Replace(">", "&gt;");
return data;
}

<asp:Repeater ID="myRepeater" Runat="server">
<ItemTemplate>
<a href='<%# FormatForXML(Eval("link")) %>' target="_blank"><%# FormatForXML(Eval("title"))%>
</a><br />
</ItemTemplate>
</asp:Repeater>

mohsen_1687
جمعه 28 مهر 1391, 14:06 عصر
ممنون اقای فخروانی
من میخوام از dll اقای راد استفاده کنم
مشکلم اینه که تو اون کدها 5جا واسه دادن لینک وجود داره ، من تو اون 5 جا چیارو باید قرار بدم ؟
مثلا میخوام خبرای این سایتارو تو صفحه rss خودم به ترتیب تاریخ درجشون نشون بدم http://www.fakhravary.somee.com/Show/RSS.aspx و http://www.farsnews.com/rss.php?srv=2
اگه واستون امکان داره رو کدهایی که اقای راد دادن راهنماییم کنین
بذارید کاریو که میخوام انجام بدمو واستون توضیح بدم : من میخوام تو دیتابیسم ادرس چنتا سایتو قرار بدم و خبرهاییو که تو rss اون سایتها هستو تو صفحه rss خودم نشون بدم ، title و خلاصه خبر و تاریخ درج هرکدوم از خبرارو میخوام تو صفحه rssم نشون بدم

fakhravari
جمعه 28 مهر 1391, 17:53 عصر
dll اقای راد فقط برای داده های در دیتابیس است و برای نشان دادن اطلاعات سایت های دیگر کاربرد ندارد.
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("File.xml"));
DataTable dt = ds.Tables[0].Copy();

RssChannel OBJ_CHANNEL = new RssChannel("site", new Uri("http://www.site.com/"), "best");
for (int i = 0; i < dt.Rows.Count; i++)
{
OBJ_CHANNEL.Items.Add(new RssItem(dt.Rows[i]["Subject"].ToString(), new Uri("http://www.fakhravary.somee.com/Show/Display_PostID.aspx?TopicID=" + dt.Rows[i]["TopicID"] + "&Subject=" + dt.Rows[i]["Subject"] + ""), dt.Rows[i]["Message"].ToString()));
}
OBJ_CHANNEL.GenerateRss(this.Context);
}
فقط همین نیاز است.
برای اون چیزی که مد نظر دارید کمی فکر میکنم ببینم چی میشه.
چون نیاز یه داینامیک کردن ریپیتر دارین.

mohsen_1687
جمعه 28 مهر 1391, 20:18 عصر
خودتون این کدو تست کردین ؟
فقط همینو بذارم کافیه ؟ من الان این کدو گذاشتم تو برنامم کلی ارور داد که اصلا نفهمیدم از چی بود !
یعنی اون کدای قبلیو گه دادینو نذارم ؟
کلا گیج شدم
الان چند روزه کلی کدو تست گرفتم ولی هیچکدومشون اون چیزی که من میخواستم نبودن
اینطور که معلومه خوندن rss هر سایت با سایت دیگه فرق داره ، اره ؟؟
میشه یه لطف کنی خودت یه پیج بسازی که rss یه سایت دیگرو نشون بده ؟

fakhravari
جمعه 28 مهر 1391, 21:21 عصر
خودتون این کدو تست کردین ؟ :قهقهه: جالب بود
نه ساختار یکی
این جوری که معلومه خیلی تازه واردین.
یه سمپل خواندن rss از سایت های دیگران.
rss مورد نظر = http://www.fakhravary.somee.com/Show/RSS.aspx

mohsen_1687
جمعه 28 مهر 1391, 22:54 عصر
اقا دستت درد نکنه یکی از مشکلاتم حل شد:لبخندساده:
حالا چطوری خبرای سایت خودمو تو صفحه rss خودم نشون بدم ؟؟؟

fakhravari
جمعه 28 مهر 1391, 23:19 عصر
اقا دستت درد نکنه یکی از مشکلاتم حل شد:لبخندساده:
حالا چطوری خبرای سایت خودمو تو صفحه rss خودم نشون بدم ؟؟؟
منظور سوالت نگرفتم!!
یعنی rss خودتو چطوری بسازی؟؟؟
چنتا روش هست.
1) dll اقای راد
http://barnamenevis.org/showthread.php?101923-BehooRssGenerator-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D9%84%DB%8C%D8%AF-%D8%A2%D8%B3%D8%A7%D9%86-RSS&p=1609968
2) خودت بسازی
سمت کد
protected void Page_Load(object sender, EventArgs e)
{
Forums f = new Forums();
Repeater1.DataSource = f.Top5_Topik_Ezdevaj();
Repeater1.DataBind();
}





protected string RemoveIllegalCharacters(object input)
{
string data = input.ToString();
data = data.Replace("&", "&amp;");
data = data.Replace("\"", "&quot;");
data = data.Replace("'", "&apos;");
data = data.Replace("<", "&lt;");
data = data.Replace(">", "&gt;");

return data;
}
سمت HTML

<%@ Page Language="C#‎‎" AutoEventWireup="true" ContentType="text/xml" CodeFile="Rss.aspx.cs" Inherits="Show_Rss" %>

<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<rss version="2.0">
<channel>
<title>وب سایت هیئت عاشقان ولایت شهرستان بوشهر</title>
<link>http://a-velayat.com</link>
<description>
به زودی قسمت های مهم سایت از این آدرس اعلام میشود
</description>
</HeaderTemplate>
<ItemTemplate>
<item>
<link><%# RemoveIllegalCharacters(Eval("TopicID", "http://a-velayat.com/FM/DisplayPostID.aspx?TopicID={0}") + Eval("Title", "&Title={0}"))%> </link>
<title><%# RemoveIllegalCharacters(DataBinder.Eval(Container. DataItem, "Title"))%></title>

</item>
</ItemTemplate>
<FooterTemplate>
</channel>
</rss>
</FooterTemplate>
</asp:Repeater>


مواردی تکمیلی بگم که کلا rss به 3 تیکه تقسیم میشه
ورژن <rss version="2.0">
توضیحات <channel>
و بدنه داده ها </item>
که اینا ثابت هستند

mohsen_1687
شنبه 29 مهر 1391, 00:06 صبح
منظورم همین بود , میخوام خبرای خودمو توی صفحه rss خودم نشون بدم
فقط یچیزو نفهمیدم , خبرا الان تو بانک هستن این کدی که شما نوشتین چرا با بانک در ارتباط نیست ؟
من میخوام title و description که به ترتیب tilte و خلاصه خبر در دیتابیسم هست رو در صفحه rss خودم نمایش بدم , میخوام کل خبرهام رو نشون بده
دقیقا مثل کاری که شما تو این صفحه کردین http://www.fakhravary.somee.com/Show/RSS.aspx

fakhravari
شنبه 29 مهر 1391, 00:54 صبح
ببنید یک صفحه ایجاد کنید و کل تگ را پا کنید فقط ریجستر Page بزارید
مثال
<%@ Page Language="C#‎‎‎" AutoEventWireup="true" ContentType="text/xml" CodeFile="Rss.aspx.cs" Inherits="Show_Rss" %>

که اینم اضافش کنید ContentType="text/xml"
خب بعد این کار فقط نیاز به اوردن ریپیتر هستید.
<asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate>
<rss version="2.0">
<channel>
<title>وب سایت هیئت عاشقان ولایت شهرستان بوشهر</title>
<link>http://a-velayat.com</link>
<description>
به زودی قسمت های مهم سایت از این آدرس اعلام میشود
</description>
</HeaderTemplate>
<ItemTemplate>
<item>
<link><%# RemoveIllegalCharacters(Eval("TopicID", "http://a-velayat.com/FM/DisplayPostID.aspx?TopicID={0}") + Eval("Title", "&Title={0}"))%> </link>
<title><%# RemoveIllegalCharacters(DataBinder.Eval(Container. DataItem, "Title"))%></title>

</item>
</ItemTemplate>
<FooterTemplate>
</channel>
</rss>
</FooterTemplate>
</asp:Repeater>

فقط موارد داخل تگ <item> مد نظر ما است که شما میتوانید داده ها را در اینجا بزارید.
بین تگ های باز و بسته
<title>: عنوان اصلی فایل RSS را مشخص می کند
<link>: آدرس کامل سایت
<description>: توضیح مختصری پیرامون سایت
<pubDate>: تاریخ انتشار رکورد
ووووووو که در سایت زیر هست کل موارد
http://cyber.law.harvard.edu/rss/rss.html#optionalChannelElements
ببنید این ها که گفتم موارد استاندارد است یعنی به طور مستقیم نمیتونید فیلدی از دیتابیس در ریپیتر فراخونی کنید.
باید بین یکی از این موارد ذکر شده قرار داشته باشد
برای مثال

<title><%# RemoveIllegalCharacters(DataBinder.Eval(Container. DataItem, "Title"))%></title>
باز و <title> بسته اون که واضح است و هر چی بین این قرار بگیرد یعنی از دیتابیس میاید که در این مثال Eval(Container. DataItem, "Title")
Title فیلد دیتابیسی است.


موارد خیلی روشن هستند منظور شما از خبرا الان تو بانک هستن این کدی که شما نوشتین چرا با بانک در ارتباط نیست ؟
من نمونه درست کردم از کلاس که خروجی دیتاتیبل داره
protected void Page_Load(object sender, EventArgs e)
{
Forums f = new Forums();
Repeater1.DataSource = f.Top5_Topik_Ezdevaj();
Repeater1.DataBind();
}

mohsen_1687
شنبه 29 مهر 1391, 08:59 صبح
اقا اون خط 12 که سبز رنگ هست ارور میده ، میگه یه پرانتز کمه ! اصلان چرا سبز شده ؟ من تا حالا رنگ سبزو تو html ندیدم !
مگه تو این خط نمیخواین وقتی روی این لینک کلیک شد با همین ٰTopicId بره و خبر رو بصورت کامل نشون بده ؟ خب اینو میتونستید اینطوریم نشون بدین
Eval("code","show_News.aspx?code={0}")
البته من این کدو اینجا تست کردم نشد ؛ نمیدونم چرا واقعا غیر منطقی بود:اشتباه: