如何在Python/Django中获取(和使用)Facebook扩展权限
我正在尝试写一个简单的应用,让用户可以授权我的代码在她的Facebook页面上发布内容。根据我的理解,这个过程应该很简单:
- 用户点击一个按钮,这个按钮会弹出一个窗口,里面是我Facebook应用的一个页面。
- 在这个页面上,用户点击某个东西,授权我的应用可以使用stream_publish,并把这个权限分配给她的页面。
- 窗口关闭后,我就拥有了运行一个定时脚本所需的所有信息,可以向那个页面发布内容。
我已经看了好几天的维基百科。关于pyfacebook的资料至少过时了一年,还有人推荐我去看socialauth这个Django应用,但它似乎也过时了,而且主要是针对用户,而不是他们的页面。我连第一步都做不了,更别提第二步和第三步了。
如果有人能教我怎么用Django/Python请求和获取写入Facebook动态的权限,那将是一个很好的开始。
非常感谢任何帮助。
2 个回答
3
你有没有看过 minifb?他们的 示例页面 基本上展示了你需要知道的所有内容,包括如何请求授权和获取会话密钥。(另外, pyfacebook的GitHub页面 也显示这个库还在更新中)
所以,对于你的情况,你需要:
- 请求“stream_publish”权限。有 几种方法 可以做到这一点,但我建议你选择最简单的: 提交一个表单 (注意,我从来没有做过Facebook的应用,可能这个方法并不是最简单的 :-)
- 正常使用你的应用:使用获得授权的用户的 user_id 调用 API 方法(你需要把这个 ID 存下来),因为你已经获得了授权,所以应该不会失败。
为此,基本上在你的模板中添加这个表单:
<form promptpermission="publish_stream">
<input type="submit" value="Allow Publish Stream">
</form>
顺便说一下,给 Facebook 的开发者们点个赞。他们的官方文档非常好。
编辑:我还不能评论,所以如果你在 获取 uid 时遇到问题,可以查看 这个问题 和相关的参考资料。
1
经过一番折腾,我似乎解决了在Facebook上遇到的所有问题:
- 原来,让用户点击一个按钮来授权权限,真的像Caio Romão说的那么简单。不过,我发现把他们引导到Facebook桌面应用的链接更简单,也更可靠。
- 通过这种链接方式,Facebook允许你指定
enable_profile_selector=1
,这样就会生成一个页面列表,用户可以从中选择哪些页面(如果有的话)来授予这些权限。 - 不过在这一点上,Facebook真的是完全崩溃了。在第二点中,他们允许用户选择一个页面来授予权限,但这些信息并没有传递给应用,无论是通过POST请求还是在请求头中。根本就没有这个信息。相反,你必须用一些丑陋的技巧,比如FQL和额外的问题,才能让它正常工作。
总之,如果有人感兴趣,我在我的博客上详细写了这些内容。谢谢大家的帮助!