2013-07-30 34 views
0

我已成功地使用以下Python代碼(在本地主機上的Google App Engine服務器上運行)向我發送Facebook通知。我使用Facebook的通知template功能拓展Facebook的用戶ID爲粗體的名字通知全文:Urllib - 沒有任何消息的HTTP 403錯誤(Facebook通知)

url = 'https://graph.facebook.com/'+myOwnID+'/notifications' 

values = {'access_token' : 426547656256546|4fhe34FJdeV3WvfF6SNfehs7GfW 
        'href' : 'http://localhost:8080/', 
       'template' : '@['+myOwnID+'] says hi.'} 

req = urllib2.Request(url, urllib.urlencode(values)) 
urllib2.urlopen(req) 

請注意,App訪問令牌是虛構的,但具有相同的格式真正的令牌。

當我更改模板的ID給我的一個朋友的ID:

url = 'https://graph.facebook.com/'+myOwnID+'/notifications' 

values = {'access_token' : 426547656256546|4fhe34FJdeV3WvfF6SNfehs7GfW 
        'href' : 'http://localhost:8080/', 
       'template' : '@['+myFriendID+'] says hi.'} 

req = urllib2.Request(url, urllib.urlencode(values)) 
urllib2.urlopen(req) 

我得到的錯誤

HTTP Error 403: Forbidden 

它的工作原理相同,即使我硬編碼的ID爲該模板,所以它不是一個不正確的變量值的問題。

爲什麼第二種情況不起作用?我該如何解決它?

+1

什麼是錯誤迴應的文字?知道HTTP錯誤代碼是不夠的 – Igy

+0

@Igy感謝您的建議 - 我沒有意識到,我可以得到的不僅僅是錯誤代碼,因爲我是web開發新手。 –

回答

2

我沒有意識到的urllib2可以打印更詳細的錯誤信息不僅僅是狀態代碼,通過替換最後一行:

try: 
    urllib2.urlopen(req) 
except urllib2.HTTPError, error: 
    logging.info(error.read()) # or "print error.read()" 

這給了明確的錯誤消息:

{"error":{"message":"(#200) Cannot tag users who have not installed the app","type":"OAuthException","code":200}} 

有關使用403狀態代碼更全面地討論urllib2的行爲,請參見1,23

1

根據您的錯誤消息,您的朋友必須安裝您的應用才能向他們發送通知。沒有什麼可以解決這個問題。

相關問題