Does Google Reader have an API and if so, how can I get the count of the number of unread posts for a specific user knowing their username and password?
问题:
回答1:
This URL will give you a count of unread posts per feed. You can then iterate over the feeds and sum up the counts.
http://www.google.com/reader/api/0/unread-count?all=true
Here is a minimalist example in Python...parsing the xml/json and summing the counts is left as an exercise for the reader:
import urllib import urllib2 username = 'username@gmail.com' password = '******' # Authenticate to obtain SID auth_url = 'https://www.google.com/accounts/ClientLogin' auth_req_data = urllib.urlencode({'Email': username, 'Passwd': password, 'service': 'reader'}) auth_req = urllib2.Request(auth_url, data=auth_req_data) auth_resp = urllib2.urlopen(auth_req) auth_resp_content = auth_resp.read() auth_resp_dict = dict(x.split('=') for x in auth_resp_content.split('\n') if x) auth_token = auth_resp_dict["Auth"] # Create a cookie in the header using the SID header = {} header['Authorization'] = 'GoogleLogin auth=%s' % auth_token reader_base_url = 'http://www.google.com/reader/api/0/unread-count?%s' reader_req_data = urllib.urlencode({'all': 'true', 'output': 'xml'}) reader_url = reader_base_url % (reader_req_data) reader_req = urllib2.Request(reader_url, None, header) reader_resp = urllib2.urlopen(reader_req) reader_resp_content = reader_resp.read() print reader_resp_content
And some additional links on the topic:
回答2:
It is there. Still in Beta though.
回答3:
Here is an update to this answer
import urllib import urllib2 username = 'username@gmail.com' password = '******' # Authenticate to obtain Auth auth_url = 'https://www.google.com/accounts/ClientLogin' #auth_req_data = urllib.urlencode({'Email': username, # 'Passwd': password}) auth_req_data = urllib.urlencode({'Email': username, 'Passwd': password, 'service': 'reader'}) auth_req = urllib2.Request(auth_url, data=auth_req_data) auth_resp = urllib2.urlopen(auth_req) auth_resp_content = auth_resp.read() auth_resp_dict = dict(x.split('=') for x in auth_resp_content.split('\n') if x) # SID = auth_resp_dict["SID"] AUTH = auth_resp_dict["Auth"] # Create a cookie in the header using the Auth header = {} #header['Cookie'] = 'Name=SID;SID=%s;Domain=.google.com;Path=/;Expires=160000000000' % SID header['Authorization'] = 'GoogleLogin auth=%s' % AUTH reader_base_url = 'http://www.google.com/reader/api/0/unread-count?%s' reader_req_data = urllib.urlencode({'all': 'true', 'output': 'xml'}) reader_url = reader_base_url % (reader_req_data) reader_req = urllib2.Request(reader_url, None, header) reader_resp = urllib2.urlopen(reader_req) reader_resp_content = reader_resp.read() print reader_resp_content
Google Reader removed SID auth around June, 2010 (I think), using new Auth from ClientLogin is the new way and it's a bit simpler (header is shorter). You will have to add service
in data for requesting Auth
, I noticed no Auth
returned if you don't send the service=reader
.
You can read more about the change of authentication method in this thread.
回答4:
In the API posted in [1], the "token" field should be "T"