我正在使用Facebook Graph API,我想知道是否可以通过一次呼叫获得所有用户及其当前状态的列表?
我基本上希望获得与https://graph.facebook.com/me/friends相同的结果,但每个对象都包含当前状态。
谢谢你的帮助!
编辑:
这里有一些澄清。如果https://graph.facebook.com/me/friends?access_token=...得到我这个:(又是我所有朋友的清单)
https://graph.facebook.com/me/friends?access_token=...
{ "data": [ { "name": "Foo", "id": "1" }, { "name": "Bar", "id": "2" }, { "name": "Foo Bar", "id": "3" }, { "name": "Bar Foo", "id": "4" } ] }
什么URL或FQL将使我得到这个信息:(又是我所有朋友及其身份的列表)
{ "data": [ { "name": "Foo", "id": "1" "status": "This is my current status!" }, { "name": "Bar", "id": "2" "status": "This is my current status!" }, { "name": "Foo Bar", "id": "3" "status": "This is my current status!" }, { "name": "Bar Foo", "id": "4" "status": "This is my current status!" } ] }
我只想打一个电话,因为与我不同的是,大多数人有100多个朋友,我不想为了获得状态而打100多个电话。
尽管新的Batch API可以满足您的要求,但我无法使其正常运行。看来它仍然是越野车。
现在,使用来实现此目的fql.multiquery,这是一个简单的示例:
fql.multiquery
<?php $app_id = "APP_ID"; $app_secret = "APP_SECRET"; $my_url = "REDIRECT_URL"; $code = $_REQUEST["code"]; if(empty($code)) { $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url); echo("<script> top.location.href='" . $dialog_url . "'</script>"); } $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); $queries = '{"query1":"SELECT uid,name FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1=me())","query2":"SELECT uid,message FROM status WHERE uid IN (SELECT uid FROM #query1)"}'; $multiquery = "https://api.facebook.com/method/fql.multiquery?queries=" . urlencode($queries) . "&format=json&" . $access_token; $res = json_decode(file_get_contents($multiquery), TRUE); $final = array(); foreach( $res[1]['fql_result_set'] as $i=>$message_arr ) { foreach( $res[0]['fql_result_set'] as $j=>$friend ) { if( $message_arr['uid'] == $friend['uid'] ) { $friend['message'] = $message_arr['message']; $final[] = $friend; break; } } } print_r($final); ?>
在这里,我们在第一个查询中获取用户ID和名称,并从第二个查询中获取状态消息。 现在,这将在第一个查询或第二个查询中返回更少的结果!因为:
break