2008-09-09 12 views
26

Google Reader'ın bir API'si var mı? Varsa, belirli bir kullanıcının kullanıcı adı ve şifresini bilen okunmamış mesajların sayısını nasıl alabilirim?Google Reader API Okunmamış Sayım

+0

@GateKiller: "Kod-istek" etiketi üzerine atma motivasyonunu anlıyorum ... Ayrıca, tek cevabın (kırık) API dökümantasyonunun bir bağlantısı olduğu bir sorunda da açık bir ödül var. Bana sadece benim anahtar kelimelerimi yönlendiren birine 300 rep ödeyerek sonuçlanacağımı tahriş eder. – Shog9

+0

Ancak, etiket herhangi bir amaca hizmet etmiyor. Daha ziyade, örnek sorunuzu takdir edeceğinizi belirten asıl sorunuza bir not eklemelisiniz. – Shog9

cevap

45

Bu URL, feed başına okunmamış mesaj sayısını verecektir. Daha sonra özet akışlarını yineleyebilir ve sayıları toplayabilirsiniz.

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 

Ve bazı ek bağlantılar: Burada

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

xml/json ayrıştırma ve sayıları toplayarak okuyucuya alıştırma olarak bırakılmıştır ... Python minimalist örnektir konu:

+0

Genel etkileşim için - Google Reader API'sında haziran ayında yapılan değişikliklerden bu yana, bu örnek artık çalışmıyor ... – Joe

+0

Şu anda, 9 Ağustos 2010, bu artık çalışmıyor. –

+1

Bu örnek düzeltildi. Livibetter sayesinde - SID -> Auth değişikliğini okumuştum, fakat 'service' (servis) 'i görmedim:' reader 'kısmı her yerde belgelendi. – jimmyorr

11

there. Yine de Beta'da.

+0

Bu soru, sorulan soruları yanıtlıyor. Soru yazarı yeterli bulmadığı için bir neden varsa, belki de sorusunu açıklığa kavuşturmak için düzenlemelidir. – EBGreen

+1

Bu sitedeki birçok bilgi güncel değil. –

+1

İstediğim kadarıyla, bu resmi bir Google Reader API'sı değil. Her an kırılabilecek, sadece tersine tasarlanmış bir tahmindir. – drozzy

0

[1], "belirteç" alanı

[1] Burada

+0

Bu bilimsel bir yazı değildir. Linkleri [1] inline yerleştirebilirsiniz! :-) – drozzy

+0

@drozzy Şaka yapmadığınız varsayımı altında çalışıyorum.Bütün Yassin kolonunu kaçırmıştı. İkinci [1] 'den hemen sonra bir kolon, işaretleme sözdizimine uyuyor ve satır içi bir bağlantı yapıyor. Bu, daha hızlı olabilir, hiçbir fare tıklaması gerekli değildir, ardından sağlanan gui arabirimini kullanabilir. – Davorak

+0

Üzgünüm, bana ne olduğunu bilmiyorum. – drozzy

6

http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI bir güncelleştirme 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 
için "T" olmalıdır

Google Reader, SID'yi Haziran 2010'da kaldırdı (sanırım), ClientLogin'den yeni Auth kullanmak yeni bir yoldur ve biraz daha basittir (başlık daha kısadır) . Auth talep etmek için service veri eklemek zorunda kalacaksınız, service=reader göndermezseniz hiçbir Auth döndü fark ettim.

this thread'da kimlik doğrulama yönteminin değişikliği hakkında daha fazla bilgi edinebilirsiniz.