0

我已成功使用以下 Python 代码(在本地主机上的 Google App Engine 服务器上运行)向自己发送 Facebook 通知。我使用 Facebook 通知的模板功能将 Facebook 用户 ID 扩展为通知文本中的粗体名称:

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)

请注意,应用访问令牌是虚构的,但与真实令牌具有相同的格式。

当我将模板的 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 硬编码到模板中,它的工作原理也是一样的,因此这不是变量值不正确的问题。

为什么第二种情况不起作用?我该如何解决?

4

2 回答 2

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}}

有关 urllib2 使用 403 状态代码的行为的更全面讨论,请参阅123

于 2013-08-02T00:49:11.470 回答
1

根据您的错误消息,您的朋友必须安装您的应用程序才能向他们发送通知。你无法解决这个问题。

于 2013-08-08T17:55:04.047 回答