I am using the Facebook Graph API and I was wondering if there was anyway to get a list of all the users and their current status in one call?
I basically want the same results as https://graph.facebook.com/me/friends but with the current status included per object.
Thanks for any help!
EDIT:
Here is some clarification. if https://graph.facebook.com/me/friends?access_token=...
gets me this: (AKA a list of all my friends)
{
"data": [
{
"name": "Foo",
"id": "1"
},
{
"name": "Bar",
"id": "2"
},
{
"name": "Foo Bar",
"id": "3"
},
{
"name": "Bar Foo",
"id": "4"
}
]
}
what URL or FQL will get me this: (AKA a list of all my friends and their statuses)
{
"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!"
}
]
}
I only want to make one call, because unlike me, most people have 100+ friends, and I don't want to have to make 100+ calls just to get statuses.
While the new Batch API should do what you are asking for, I couldn't manage to make it work properly. It seems that it's still buggy.
Now to achieve this with fql.multiquery
, here's a quick example:
<?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);
?>
Here we are getting the user id and name in the first query and getting the status messages from the second one.
Now this would return fewer results in the first query or the second! because:
break
).Try the following fql:
Select uid, message from status where uid in (select uid2 from friends where uid1 = [active user id])
Just make sure to limit to a specific date, because this will return the last 50 updates / or last 30 days of activity by default.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With