2008-09-09 5 views
26

Est-ce que Google Reader possède une API et si oui, comment puis-je connaître le nombre de messages non lus pour un utilisateur spécifique connaissant son nom d'utilisateur et son mot de passe?API Google Reader Nombre de lectures non lu

+0

@GateKiller: Je comprends la motivation pour lancer une balise « code demande » sur ce ... J'ai aussi une prime ouverte sur une question où la seule réponse est un lien vers la documentation de l'API (cassé), et m'énerve que je vais finir par payer 300 rep à quelqu'un qui vient de google mes mots-clés. – Shog9

+0

Mais, l'étiquette ne sert à rien. Au contraire, vous devriez ajouter une note à votre question réelle indiquant que vous apprécieriez l'exemple de code. – Shog9

Répondre

45

Cette URL indique le nombre de messages non lus par flux. Vous pouvez ensuite itérer sur les flux et résumer les comptes.

http://www.google.com/reader/api/0/unread-count?all=true

Voici un exemple minimaliste en Python ... l'analyse syntaxique du XML/JSON et la somme des comptes est laissé comme un exercice pour le lecteur:

import urllib 
import urllib2 

username = '[email protected]' 
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 

Et quelques liens supplémentaires sur le sujet:

+0

Pour l'interst général - depuis les modifications apportées à l'API Google Reader en juin, cet exemple ne fonctionne plus ... – Joe

+0

A l'heure actuelle, le 9 août 2010, cela ne fonctionne plus. –

+1

Correction de cet exemple. Merci à livibetter - j'avais lu sur le SID -> Changement d'authentification, mais n'a pas vu le «service»: partie «lecteur» documentée n'importe où. – jimmyorr

11

C'est there. Toujours en bêta cependant.

+0

Cette question répond à la question au fur et à mesure qu'elle est posée. S'il y a une raison pour laquelle l'auteur de la question ne le trouve pas suffisant, peut-être devrait-il modifier sa question pour clarifier. – EBGreen

+1

Beaucoup d'informations sur ce site sont obsolètes. –

+1

Autant que je le voudrais, ce n'est pas une API Google Reader officielle. Il s'agit simplement d'une supposition inversée qui peut se rompre à tout moment. – drozzy

0

Dans l'API affichée dans [1], le champ "jeton" devrait être "T"

[1] http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI

+0

Ceci n'est pas un article scientifique. Vous pouvez placer des liens [1] en ligne! :-) – drozzy

+0

@drozzy Je travaille sous l'hypothèse que vous ne plaisantez pas.Tout ce que Yassin a fait, c'est manquer un colon. Un deux-points directement après la seconde [1] correspond à la syntaxe markdown et en fait un lien en ligne. Cela peut être plus rapide, aucun clic de souris nécessaire, puis en utilisant l'interface gui fournie. – Davorak

+0

Désolé, je ne sais pas ce qui s'est passé en moi. – drozzy

6

Voici une mise à jour this answer

import urllib 
import urllib2 

username = '[email protected]' 
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 retiré SID auth autour de Juin 2010 (je crois), l'utilisation de nouvelles auth de ClientLogin est la nouvelle façon et il est un peu plus simple (en-tête est plus courte) . Vous devrez ajouter service dans les données pour demander Auth, je ne remarqué Auth retourné si vous n'envoyez pas le service=reader.

Vous pouvez en savoir plus sur le changement de méthode d'authentification dans this thread.

Questions connexes