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 print "[GoogleReader] loginFinished:", res
46 pos_beg = res.find('SID=')
47 pos_end = res.find('\n',pos_beg)
48 self.sid = res[pos_beg+4:pos_end]
50 defer.callback(self.sid)
52 def loginFailed(self, res = None, defer = None):
53 print "[GoogleReader] loginFailed:", res
55 # XXX: we might want to give some information here besides "we failed"
59 print "[GoogleReader] getToken"
64 self.sendRequest('http://www.google.com/reader/api/0/token').addCallback(self.gotToken, defer).addErrback(seld.errToken, defer)
67 def gotToken(self, res = None, defer = None):
68 print "[GoogleReader] gotToken", res
73 def errToken(self, res = None, defer = None):
74 print "[GoogleReader] errToken", res
77 # XXX: we might want to give some information here besides "we failed"
80 def getSubscriptionList(self):
81 print "[GoogleReader] getSubscriptionList"
86 self.sendRequest('http://www.google.com/reader/api/0/subscription/list').addCallback(self.gotSubscriptionList, defer).addErrback(self.errSubscriptionList, defer)
89 def gotSubscriptionList(self, res = None, defer = None):
90 print "[GoogleReader] gotSubscriptionList", res
93 dom = cet_fromstring(res)
94 for item in dom.getiterator():
95 if item.tag == 'string':
96 if item.get('name') == 'id':
97 l.append(UniversalFeed(item.text[5:], True, True))
101 def errSubscriptionList(self, res = None, defer = None):
102 print "[GoogleReader] errSubscriptionList", res
104 # XXX: we might want to give some information here besides "we failed"