From 21b31d05ed175ec2c3608d67aa1e71e0cc0aff9c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 27 Mar 2008 01:14:35 +0000 Subject: [PATCH] Add Google Reader recipe (thanks to davec) --- src/libprs500/web/feeds/recipes/__init__.py | 6 ++-- src/libprs500/web/feeds/recipes/greader.py | 36 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/libprs500/web/feeds/recipes/greader.py diff --git a/src/libprs500/web/feeds/recipes/__init__.py b/src/libprs500/web/feeds/recipes/__init__.py index 230cb2f989..42e07194cd 100644 --- a/src/libprs500/web/feeds/recipes/__init__.py +++ b/src/libprs500/web/feeds/recipes/__init__.py @@ -4,8 +4,10 @@ __copyright__ = '2008, Kovid Goyal ' ''' Builtin recipes. ''' -recipes = ['newsweek', 'atlantic', 'economist', 'dilbert', 'portfolio', - 'nytimes', 'usatoday', 'outlook_india', 'bbc'] +recipes = [ + 'newsweek', 'atlantic', 'economist', 'dilbert', 'portfolio', + 'nytimes', 'usatoday', 'outlook_india', 'bbc', 'greader', + ] import re, imp, inspect, time from libprs500.web.feeds.news import BasicNewsRecipe, CustomIndexRecipe, AutomaticNewsRecipe diff --git a/src/libprs500/web/feeds/recipes/greader.py b/src/libprs500/web/feeds/recipes/greader.py new file mode 100644 index 0000000000..e8dde44a43 --- /dev/null +++ b/src/libprs500/web/feeds/recipes/greader.py @@ -0,0 +1,36 @@ +import urllib, re, mechanize +from libprs500.web.feeds.recipes import BasicNewsRecipe +from libprs500 import __appname__ + +class GoogleReader(BasicNewsRecipe): + title = 'Google Reader' + description = 'This recipe downloads feeds you have tagged from your Google Reader account.' + needs_subscription = True + __author__ = 'davec' + base_url = 'http://www.google.com/reader/atom/' + max_articles_per_feed = 50 + get_options = '?n=%d&xt=user/-/state/com.google/read' % max_articles_per_feed + use_embedded_content = True + + def get_browser(self): + br = BasicNewsRecipe.get_browser() + + if self.username is not None and self.password is not None: + request = urllib.urlencode([('Email', self.username), ('Passwd', self.password), + ('service', 'reader'), ('source', __appname__)]) + response = br.open('https://www.google.com/accounts/ClientLogin', request) + sid = re.search('SID=(\S*)', response.read()).group(1) + + cookies = mechanize.CookieJar() + br = mechanize.build_opener(mechanize.HTTPCookieProcessor(cookies)) + cookies.set_cookie(mechanize.Cookie(None, 'SID', sid, None, False, '.google.com', True, True, '/', True, False, None, True, '', '', None)) + return br + + + def get_feeds(self): + feeds = [] + soup = self.index_to_soup('http://www.google.com/reader/api/0/tag/list') + for id in soup.findAll(True, attrs={'name':['id']}): + url = id.contents[0] + feeds.append((re.search('/([^/]*)$', url).group(1), self.base_url + urllib.quote(url) + self.get_options)) + return feeds