2009-11-08 11 views
7

Io uso la seguente funzione python per contrassegnare un elemento come letto in Google Reader, ma restituisce sempre httpErrors di errore: HTTP 401: non autorizzato:Come faccio a contrassegnare un elemento come leggere con lettore di API di Google (usando 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()

Altre funzioni stanno recuperando i feed e le voci, quindi non è qualcosa di semplice come un nome utente o una password sbagliati. Ho letto che l'urlencoding è obbligatorio, quindi l'ho fatto. Un entryid di esempio si presenta così: tag: google.com, 2005: reader/item/f66ad0fb64f56a22

Cosa sto facendo male?

+1

Questo è un post, e gli esempi che si utilizzano di richieste riuscite sembrare Gets. Hai altri POST di successo? Forse c'è qualche differenza tra i due in questa API che non hai ancora ragione? PS: Neds Unite! –

+0

Stavo accedendo a Google Reader allo stesso modo usando Perl, e tutto funziona bene per me tranne che per cambiare lo stato degli elementi (Marcatura come letto, protagonista, ecc.). Elencare gli elementi in Reader funziona bene per me ... Ho la sensazione che questo potrebbe essere qualcosa sul fine Google, o forse l'API non ufficiale non è aggiornata su come contrassegnare gli articoli come letti? – BrianH

+0

c'è un aggiornamento su questo. Devo anche implementare mark come letto in un'applicazione python. Grazie –

risposta

0

Quando paragono questo alla richiesta che sto facendo in Firefox (ispezionata con liveheader), sembra ok. Ho solo i parametri extra

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

E l'utente, sul luogo di - c'è una lunga id.

Quindi è possibile provare ad aggiungere i due parametri di sincronizzazione, aggiungendo il parametro s e compilando un ID per -.

Per quanto riguarda l'urlencoding che stai facendo, sembra essere ok.

2

Sembra vi manca l'intestazione di autenticazione:

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