2008-09-09 7 views
26

¿Google lector tiene una API y si es así, ¿cómo puedo obtener el recuento del número de mensajes no leídos para un usuario específico conocer su nombre de usuario y contraseña?API de Google Reader Unread Count

+0

@GateKiller: entiendo la motivación para lanzar una etiqueta "código-solicitud" en este ... También tengo una recompensa abierta sobre una cuestión donde la única respuesta es un enlace a la documentación de la API (roto), y me irrita que termine pagando 300 repeticiones a alguien que solo buscó en Google mis palabras clave. – Shog9

+0

Pero, la etiqueta no sirve para ningún propósito. Por el contrario, debe agregar una nota a su pregunta real indicando que apreciaría el código de muestra. – Shog9

Respuesta

45

Esta URL le dará un recuento de publicaciones no leídas por feed. A continuación, puede iterar sobre los feeds y resumir los recuentos.

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

Aquí está un ejemplo minimalista en Python ... análisis del XML/JSON y sumando los conteos se deja como ejercicio para el lector:

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 

y algunos enlaces adicionales en el tema:

+0

Para interés general: desde los cambios realizados en la API de Google Reader en junio, este ejemplo ya no funciona ... – Joe

+0

En este momento, el 9 de agosto de 2010, esto ya no funciona. –

+1

Solucionado este ejemplo. Gracias a livibetter, leí en el SID -> Auth change, pero no vi el 'servicio': parte del 'lector' documentada en cualquier lugar. – jimmyorr

11

Es there. Aún en Beta, sin embargo.

+0

Esta pregunta responde la pregunta tal como se pregunta. Si hay alguna razón por la cual el autor de la pregunta no lo considera suficiente, tal vez debería editar su pregunta para aclararla. – EBGreen

+1

Mucha de la información en ese sitio está desactualizada. –

+1

Por mucho que me gustaría, esta NO es una API oficial de Google Reader. Es simplemente una conjetura de ingeniería inversa que puede romperse en cualquier momento. – drozzy

0

En la API publicado en [1], el campo "señal" debe ser "T"

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

+0

Esto no es un artículo científico. ¡Puedes colocar enlaces [1] en línea! :-) – drozzy

+0

@drozzy Estoy trabajando bajo la suposición de que no bromeas.Todo lo que Yassin hizo fue perder dos puntos. Dos puntos inmediatamente después del segundo [1] se ajustan a la sintaxis de reducción y lo convierten en un enlace en línea. Esto puede ser más rápido, sin necesidad de hacer clic con el mouse, luego usando la interfaz gui proporcionada. – Davorak

+0

Lo siento, no sé lo que me pasó. – drozzy

6

Aquí es una actualización de 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 eliminado SID auth alrededor de junio de 2010 (creo), utilizando nueva autenticación de ClientLogin es la nueva forma y es un poco más simple (cabecera es más corto) . Usted tendrá que añadir service de datos para solicitar Auth, me di cuenta sin Auth devueltos si usted no envía el service=reader.

Puede leer más sobre el cambio de método de autenticación en this thread.