我已成功使用以下Python代码,在localhost上的Google App Engine服务器上运行,向我自己发送Facebook通知。我使用Facebook通知的template功能将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硬编码到模板中,它也是一样的,所以这不是一个不正确的变量值的问题。
为什么第二种情况不起作用?我该如何解决?
答案 0 :(得分: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}}
答案 1 :(得分:1)
根据您的错误消息,您的朋友必须安装您的应用才能向您发送通知。你没办法解决这个问题。