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
17 'Authorization': 'GoogleLogin auth='+self.auth,
20 return getPage(url, headers=headers)
23 print "[GoogleReader] login"
24 if not self.username or not self.password:
27 headers = {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'}
30 'Email': self.username,
31 'Passwd': self.password,
32 'source': 'enigma2-plugin-extensions-simplerss',
33 'continue': 'http://www.google.com/',
37 getPage('https://www.google.com/accounts/ClientLogin', method = 'POST', headers = headers, postdata = urllib.urlencode(data)).addCallback(self.loginFinished, defer).addErrback(self.loginFailed, defer)
40 def loginFinished(self, res = None, defer = None):
41 pos_beg = res.find('Auth=')
42 pos_end = res.find('\n',pos_beg)
43 self.auth = res[pos_beg+5:pos_end]
45 defer.callback(self.auth)
47 def loginFailed(self, res = None, defer = None):
48 print "[GoogleReader] loginFailed:", res
50 # XXX: we might want to give some information here besides "we failed"
58 self.sendRequest('http://www.google.com/reader/api/0/token').addCallback(self.gotToken, defer).addErrback(seld.errToken, defer)
61 def gotToken(self, res = None, defer = None):
66 def errToken(self, res = None, defer = None):
67 print "[GoogleReader] errToken", res
70 # XXX: we might want to give some information here besides "we failed"
73 def getSubscriptionList(self):
78 self.sendRequest('http://www.google.com/reader/api/0/subscription/list?output=xml').addCallback(self.gotSubscriptionList, defer).addErrback(self.errSubscriptionList, defer)
81 def gotSubscriptionList(self, res = None, defer = None):
84 dom = cet_fromstring(res)
85 for item in dom.getiterator():
86 if item.tag == 'string':
87 if item.get('name') == 'id':
88 l.append(UniversalFeed(item.text[5:], True, True))
92 def errSubscriptionList(self, res = None, defer = None):
93 print "[GoogleReader] errSubscriptionList", res
95 # XXX: we might want to give some information here besides "we failed"
98 if __name__ == '__main__':
99 from twisted.internet import reactor
102 googleReader = GoogleReader(sys.argv[1], sys.argv[2])
103 def googleLoggedIn(self, sid = None):
104 googleReader.getSubscriptionList().addCallback(googleSubscriptionList).addErrback(googleSubscriptionFailed)
106 def googleLoginFailed(self, res = None):
107 print "Failed to login to Google Reader."
109 def googleSubscriptionList(self, subscriptions = None):
110 print "Got Feeds:", subscriptions
112 def googleSubscriptionFailed(self, res = None):
113 print "Failed to get subscriptions from Google Reader."
115 googleReader.login().addCallback(googleLoggedIn).addErrback(googleLoginFailed)