2 from twisted.web.client import getPage
3 from RSSFeed import UniversalFeed
4 from twisted.internet.defer import Deferred
5 from xml.etree.cElementTree import fromstring as cet_fromstring
8 def __init__(self, username = None, password = None):
9 self.username = username
10 self.password = password
14 def sendRequest(self, url):
15 print "[GoogleReader] sendRequest:", url
19 'Domain': '.google.com',
21 'Expires': '160000000000'
24 return getPage(url, cookies = cookies)
27 print "[GoogleReader] login"
28 if not self.username or not self.password:
31 headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'}
34 'Email': self.username,
35 'Passwd': self.password,
36 'source': 'enigma2-plugin-extensions-simplerss',
37 'continue': 'http://www.google.com/',
41 getPage('https://www.google.com/accounts/ClientLogin', method = 'POST', headers = headers, postdata = urllib.urlencode(data)).addCallback(self.loginFinished, defer).addErrback(self.loginFailed, defer)
44 def loginFinished(self, res = None, defer = None):
45 pos_beg = res.find('SID=')
46 pos_end = res.find('\n',pos_beg)
47 self.sid = res[pos_beg+4:pos_end]
49 defer.callback(self.sid)
51 def loginFailed(self, res = None, defer = None):
52 print "[GoogleReader] loginFailed:", res
54 # XXX: we might want to give some information here besides "we failed"
62 self.sendRequest('http://www.google.com/reader/api/0/token').addCallback(self.gotToken, defer).addErrback(seld.errToken, defer)
65 def gotToken(self, res = None, defer = None):
70 def errToken(self, res = None, defer = None):
71 print "[GoogleReader] errToken", res
74 # XXX: we might want to give some information here besides "we failed"
77 def getSubscriptionList(self):
82 self.sendRequest('http://www.google.com/reader/api/0/subscription/list').addCallback(self.gotSubscriptionList, defer).addErrback(self.errSubscriptionList, defer)
85 def gotSubscriptionList(self, res = None, defer = None):
88 dom = cet_fromstring(res)
89 for item in dom.getiterator():
90 if item.tag == 'string':
91 if item.get('name') == 'id':
92 l.append(UniversalFeed(item.text[5:], True, True))
96 def errSubscriptionList(self, res = None, defer = None):
97 print "[GoogleReader] errSubscriptionList", res
99 # XXX: we might want to give some information here besides "we failed"