获取已安装应用的Facebook好友时出错

时间:2014-05-17 00:00:10

标签: python facebook facebook-graph-api flask

我正在使用Flask编写一个基本上是游戏RESTful服务器的Python应用程序。但是我在facebook-sdk上遇到了一些问题。

播放器在客户端游戏上使用Facebook登录并向我发送访问令牌。我正在提取用户数据和他们也玩游戏的朋友(在我的系统中建立友谊关系)。但是有一个问题,当我尝试抓取me/friends?fields=installed时,它始终会让我facebook.GraphAPIError: An active access token must be used to query information about the current user.如果我只是查询me/friends,则返回正常。

如果我尝试直接从Graph API Explorer查询这些信息,它就可以正常工作了。但是当我去python repl时它会返回错误。我试过这个:

>>> graph = facebook.GraphAPI("[access-token]")
>>> graph.get_object("me/friends?fields=installed")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/vagrant/venv/local/lib/python2.7/site-packages/facebook.py", line 99, in get_object
    return self.request(id, args)
  File "/home/vagrant/venv/local/lib/python2.7/site-packages/facebook.py", line 298, in request
    raise GraphAPIError(response)
facebook.GraphAPIError: An active access token must be used to query information about the current user.

我使用与资源管理器上完全相同的访问令牌。

我不应该在当前的app-key或其他地方声明?

感谢。

2 个答案:

答案 0 :(得分:1)

是的,您应该使用app-secretapp-id来生成访问令牌。您将从中获取的访问令牌可以解决问题。您可以使用以下命令生成访问令牌(1):

GET /oauth/access_token?
     client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

由于您使用的是Python,因此您可以简单地对上述URL发出get请求以获取访问令牌。这可以通过(2):

来完成
import requests
r = requests.get('https://graph.facebook.com/oauth/access_token?
grant_type=client_credentials&client_id=123&client_secret=XXX')
access_token = r.text.split('=')[1]
print access_token

您甚至可以使用任何其他python库来发出此请求。


来源:

  1. Facebook Login - App Tokens
  2. Answer to "How to connect to Facebook Graph API from Python using Requests if I do not need user access token?"

答案 1 :(得分:0)

您需要检查您在授权场景中包含的权限。我认为这说明令牌无效的原因。

查看此文档 https://developers.facebook.com/docs/facebook-login/permissions/v2.0 希望它有所帮助