一 : 巧用 Google Reader 合并你的 Rss Feed
篇文章提到了使用 Yahoo!Pipes 合并你的 Feeds ,但是问题出现了,Pipes 默认情况下,假如两个 Rss Feed 放在同一个 Source 里,如图:
那么,默认状态下 Pipes 更新你的合并后的 Rss Feed 就会按照上下顺序,要按照时间顺序排列就得按这张图(任平生提供)
最重要的是, Pipes 更新的速度明显不如 Google Reader ,接下来,我就来教大家如何使用 Google Reader 合并你的 Rss Feed 吧。
考虑国内用户使用习惯,所以我把 Google Reader 的语言设置成了简体中文,方便大家阅读。
首先,用你的 Google 账户登录 Google Reader :http://www.google.com/reader/
然后点击左上角的 添加订阅 ,输入第一个 feed 地址,接着,同样的方法,增加第二个第三个订阅地址,前面不用加 http://
增加完毕,进入左下角的订阅管理,很小很小的一行字:
直接的链接是:http://www.google.com/reader/settings?display=edit-subscriptions
找到你的一个订阅,然后看到右边的更改文件夹了吧?自己新建一个文件夹吧:
然后把你需要增加的几个 Feed 全部放到自己的文件夹里,这里我用的是 Blogging 文件夹
接着,在 文件夹和标签 那里,把这个文件夹设置成公共
这个时候,就可以查看这个 公共文件夹 的网页地址了,比如我的 Blogging 文件夹的地址是:http://www.google.com/reader/shared/user%2F08115904862391354804%2Flabel%2FBlogging
右下方有一个 Atom供稿 链接
嗯,这个就是合并以后的 Rss 地址了,偶的就是:
http://www.google.com/reader/public/atom/user%2F08115904862391354804%2Flabel%2FBlogging
把这个 Rss 地址增加到你的 FeedSky 中去吧,然后,等着 FeedSky 更新即可。s
说说 Google Reader 比 Yahoo! Pipes 好的几点:
1、简洁方便,而且没其他对合并 Rss Feed 没用的多余功能,我承认 Pipes 确实不错,但是很多功能用不上,我只需要合并两三个 Rss Feed 就行了。
2、更新快,而且不会因为两个 Feed 的顺序问题,而使得烧录的 Feed 文章次序让人头大。
3、你是 Google 的粉丝么?那就来试试用 Google Reader 合并你的订阅源吧!
欢迎订阅我的博客:http://feed.showfom.com/
或者 Follow 我一下,最近迷上了 Twitter :https://twitter.com/Showfom
PS:貌似我用 Google Reader 合并以后,原来 FeedSky 的展示广告没了,不过也没关系,本博客不盈利~
二 : 马克斯电影站生成Rss Feed的代码
前段时间为了给本人的电影站增加Rss订阅功能,动手写了个动态生成Rss Feed的ASP代码,没法上传附件,就直接贴代码吧,反正也不长,用马克斯做电影站的朋友直接拿去用吧,其它类型的站点修改一下也能用。生成的Rss Feed采用UTF-8编码,经过feedvalidator.org校验,兼容Rss 2.0和Atom。
使用方法:将下面的代码存为rss.asp(记得以UTF-8格式保存)并上传到网站根目录,剩下的工作就是找Rss提交入口去提交你的Feed地址http://你的域名/rss.asp
演示:http://www.366mv.cn
代码如下,请根据注释修改相应的信息,版权信息还望各位能够保留 ^_^
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Session.CodePage=65001 Response.Charset="UTF-8" '======================================================================== 'Copyright (c) 2005-2007, 酸溜溜影视([url]www.366mv.cn[/url]) All rights reserved. '======================================================================== '名称: rss.asp '描述: 动态生成Rss Feed。 '======================================================================== %> <!--#include file=inc/conn.asp--><?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <% title="酸溜溜影视" '改成你自己的名称 response.write" <channel>"&chr(13) response.write"<atom:link href=""http://"&maxz_2&"/xml.asp"" rel=""self"" type=""application/rss+xml"" />"&Chr(13) response.write" <title>最近更新影片 - "&title&"</title>"&chr(13) response.write" <link>http://"&maxz_2&"</link>"&Chr(13) response.write" <description>"&title&" - 万部影片在线观看。免费电影,在线电影,TVB,日剧,韩剧,动漫,科幻,恐怖,言情,连续剧,大片,贺岁片……</description>"&Chr(13) response.write get_left(15,0) '显示前15部影片,按更新日期排序 response.write" </channel>"&chr(13) Function re(str) If Not IsNull(str) then re=Replace(str,"&","&") re=Replace(re,"<","<") re=Replace(re,">",">") re=Replace(re,"'","'") re=Replace(re,"""",""") End if End Function Function get_left(n,m) n=CInt(n):m=CInt(m) If m=1 Then mm=" order by zt_hits desc" '按点击量排序 Else mm=" order by zt_date desc" '按更新日期排序 End If set rs1=conn.execute("select top "&n&" zt_id,zt_name,zt_zy,zt_dy,zt_type,zt_date,zt_hits,zt_content from zt_data"&mm) get_left_i=0 Do while not rs1.eof get_left_i=get_left_i+1 get_left=get_left&" <item>"&Chr(13) get_left=get_left&" <title>"&re(rs1("zt_name"))&"</title>"&Chr(13) get_left=get_left&" <link>http://"&maxz_2&"/"&get_classenname(rs1("zt_type"))&"/"&rs1("zt_id")&"</link>"&Chr(13) get_left=get_left&" <description><![CDATA[<p>类别:<a href=""http://"&maxz_2&"/"&get_classenname(rs1("zt_type"))&""">"&get_classname(rs1("zt_type"))&"</a></p><p>主演:"&rs1("zt_zy")&"</p><p>剧情:"&re(rs1("zt_content"))&"</p>]]></description>"&Chr(13) get_left=get_left&" <guid>http://"&maxz_2&"/"&get_classenname(rs1("zt_type"))&"/"&rs1("zt_id")&"</guid>"&Chr(13) get_left=get_left&" <category><![CDATA["&get_classname(rs1("zt_type"))&"]]></category>"&Chr(13) get_left=get_left&" <pubDate>"&DateToRFC822(rs1("zt_date"))&"</pubDate>"&Chr(13) get_left=get_left&" </item>"&Chr(13) If get_left_i>=n Then Exit Do rs1.movenext Loop rs1.close End Function Function DateToRFC822(byVal dtaVal) Dim strCurLocale : strCurLocale = GetLocale() SetLocale("en-gb") dtaVal = CDate(dtaVal) DateToRFC822 = WeekdayName(Weekday(dtaVal),True)&", "& _ Right("0"&Day(dtaVal),2)&" "& _ MonthName(Month(dtaVal),True)&" "& _ Year(dtaVal)&" "& _ Right("0"&Hour(dtaVal),2)&":"& _ Right("0"&Minute(dtaVal),2)&":"& _ Right("0"&Second(dtaVal),2)&" "& _ "+0800" SetLocale(strCurLocale) End Function %></rss> |
三 : 如何利用.NET Framework使用RSS feed
如果想利用.NET Framework来使用RSS feed的话,这其实并不复杂。你只需要做下面几步就可以了:
◆链接到提供RSS feed的网站
◆下载feed XML
◆将feed的XML装载到允许搜索的对象中
◆为你想提取的结点搜索feed的XML
.NET Framework提供了内置函数来完成所有的任务。我们所需要做的就是,将这些功能绑定在一起,这样我们就可以使用RSS feeds。
链接到服务器
我们可以使用WebRequest对象链接到服务器上。WebRequest对象使你可以在Web站点上贴出请求,自从RSS通过HTTP传输后,WebRequest对象就成了链接服务器最主要的选择了。
Listing A中的代码告诉我们,任何将一个新的WebRequest对象与一个URL进行连接。
Listing A
以下为引用的内容: //Create a WebRequest object WebRequest myRequest = WebRequest.Create(url); |
在这个例子中,也可以用完整URL的来取代RSS feed中的“url”。下面是MSN Automotive RSS feed的地址:http://rss-feeds.msn.com/autos/autosnews.xml
下载RSS数据
当我们连接到服务器之后,我们需要下载feed提供的数据。WebRequest对象为实现这个目的提供了一个GetResponse()方法。WebRequest.GetResponse()方法返回一个WebRequest对象,这个对象根据我们的请求给我们访问服务器的响应。
在这里我们将用到WebResponse(Web响应)对象的GetResponseStream()方法。这个方法返回一个Stream对象,这个对象中包含了服务器所响应的原始RSS XML。Listing B中的代码告诉我们如何从WebRequest(Web请求)对象得到WebResponse(Web响应)对象,和如何从WebResponse(Web响应)对象得响应流。
Listing B
以下为引用的内容: //Get the response from the WebRequestWebResponse myResponse = myRequest.GetResponse(); //Get the response's streamStream rssStream = myResponse.GetResponseStream(); |
将RSS数据装载到XML文档中
一旦我们从WebResponse(Web响应)对象得到了流,我们就将这个流下载到XmlDocument对象中了。这样我们就很容易对XML数据进行分析了,并能轻松地从中取值。得到XmlDocument装载Stream最简单的方法是,创建一个新的XmlDocument对象,并将我们的Stream传递给Load方法。Listing C为我们说明了这个方法的使用。
Listing C
以下为引用的内容: //Create the Xml DocumentXmlDocument document = newXmlDocument(); //Load the stream into the XmlDocument object. document.Load(rssStream); |
分析XML
这是使用RSS feed最难的部分。我们必须使用刚才创建的XmlDocument来得到含有我们自己数据的XML结点。我们普遍感兴趣的结点是:
◆Feed的标题,它存放在feed XML中的/rss/channel/title文件里面
◆Feed的文章,它存放在feed XML中的/rss/channel/item文件里面。在这个位置可能有多个结点。
◆文章的标题,它存放在文章结点中的title里面。
◆文章的描述,它存放在文章结点的description里面。
◆文章的链接,它存放在文章结点的link里面。
我们可以使用XmlDocument对象内置的SelectSingleNode函数和SelectNodes函数来得到这些结点。这两个函数都可以接受XPath查询,也都可以返回与查询结果相匹配的一个或多个结点。
Listing D这段代码告诉我们如何使用XmlDocument和Xpath从RSS feed中分析出每个单独的元素。
Listing D
以下为引用的内容: //Get an XmlDocument object that contains the feed's XML XmlDocument feedDocument = GetXmlDocumentFromFeed("http://rss-feeds.msn.com/autos/autosnews.xml"); //Create a XmlNamespaceManager for our namespace. XmlNamespaceManager manager = newXmlNamespaceManager(feedDocument.NameTable); //Add the RSS namespace to the manager. manager.AddNamespace("rss", "http://purl.org/rss/1.0/"); //Get the title node out of the RSS document XmlNode titleNode = feedDocument.SelectSingleNode("/rss/channel/title", manager); //Get the article nodes XmlNodeList articleNodes = feedDocument.SelectNodes("/rss/channel/item", manager); //Loop through the articles and extract // their data. foreach (XmlNode articleNode in articleNodes) { //Get the article's title. string title = articleNode.SelectSingleNode("title", manager).InnerText; //Get the article's link string link = articleNode.SelectSingleNode("link", manager).InnerText; //Get the article's description string description = articleNode.SelectSingleNode("description", manager).InnerText; } |
不是所有的RSS feed的创建都是相同的
如果所有的RSS feed都使用相同的格式,它将变得更强大,然而RSS feed有许多不同的版本和实现。在这篇文章中描述的格式适合大部分的feed,可能有少部分的RSS feed格式与这个格式不同。
本文标题:rss feed-巧用 Google Reader 合并你的 Rss Feed61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1