V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lifanxi  ›  全部回复第 61 页 / 共 61 页
回复总数  1206
1 ... 52  53  54  55  56  57  58  59  60  61  
代码帖过来缩进都没有了...请从下面的地址重新获取代码:
http://www.freemindworld.com/tmp/fullfeed.txt
改了一个Recepie,可以通过Google Reader下载所有的历史文章。

先修改下面代码中的rssFeeds=['http://www.freemindworld.com/blog/feed.rss']'中的RSS地址,改成你想要的。如果有多个,可以用引号逗号隔开。比如:

rssFeeds=['http://www.luanxiang.org/blog/feed','http://www.write.org.cn/feed']

需要的话可以改一下max_articles_per_feed和oldest_article值,也许现在的默认值太大,会抓到太多的文章。

把改好的代码直接贴到自定义订阅清单的高级模式中即可。

在下载前,还要在"定期新闻下载"对话框中该订阅清单的"日程表"中输入你的Google帐号和密码。

然后就可以点“立即下载”按钮了。

注意,用这个订阅清单(包括别的所有needs_subscription = True的订阅清单)时,在下载任务的日志中会明文输出你输入的帐户和密码,所以如果要把日志往外帖的时候,注意把这些敏感信息清除掉。


import urllib, re, mechanize
from calibre.web.feeds.recipes import BasicNewsRecipe
from calibre import __appname__

class FullFeedViaGoogleReader(BasicNewsRecipe):
title = 'Full Feed Via Google Reader'
description = 'Fetches full feed articles from Google Reader'
needs_subscription = True
__author__ = 'davec, rollercoaster, Starson17, lifanxi'
base_url = 'https://www.google.com/reader/atom/feed/'
oldest_article = 10000
max_articles_per_feed = 10000
use_embedded_content = True

def get_browser(self):
br = BasicNewsRecipe.get_browser(self)
if self.username is not None and self.password is not None:
request = urllib.urlencode([('Email', self.username), ('Passwd', self.password),
('service', 'reader'), ('accountType', 'HOSTED_OR_GOOGLE'), ('source', __appname__)])
response = br.open('https://www.google.com/accounts/ClientLogin', request)
auth = re.search('Auth=(\S*)', response.read()).group(1)
cookies = mechanize.CookieJar()
br = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies))
br.addheaders = [('Authorization', 'GoogleLogin auth='+auth)]
return br

def get_feeds(self):
rssFeeds = ['http://www.freemindworld.com/blog/feed.rss']
feeds = [ self.base_url + f + ('?n=%d' % self.max_articles_per_feed) for f in rssFeeds ]
return feeds
@iray1991
豆瓣插件元信息下载插件不是老早就有了么?calibre安装时选中文界面时会自动启用。也可以在首选项->插件中手工启用。
@iray1991
每个网站的RSS输出量都是非常有限的,一般就限在几十条的量级,这个输出量是网站方控制的。calibre如果直接抓网站的RSS的话,就最多只能抓到这么多。

如果某个网站的RSS在Google Reader中被某个人订阅过,那Google Reader的保存这个RSS所有的历史记录,即使网站实际输出的RSS中已经去掉了过期的内容,这些内容仍然会在Google Reader中保留。

所以如果你真要抓全,那就不能从原始网站的RSS去抓,可以考虑通过Google Reader代理一层。这个好像没有办法直接实现,不过应该可以通过修改calibre中的Google Reader新闻抓取清单来实现。我有空可以试试看。
http://www.luanxiang.org/blog/feed 这个是墙外的,会跳转到被墙的feedburner上,所以很可能抓取不成功。
http://www.write.org.cn/feed 访问有时候不流畅,会出错。如果流畅的话是可以的,改oldest_article明显是有效果的。
http://www.zhihu.com/rss 上内容比较新,所以默认就可以抓全。把参数再改大也没有用,还是抓这么多。请注意Kovid给你回复中说的:calibre can fetch only as many articles as are present in the feed iteself. 如果RSS本身没有足够老的输出,你再改oldest_article也没有用。
我曾经过试过你说的直接改oldest_article和max_articles_per_feed的方法,是可以达到期望的结果的。今天试了一下也没有能重现你的问题。

你能描述一下你所遇到的“Error”是什么吗?

另外,在用calibre新闻抓取功能时,要注意是不是受到了墙的干扰,尤其是抓国外的一些Feed或Google Reader时。
1 ... 52  53  54  55  56  57  58  59  60  61  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5690 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 09:00 · PVG 17:00 · LAX 02:00 · JFK 05:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.