Getting list of friends with koala and fb api - facebook

Im trying to return the friend list with uid of an authenticated user. however I only get a partial return value, some part of the friends are just left out:
graph = Koala::Facebook::API.new(fb_token)
friends = graph.get_connections("me", "friends")
#some friend action
when I type in the
friends.paging["next"]
in the browser it also returns an empty json array
"data": [ ]
How am I doing it wrong and what is the correct practice?

You need to get the permission 'user_friends' to get friendlist, otherwise you'll receive a empty data:
The field 'friends' is only accessible on the User object after the user grants the 'user_friends' permission.
Try yourself:
https://developers.facebook.com/tools/explorer?method=GET&path=me%2Ffriends&version=v2.5
So, with correct permission you can do:
graph = Koala::Facebook::API.new(fb_token)
result = graph.get_connections('me', 'friends')
to paginate:
next_page = result.next_page
LAST BUT NOT LEAST:
Only friends who installed this app are returned in API v2.0 and
higher. total_count in summary represents the total number of friends,
including those who haven't installed the app.Learn More

You just try this..
This is very simple to you can get all friend count in a single line :)
#graph = Koala::Facebook::API.new(facebook_token)
#friends = #graph.get_connection("me", "friends",api_version:"v2.0").raw_response["summary"]["total_count"]

Related

Issue retrieving friendlists from Facebook through Koala gem

I am working with a project started by someone else which interacts with Facebook through the Koala gem. For some odd reason it will allow me to create friend lists but when I retrieve them I get nothing. I can verify I have friend lists available through the Graph API by using Facebook's Graph API Explorer tool, and I do have the "manage_friendlists" permission in the application. I can also verify that it successfully adds friend lists through this application and trying to add an identically named friend list will return an error (which it should). However, when it gets to the point of actually retrieving them through the app, it simply returns the hash
{:me => {:id => 'my_id'}}
with nothing else. The method is written as
def friendlists
graph_api.get_objects('me', {fields: 'friendlists'})['me']['friendlists']['data']
end
which gives an 'undefined method [] for nilClass' since there is no 'friendlists' nested hash returning. I am using Koala 1.4.0 if that makes any difference. Any thoughts or suggestions? Thanks!
I am also using koala gem... you can use it as follows:
session['fb_access_token'] is the one when user is logging in, I am assigning as follow:
session['fb_access_token'] = auth['credentials']['token']
def self.fetching_facebook_friends
#graph = Koala::Facebook::API.new(session['fb_access_token'])
profile = #graph.get_object("me")
#profile_image = graph.get_picture("me")
friends = #graph.get_connections("me", "friends?fields=id, name, picture.type(large)")
end

Can't get facebook checkins, data array always empty

I have a strange behavior when trying to get the checkins of a place or user: the result is always an empty data array:
{
"data": [
]
}
This happens when I use the Graph Explorer: /4/checkins
or when I use FQL: SELECT checkin_id, author_uid, page_id, timestamp from checkin where page_id = 111856692159256
or when using javascript:
FB.api("/me/checkins", function(response){
console.log(response);
});
I always use an access_token, even ones with ALL permissions available. Simply no result.
I read, that checkins are now post with locations, so I tried /4/posts?with=location, but still no luck. Is there some kind of bug, or restriction (country/app-permissions) I am missing?
EDIT: I now got lucky and can get of SOME of my friends their checkins. It's like a 50/50 chance...
There are 2 differences commands, one command is the url to get the user checkins:
/me/checkins will return all checkins of the current user (the user that generate the token)
/<USERID>/checkins will return all checking from the User ID that the current user can see.
/<PLACEID>/checkins will return all friends of the current user that made checkin at this place
So, probably you have no friends that made checkins at the id 111856692159256

Retrieve User ID of Facebook App Invitor

In the context of a given Facebook app, suppose User A invited user B to start using it. Once User B accepts to use the app, is there any way to retrieve the ID of User A programmatically (via either PHP/JS SDK) ? This doesn't seem quite documented.
For what it's worth, A/B users are friends, if it's any use.
when user comes following the app request, you can get request id's using
$_GET['request_ids']
then retrieve all the request ids with which you can call graph api to get the corresponding request details like below:
if(isset($_GET['request_ids']))
{
$request_ids = $_GET['request_ids'];
}
$request_ids = explode(",", $request_ids);
foreach($request_ids as $request_id)
{
$request_object = $facebook->api($request_id);
//this $request_object have sender facebook id in the field uid_from
}
If you look here:
http://developers.facebook.com/docs/reference/dialogs/requests/
You can see the object layout. Of note is the data property:
Optional, additional data you may pass for tracking. This will be
stored as part of the request objects created. The maximum length is
255 characters.
In this object you can add your referring UserId and then when the request is claimed, you can then process it on your end.
Hope this helps.

facebook graph api check if user is a member of a group using PHP

i want to check if a user is a member of a group using facebook graph api...
i have this:
$group = file_get_contents("https://graph.facebook.com/177129325652421/members?access_token=XXXXXXXX");
$group = json_decode($group);
$checkuser = $group->data;
and check the user if is a member by using his facebook id and in_array()
if(in_array($_GET["fid"],$checkuser)){
echo "yes";
} else {
echo "no";
}
can someone help me to correct this please... my code is not working...
Reference: https://developers.facebook.com/docs/reference/api/
Use the API url:
https://graph.facebook.com/me/groups
To get a user's groups. In the above link, change the me/ to the user's FB ID. You must also pass in an Access Token.
The reply will be JSON encoded. Decode it using json_decode to a PHP Associative array. Iterate over it and check for the group you want.
The Graph API does not return all groups at once. You must either use the pagination links at the end of each response to fetch more, or use the limit parameter to request as many as you need.
The following code sample will post the IDs of the Groups you are a part of
<?php
$url = "https://graph.facebook.com/me/groups?access_token=AAAAAAITEghMBAMDc6iLFRSlVZCoWR0W3xVpEl1v7ZAxJRI3nh6X2GH0ZBDlrNMxupHXWfW5Tdy0jsrITfwnyfMhv2pNgXsVKkhHRoZC6dAZDZD";
$response = file_get_contents($url);
$obj = json_decode($response);
foreach($obj->data as $value) {
echo $value->id;
echo '<br>';
}
/* to check for existence of a particular group
foreach($obj->data as $value) {
if ($value->id == $yourID) {
//found
break;
}
//not found. fetch next page of groups
}
*/
PS - If running the above code gives you an error stating Could not find wrapper for "https", you need to uncomment/add the PHP extension extension=php_openssl.dll
Was looking into this and found this as first answer in google but the answer seems to be much of a hassle so I dug a bit deeper.
The fastest answer I've found which doesn't require iterating through all of the groups' members uses FQL.
SELECT gid, uid FROM group_member WHERE uid = (user id) AND gid = (group id)
This either returns an empty 'data' object, or a 'data' object with the UID and GID.
It also (from what I see so far) , doesn't require the user_groups permission.
https://developers.facebook.com/tools/explorer?fql=SELECT%20gid%2C%20uid%20FROM%20group_member%20WHERE%20uid%20%3D%20551549780%20AND%20gid%20%3D%20282374058542158
This FQL query returns for me:
{
"data": [
{
"gid": "282374058542158",
"uid": "551549780"
}
]
}
This doesn't seem to be possible after Graph API v2.4, because Facebook decided to disallow it:
https://developers.facebook.com/docs/apps/changelog#v2_4
"the user_groups permission has been deprecated. Developers may continue to use the user_managed_groups permission to access the groups a person is the administrator of. This information is still accessed via the /v2.4/{user_id}/groups edge which is still available in v2.4."
It also states "From October 6, 2015 onwards, in all previous API versions, these endpoints will return empty arrays." But it seems to me that it still works on v2.2 & v2.3.

Facebook GetMutualFriends Method failing for no clear reason

I've an application that runs on a webpage, it has a list of facebook id's and run through them checking if the logged user has any mutual friends with the id's on the list; for making this verificaton I'm using the Rest API with the friends.getMutualFriends metond, I'm using this method becasue in this way I can get the mutual friends without having both users authenticated, I just need the authentication for the origin userid, in the case of FQL or using the Graph API both users should be connected so that I can get the mutual friends, this is why the getMutualFriends method is so useful in this case. The problem that I'm having is that when I try to pull the mutual friends for a user that has a lot of friends then I get this error
"error_code": 18,
"error_msg": "This API call could not be completed due to resource limits",
if I try to do that with a user that has less frineds the in will work, I know that saying less or a lot is novet very accurate , so , lets take a look at this example, if I try to execute this call with a user that has 300 friends the call will work, but if I try to do that exact same thing with a user that has 700 friends it'll return back with the error that I put above, so I thought that it could be the amount of calls per second so I limited that but it did not worked, I tried resetting the app keys, I've tried with several differente users, I've tried to do it with a new application, and even if I just try make one call to compare 2 users it'll fail if the user has a large amout of friends, the code that I'm using for this is
function getMutualFriends($facebook, $uid1, $uid2)
{
try
{
$param = array(
'method' => 'friends.getMutualFriends',
'source_uid' => $uid1,
'target_uid' => $uid2,
'callback'=> ''
);
$mutualFriends = $facebook->api($param);
return $mutualFriends;
}
catch(Exception $o)
{
return serialize($o);
}
return null;
}
function getMutualFriendInfo($facebook, $uid1, $uid2)
{
$mutualfriends=getMutualFriends($facebook, $uid1, $uid2);
if (is_array($mutualfriends))//!=''))
{
$friend_uids = implode(",",$mutualfriends);
try
{
$param = array(
'method' => 'users.getInfo',
'uids' => $friend_uids,
'fields' => 'name,pic_square,pic_big',
'callback' => ''
);
$friend_info = $facebook->api($param);
return $friend_info;
}
catch (Exception $o)
{
return serialize($o);
}
}
return serialize($mutualfriends);
}
So my questions are, is there anything that I'm doing wrong on this cade so that it fails? Is there any othere way to do this besides the friends.GetMutualFriends method? I've already tried with this SELECT uid1 FROM friend WHERE uid2=[targetID] AND uid1 IN (SELECT uid2 FROM friend WHERE uid1=[sourceID]) but it did not worked. Is there any specific origin on this error?
I'm very confused because it works for some users and it doesn't for others, I've searched if there's any api limit but I've not found anything on that, there are no errors on the API dashboard, this code seemed to work before, and if I execute the call on the test console on facebook I'll get the same error,
Thanks for are your help, any idea will be appreciated.
There's a bug reported in facebook.
http://bugs.developers.facebook.net/show_bug.cgi?id=15644
firstly you should migrate from old rest api to new graph api.... because facebook will obsolete the old rest api soon.
secondly try this query
SELECT uid1 FROM friend WHERE uid2='your user id'
I hope that it will work