我正在尝试使用Facebook查询语言(FQL)来获取已安装我的应用的朋友列表。在验证我的应用程序并获取我的应用程序访问令牌后,我正在执行以下查询(请注意我使用Java并运行RestFB):
https://api-read.facebook.com/method/fql.query?query=SELECT+uid+FROM+user+WHERE+uid+IN+%28SELECT+uid2+FROM+friend+WHERE+uid1%3D<userId>%29+AND+is_app_user%3D1&access_token=<appAccessToken>&format=json
这会返回错误:
..."error_code":102,"error_msg":"Requires user session"
同样,如果我尝试将FQL与图形API一起使用(如下所示),我会得到同样的错误。
https://graph.facebook.com/fql?q=SELECT+uid+FROM+user+WHERE+uid+IN+%28SELECT+uid2+FROM+friend+WHERE+uid1%3D<userId>%29+AND+is_app_user%3D1&access_token=<appAccessToken>&format=json
所以我尝试使用用户访问令牌,因为它可以正常工作。我搜索了一下,发现了这个: Facebook 'Friends.getAppUsers' using Graph API
有一些很好的建议,并让我尝试以下查询:
https://graph.facebook.com/<userId>/friends?fields=installed&access_token=<appAccessToken>&format=json
这将返回带有应用访问令牌的朋友列表。
这引出了我的问题。为什么我无法使用带有FQL的应用访问令牌来获取朋友列表,但我可以使用Graph API检索朋友?
提前致谢,
本
答案 0 :(得分:2)
首先,我想提醒您fql.query来自REST API,并且不推荐使用它。
FB建议继续使用GRAPH API ..
重要提示:不会弃用FQL,但只会弃用使用REST API的fql.query方法。
因此,您可以继续使用FQL并使用GRAPH API执行FQL。
在http://developers.facebook.com/docs/reference/fql/
中了解详情FB中的示例代码
//get user access_token
$token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
. $app_id . '&redirect_uri=' . urlencode($my_url)
. '&client_secret=' . $app_secret
. '&code=' . $code;
$access_token = file_get_contents($token_url);
// Run fql query
$fql_query_url = 'https://graph.facebook.com/'
. '/fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()'
. '&' . $access_token;
$fql_query_result = file_get_contents($fql_query_url);
$fql_query_obj = json_decode($fql_query_result, true);
//display results of fql query
echo '<pre>';
print_r("query results:");
print_r($fql_query_obj);
echo '</pre>';
我知道我实际上没有回答你的问题,但这只是一系列信息,可以用来与FB更改内联。
答案 1 :(得分:0)
当我在我的FQL查询中使用App Token时,我收到以下响应:
“message”:“请求此资源需要用户访问令牌。”
您似乎应该尝试使用用户访问令牌。事实上,当我从我的app令牌切换到测试用户身份验证令牌时,它可以工作。 : - /