2009-11-08 11 views
7

używam następującą funkcję Pythona aby oznaczyć przedmiot jako przeczytane czytnik google, ale zawsze wraca HTTPErrors błędach: HTTP 401: Nieuprawnione:jaki sposób oznaczyć przedmiot jako przeczytane z czytnika google api (przy użyciu 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()

Inne funkcje pomyślnie pobierają kanały i wpisy, więc nie jest to coś podstawowego, jak niewłaściwa nazwa użytkownika lub hasło. Zauważyłem, że urlencoding jest wymagany, więc zrobiłem to. Przykładowy identyfikator pliku wygląda następująco: tag: google.com, 2005: reader/item/f66ad0fb64f56a22

Co robię źle?

+1

To POST, a przykłady użyć udanych wniosków brzmi jak wystąpią. Czy masz inne udane testy POST? Być może jest jakaś różnica między tymi dwoma w tym interfejsie API, których jeszcze nie masz? PS: Neds Unite! –

+0

Tak samo korzystałem z Czytnika Google przy użyciu Perla i wszystko działa dobrze, oprócz zmiany stanu elementów (Oznaczanie jako przeczytane, z gwiazdą itp.). Wyświetlanie pozycji w Czytelniku działa dobrze dla mnie ... Mam wrażenie, że może to być coś na końcu Google, a może nieoficjalny interfejs API nie jest na bieżąco, jak oznaczać elementy jako przeczytane? – BrianH

+0

jest tam aktualizacja na ten temat. Muszę również zaimplementować oznaczenie jako przeczytane w aplikacji python. dzięki –

Odpowiedz

0

Kiedy porównuję to z żądaniem, które robię w Firefoksie (sprawdzonym przez liveheaders), wygląda dobrze. Mam tylko dodatkowe parametry

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

A na użytkownika, na miejscu - istnieje długa id.

Możesz więc spróbować dodać dwa parametry synchronizacji, dodać parametr s i wypełnić identyfikator dla -.

Jeśli chodzi o kodowanie urny, które wydaje się być w porządku.

2

Wydaje brakuje nagłówka uwierzytelniania:

header = { 
    'Content-type': 'application/x-www-form-urlencoded', 
    'Authorization': 'GoogleLogin auth=YOUR_AUTH_TOKEN' 
} 
Powiązane problemy