2009-11-08 14 views
7

que utilizar la siguiente función de pitón para marcar un elemento como leído en Google Reader, pero siempre vuelve httpErrors de error: HTTP 401: no autorizado:¿Cómo puedo marcar un elemento como leído con Google Reader API (utilizando Python)

def mark_as_read(SID, entryid): 
    token = get_token(SID) 
    mark_as_read_url = 'http://www.google.com/reader/api/0/edit-tag' 
    header = {'Content-type': 'application/x-www-form-urlencoded'} 
    post_data = urllib.urlencode({ 'i': entryid, 'a': 'user/-/state/com.google/read', 'ac': 'edit', 'T': token }) 
    request = urllib2.Request(mark_as_read_url, post_data, header) 
    f = urllib2.urlopen(request) 
    result = f.read()

Otras funciones están recuperando feeds y entradas con éxito, por lo que no es algo básico como un nombre de usuario o contraseña incorrectos. He leído que se requiere urlencoding, así que lo hice. Un ejemplo de entrada se ve así: etiqueta: google.com, 2005: lector/elemento/f66ad0fb64f56a22

¿Qué estoy haciendo mal?

+1

Este es un puesto, y los ejemplos que utiliza de solicitudes exitosas suena como GET. ¿Tiene otros POST exitosos? Tal vez hay alguna diferencia entre los dos en esta API que todavía no tienes? PD: ¡Neds Unite! –

+0

Estaba accediendo a Google Reader de la misma manera usando Perl, y todo funciona bien para mí, excepto cambiar el estado de los elementos (Marcado como leído, como protagonista, etc.). La lista de elementos en Reader funciona bien para mí ... Tengo la sensación de que esto podría ser algo del lado de Google, o tal vez la API no oficial no está actualizada sobre cómo marcar elementos como leídos. – BrianH

+0

hay una actualización sobre esto. También necesito implementar mark como lectura en una aplicación de Python. Gracias –

Respuesta

0

Cuando comparo esto con la solicitud que estoy haciendo en Firefox (inspeccionado con liveheaders), se ve bien. Sólo tengo los parámetros extra

async=true 
sync=true 
s=feed/http://feeds.feedburner.com/37signals/beM 

Y en el usuario, en el lugar de - hay una larga ID.

Puede intentar agregar los dos parámetros de sincronización, agregar el parámetro sy completar una identificación para el -.

Con respecto a la codificación url que estás haciendo, parece estar bien.

2

Parece que les falta la cabecera de autenticación:

header = { 
    'Content-type': 'application/x-www-form-urlencoded', 
    'Authorization': 'GoogleLogin auth=YOUR_AUTH_TOKEN' 
} 
Cuestiones relacionadas