如何使用Python从App Engine向我的Facebook应用墙发布帖子?
我有一个应用程序引擎的网页应用,想要自动在我控制的Facebook应用的墙上发布内容。也就是说,每当网站上发生特定事件时,我希望更新我Facebook应用的墙。
这段代码会在服务器上的一个延迟任务中被调用。
我一直找不到相关的解决方案。希望能得到你的帮助。
我做的第一件事是用以下代码获取我的访问令牌:
https://graph.facebook.com/oauth/access_token?client_id=FACEBOOK_APP_ID&client_secret=FACEBOOK_APP_SECRET&grant_type=client_credentials&scope=manage_pages,offline_access
使用返回的访问令牌,我在服务器上运行了这个:
form_fields = {
"access_token": FACEBOOK_ACCESS_TOKEN,
"message": tgText
};
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url="https://graph.facebook.com/MYAPP_FACEBOOK_ID/feed",
payload=form_data,
method=urlfetch.POST,
validate_certificate=False,
headers={'Content-Type': 'application/x-www-form-urlencoded'})
但是调用这个时出现了:
{"error":{"type":"OAuthException","message":"(#200) The user hasn't authorized the application to perform this action"}}
2 个回答
0
我有一个类似的应用。Facebook可以更改你需要提交的代码,这个代码是获取访问令牌过程中的一部分。我写了一个简单的网页,里面有一个表单,表单里有一些隐藏的输入框,里面放着获取Facebook授权用户的应用所需的数据(具体可以参考http://developers.facebook.com/docs/reference/dialogs/oauth/)。
当用户点击提交按钮时,浏览器会向Facebook发送一个HTTP GET请求,带上合适的查询字符串,这时Facebook会提示用户登录(如果还没登录的话)并授权这个应用。如果用户授权了,Facebook会回调你的redirect_url,并带上一个代码,你可以把这个代码存储在数据存储中,以便在需要的时候用来获取访问令牌。
3
作为管理员,你可以允许第三方应用(比如你的Python应用)在你的应用的个人资料页面上发布内容,方法是使用OAuth认证:
http://developers.facebook.com/docs/authentication/(查看页面登录这一部分)
一旦你获得了访问令牌,就可以按照这里的说明在应用的个人资料页面上发布内容:
http://developers.facebook.com/docs/reference/api/post/(查看发布这一部分)