2009-11-08 33 views
7

我用下面的python功能在谷歌閱讀器讀取的標記的項目,但它總是返回錯誤HTTPErrors:HTTP 401:未經授權:我要怎樣將項目作爲與谷歌閱讀器API(使用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()

其他函數正在成功地檢索提要和條目,所以它不像基本的用戶名或密碼錯誤。我讀過urlencoding是必需的,所以我已經做到了。示例entryid如下所示:tag:google.com,2005:reader/item/f66ad0fb64f56a22

我在做什麼錯?

+1

這是一個POST,並使用成功請求的例子聽起來象gets。你有其他成功的POST嗎?也許這個API中兩者之間存在一些區別,那就是你還沒有正確使用? PS:Neds團結! –

+0

我使用Perl以同樣的方式訪問Google閱讀器,除了更改項目狀態(標記爲已讀,主演等)外,所有內容都適用於我。在Reader中列出的項目對我來說工作正常......我有一種感覺,這可能是谷歌的一端,或者非官方的API沒有及時更新如何將項目標記爲已讀? – BrianH

+0

是否有更新。我還需要將標記實現爲在Python應用程序中讀取。謝謝 –

回答

0

當我比較這與我在Firefox(使用liveheaders進行檢查)的請求時,它看起來沒問題。我只是有額外的參數

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

和用戶,對-的地方還有很長的ID。

因此,您可以嘗試添加兩個同步參數,添加s參數並填寫-的ID。

關於你正在做的urlencoding,這似乎是好的。

2

看來你缺少認證頭:

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