2009-11-08 6 views
7

utiliser la fonction python suivante pour marquer un élément comme lu dans Google Reader, mais il retourne toujours httpErrors d'erreur: HTTP 401: Non autorisé:Comment puis-je marquer un élément comme lu avec Google Reader api (en utilisant 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()

D'autres fonctions récupèrent avec succès des flux et des entrées, donc ce n'est pas quelque chose de basique comme un mauvais nom d'utilisateur ou mot de passe. J'ai lu que l'encodage url est requis, alors j'ai fait ça. Un exemple d'ID d'entrée ressemble à ceci: tag: google.com, 2005: reader/item/f66ad0fb64f56a22

Qu'est-ce que je fais de mal?

+1

C'est un POST, et les exemples que vous utilisez des requêtes réussies du son comme le SEAOG. Avez-vous d'autres POST réussis? Peut-être qu'il y a une différence entre les deux dans cette API que vous n'avez pas encore eu? PS: Neds Unite! –

+0

J'accédais à Google Reader de la même façon en utilisant Perl, et tout fonctionne bien pour moi sauf changer l'état des éléments (Marquer comme lu, en vedette, etc). La liste des éléments dans Reader fonctionne bien pour moi ... J'ai l'impression que cela pourrait être quelque chose sur la fin de Google, ou peut-être l'API non officielle n'est pas à jour sur la façon de marquer les éléments comme lus? – BrianH

+0

est-il une mise à jour à ce sujet. J'ai également besoin d'implémenter mark comme lu dans une application python. Merci –

Répondre

0

Lorsque je compare cela à la demande que je fais dans Firefox (inspecté avec des liveheaders), cela semble correct. Je n'ai que les paramètres supplémentaires

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

Et l'utilisateur, sur le lieu de - il y a une longue id.

Vous pouvez donc essayer d'ajouter les deux paramètres de synchronisation, en ajoutant le paramètre s et en renseignant un ID pour le -. En ce qui concerne l'urlencoding que vous faites, cela semble être ok.

2

Il semble que vous manque l'en-tête d'authentification:

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