如何使用Python从App Engine向我的Facebook应用墙发布帖子?

1 投票
2 回答
5217 浏览
提问于 2025-04-16 18:28

我有一个应用程序引擎的网页应用,想要自动在我控制的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/(查看发布这一部分)

撰写回答