2008-09-09 10 views
26

Czy Czytnik Google ma interfejs API i jeśli tak, w jaki sposób mogę uzyskać liczbę nieprzeczytanych wpisów dla określonego użytkownika znającego jego nazwę użytkownika i hasło?Czytnik Google API Nieprzeczytany numer

+0

@GateKiller: Rozumiem motywację do rzucania na to znacznika "żądania kodu" ... Mam również otwartą nagrodę w pytaniu, w którym jedyną odpowiedzią jest link do (zepsutej) dokumentacji API, a także irytuje mnie, że w efekcie wypłacę 300 powtórzeń komuś, kto tylko wyszukał moje słowa kluczowe. – Shog9

+0

Ale tag nie służy żadnemu celowi. Zamiast tego należy dodać notatkę do faktycznego pytania stwierdzającego, że docenisz przykładowy kod. – Shog9

Odpowiedz

45

Ten adres URL poda liczbę nieprzeczytanych wpisów na kanał. Następnie możesz powtórzyć dane z kanałów i zsumować liczby.

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

Oto minimalistyczny przykład w Pythonie ... parsowania XML/JSON i zsumowanie liczby pozostawiamy jako ćwiczenie dla czytelnika:

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 

a niektóre dodatkowe linki na temat:

+0

Dla ogólnej liczby odwiedzin - od czasu wprowadzenia zmian w Google Reader API w czerwcu ten przykład już nie działa ... – Joe

+0

W tej chwili 9 sierpnia 2010 r. To już nie działa. –

+1

Naprawiono ten przykład. Dzięki livibetter - przeczytałem na SID -> Auth change, ale nie widziałem części "service": "czytnik" udokumentowanej gdziekolwiek. – jimmyorr

11

To jest there. Wciąż jednak w wersji Beta.

+0

To pytanie odpowiada na pytanie, które jest zadawane. Jeśli jest jakiś powód, dla którego autor pytania nie uważa go za wystarczający, może powinien edytować swoje pytanie w celu wyjaśnienia. – EBGreen

+1

Wiele informacji na tej stronie jest nieaktualnych. –

+1

Tak bardzo, jak chciałbym, to NIE jest oficjalnym api aplikacji Google Reader. Jest to jedynie domysły odwrotne, które mogą się w każdej chwili złamać. – drozzy

0

w API pisał w [1] "żeton" pole powinno być "T"

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

+0

To nie jest artykuł naukowy. Możesz umieścić linki [1] w linii! :-) – drozzy

+0

@drozzy Pracuję przy założeniu, że nie żartujesz.Wszyscy Yassinowi brakowało dwukropka. Dwukropek bezpośrednio po drugim [1] pasuje do składni markdown i sprawia, że ​​jest linkiem wbudowanym. Może to być szybsze, bez kliknięć myszką, a następnie przy użyciu dostarczonego interfejsu GUI. – Davorak

+0

Przepraszam, nie wiem co mi się stało. – drozzy

6

Oto aktualizacja 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 

Czytnik Google usunięto autoryzację SID około czerwca 2010 (myślę), użycie nowego Auth z ClientLogin jest nowym sposobem i jest nieco prostsze (nagłówek jest krótszy) . Będziesz musiał dodać service w danych do żądania Auth, zauważyłem, że nie zwróciłem Auth, jeśli nie wyślesz service=reader.

Możesz przeczytać więcej na temat zmiany metody uwierzytelniania w this thread.