2008-09-09 32 views
26

Google Reader có API không và nếu có, làm cách nào tôi có thể đếm số lượng bài đăng chưa đọc cho một người dùng cụ thể biết tên người dùng và mật khẩu của họ?Google Reader API chưa đọc Count

+0

@GateKiller: Tôi hiểu động lực cho việc ném thẻ "yêu cầu mã" lên điều này ... Tôi cũng có tiền thưởng mở về câu hỏi mà câu trả lời duy nhất là liên kết đến tài liệu API (bị hỏng) và kích thích tôi rằng tôi sẽ kết thúc trả 300 đại diện cho một người chỉ cần Google từ khóa của tôi. – Shog9

+0

Tuy nhiên, thẻ không phục vụ bất kỳ mục đích nào. Thay vào đó, bạn nên thêm ghi chú vào câu hỏi thực tế của mình cho biết bạn muốn đánh giá cao mã mẫu. – Shog9

Trả lời

45

URL này sẽ cung cấp cho bạn số lượng bài đăng chưa đọc trên mỗi nguồn cấp dữ liệu. Sau đó, bạn có thể lặp qua các nguồn cấp dữ liệu và tổng hợp số lượng.

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

Dưới đây là một ví dụ nhỏ gọn bằng Python ... phân tích cú pháp xml/json và cách tổng hợp các tội là trái như một bài tập cho người đọc:

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 

Và một số liên kết bổ sung trên chủ đề:

+0

Nói chung - kể từ khi các thay đổi được thực hiện cho API Google Reader vào tháng 6, ví dụ này không còn hoạt động ... – Joe

+0

Hiện tại, ngày 9 tháng 8 năm 2010, điều này không còn hoạt động nữa. –

+1

Cố định ví dụ này. Nhờ livibetter - Tôi đã đọc lên trên SID -> Auth thay đổi, nhưng không thấy phần 'dịch vụ': 'người đọc' được ghi lại ở bất cứ đâu. – jimmyorr

11

Đây là there. Vẫn còn trong Beta mặc dù.

+0

Câu hỏi này trả lời câu hỏi khi được hỏi. Nếu có một số lý do tại sao các tác giả câu hỏi không tìm thấy nó đủ, có lẽ anh ta nên chỉnh sửa câu hỏi của mình để làm rõ. – EBGreen

+1

Rất nhiều thông tin trên trang web đó đã lỗi thời. –

+1

Nhiều như tôi muốn, đây không phải là api chính thức của Google Reader. Nó chỉ là dự đoán đảo ngược thiết kế có thể phá vỡ bất cứ lúc nào. – drozzy

0

Trong API posted in [1], lĩnh vực "token" cần được "T"

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

+0

Đây không phải là một bài báo khoa học. Bạn có thể đặt liên kết [1] nội tuyến! :-) – drozzy

+0

@ drozzy Tôi đang làm việc theo giả định bạn không nói đùa.Tất cả Yassin đã bỏ lỡ một tràng đại tràng. Dấu hai chấm ngay sau dấu chấm thứ hai phù hợp với cú pháp đánh dấu và làm cho nó trở thành một liên kết nội dòng. Điều này có thể nhanh hơn, không cần nhấp chuột, sau đó sử dụng giao diện gui được cung cấp. – Davorak

+0

Xin lỗi, không biết điều gì đã xảy ra với tôi. – drozzy

6

Dưới đây là một bản cập nhật để 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 

Google Reader đã xóa xác thực SID vào khoảng tháng 6 năm 2010 (tôi nghĩ), bằng cách sử dụng Auth mới từ ClientLogin là cách mới và đơn giản hơn một chút (tiêu đề ngắn hơn) . Bạn sẽ phải thêm service vào dữ liệu để yêu cầu Auth, tôi nhận thấy không có Auth trả lại nếu bạn không gửi service=reader.

Bạn có thể đọc thêm về thay đổi phương thức xác thực trong this thread.