有时候你看到了一个好的Blog,于是你订阅了它,但你会发现,如果直接访问订阅的RSS源,它只会返回最新的10-20条内容,这是由Blog服务器决定的。如果偶们非常希望能够看到它以前所有的文章,怎么办呢?
订阅至Google Reader是个好办法,Google Reader发现你希望看到更多条目的时候,自动会获取更多的历史条目。这是怎么做到的呢?原来Google童鞋已经爬了多年的网络了,它所爬到的信息都存在它的数据库里,所以其实当Google Reader提供给你这些历史条目的时候,它实际上是从它所爬到的数据库中提取出来的。但有时候使用Google Reader也不够方便啦,因为它是增量式提供给你信息的,如果这时候希望获得所有的条目,用Google Reader一小段一小段地去取实在太过麻烦。今天发现了一个方法,很有效,很方便,推荐给各位童鞋。
假设现在希望获得所有的Visual C++ Blog的文章,它所提供的RSS链接是
那么,召唤Google童鞋~
http://www.google.com/reader/atom/feed/http://blogs.msdn.com/vcblog/rss.xml?n=100
看清楚咯,http://www.google.com/reader/atom/feed/ + 你的RSS + ?n= + 你所需要的条目数量
通过这个API,Google Reader就会把它数据库里关于这个feed的条目根据你所需要的数量以Atom的格式返回给你。如果你想要所有的条目,很简单,设n=999999就行了...简单估计一下,一个Blog开20年每天100篇发布的话也不会超过这个数字的,所以放心吧~
当然这里还有个小问题,如果我的feed的url中含有一个问号“?”怎么办?比如这个feed
http://www.gmazars.info/conf/rss/rss_builder.php?feed=gmazars.xml
如果直接访问http://www.google.com/reader/atom/feed/http://www.gmazars.info/conf/rss/rss_builder.php?feed=gmazars.xml?n=100这个url,Google会告诉你,内部服务器错误。解决方法也很简单,用HTML Encoding把“?”符号Encoding掉就好了,去查了一下编码表,“?”对应%3F,所以说,用这个url访问就OK啦
拿到了这个xml之后你就可以用你喜欢的方式来显示它了,比如用一个xsl样式,或者自己写一个小程序就行啦~
10:38, 2009-11-21koh /
这个东西舜哥去年就搞了。。。
13:46, 2009-11-21chris /
@koh
我只是转帖...
14:07, 2009-11-21koh /
我知道你是转的,我只是想到了舜哥以前这么干过。。。
16:26, 2009-11-21万戈 /
这个想法不错啊,可以尝试下
11:58, 2010-01-19zy /
转贴你倒是注明原始出处啊,知不知道羞耻二字?!还技术人员呢?丢人!
12:22, 2010-01-19Chris /
@zy
我说是转帖。。其实我也不是copy的。。知道有这个办法,转个想法而已。。难道这个世界上的C++教程都要写从哪儿转的吗。。
22:08, 2010-01-19Justice /
@Chris
你 reply 了他也看不见的,人家留的 Email 是 z@2.net ...
你自己不好...谁让你在回复里面说是转帖 =,=
10:24, 2010-01-20似水无痕 /
标题加个[转]就好了,不过内容确实不错
10:35, 2010-01-20zhangner /
有个小问题,比如Javaeye这样的博客rss订阅的时候得到的不是文章中所写的rss.xml格式,而直接是RSS结束(比如:http://ren.javaeye.com/rss),那么加上?n=100之后就没有作用了。。有什么解决的办法吗?谢谢
10:54, 2010-01-20zhangner /
还是说简洁一点,用文章中的做法对JavaEye这种博客,得到的结果加不加?n=100都是一样,我不知道是不是因为订阅的RSS没有.xml的原因。有没有什么解决方法啊?。谢谢
11:16, 2010-01-20Chris /
@zhangner
我看了一下,发现用google订阅这个blog的话也只能看到2条内容,不知道为什么google没有对这个feed做记录。我说的这个办法的原理其实是利用了google的爬虫对feed历史信息的记录,如果google的爬虫没有这个记录那就没有办法了。你试试这个blog,也是javaeye上的,我随便找的http://zsp.javaeye.com/rss,就是可以的。
11:19, 2010-01-20Chris /
@似水无痕
哈哈,貌似我的回复给大家很多误解。。我其实不是转的,不信你可以google之,对了,google出来的第一条hi baidu上的。。那个是copy我的。。我的是yc的。。
11:27, 2010-01-20zhangner /
@Chris
试了一下,这个blog确实可以。如果Google确实是按你文章中说的这样处理的话,确实是可以理解的,之前没有对我说的那个blog进行过RSS处理,也就不会有记录了。。。
有没有其他的什么办法可以解决啊?。
11:43, 2010-01-20似水无痕 /
@Chris
那么你就把前面那个说明转帖的回复删除呗,或者修改一下说法
要提醒你的是Google不会主动记录RSS,只会从第一次有人添加RSS才回记录,就算所有人都取消订阅了。如果订阅一个RSS找不到之前的内容的话说明你是第一个订阅的
11:54, 2010-01-20似水无痕 /
先不管GoogleReader记录的条数,直接查看RSS,发现上面说的那个RSS只有两条信息,我又看了同一站点的几个博客,RSS条目数量不等,大致可以认为该博客可以自定义RSS输出条目的数量
12:33, 2010-01-26kuber /
我做了一点补充。google reader api 除了返回ATOM外还能返回JSON格式。
“oogle提供的几种读取feed的API”:http://www.cnblogs.com/kuber/archive/2010/01/25/read_feed_with_google_apis.html
01:09, 2010-02-04泡面 /
这是个好方法,回头试试。刚刚开始用GR。
08:37, 2010-02-04johnny /
失败 请问对rss 结尾的地址该如何处理呢
13:40, 2010-02-04chris /
请把失败的例子贴出来,我瞧瞧