Facebook page_fan returning NULL, can't check if user likes page - facebook

I'm working on a Facebook app and I need to know if the user likes a specific page or not.
I tried using:
$isFan = $facebook->api(array(
"method" => "fql.query",
"query" => "SELECT uid FROM page_fan WHERE page_id = 'SOMEPAGEID'
AND uid = me()"
));
It returns NULL.
I even tried the javascript SDK:
FB.api('/me/likes/SOMEPAGEID', function(response) {
console.log(response.data);
});
It returns nothing.
I'm asking for the following permissions:
$scope = "email,user_likes";
Am I missing something?
Edit: SELECT * was bad copy-paste... it's SELECT uid

Your permissions look correct but I don't think that FQL queries actually support SELECT *, you have to manually list the fields
So try changing your FQL query to
select page_id from page_fan WHERE uid = me() AND page_id = PAGE_ID
Or it might be you haven't encoded your query properly. This runs for me in the graph explorer https://developers.facebook.com/tools/explorer?method=GET&path=fql%3Fq%3Dselect%2Bpage_id%2Bfrom%2Bpage_fan%2BWHERE%2Buid%2B%253D%2Bme%2528%2529
fql?q=select+page_id+from+page_fan+WHERE+uid+%3D+me%28%29
so try using
$isFan = $facebook->api('/fql?q='.urlencode('select page_id from page_fan WHERE uid = me() AND page_id = PAGE_ID'));

Related

facebook fql query album table not working with graph api php

$fql = 'SELECT name,aid,photo_count,owner FROM album WHERE owner='.$userId;
$fql = 'SELECT aid,owner,name FROM album WHERE owner IN
(SELECT uid1 FROM friend WHERE uid1 = 100002278102636 LIMIT 1 )';
I am using my codeigniter application to upload photo to an album which will be named current date.Creating album and all other uploads are working fine,but when i tried to select album name from album table using owner field its returning an empty array.But above query works fine with facebook test query widget
https://developers.facebook.com/tools/explorer?fql=SELECT%20aid%2Cowner%2Cname%20FROM%20album%20WHERE%20owner%3D100002278102636
i used API like this
$ret_obj1 = $this->facebook->api(array(
'method' => 'fql.query',
'query' => $fql,
));
what am i doing wrong...Thanks in advance
My guess is that this is a permission issue. To get these results, you need to be authenticated as a user and have the user_photos and friends_photos permission in your access token. If you don't, the FQL query will return a result and Facebook will filter that result out before it is given to your app, giving an empty data set.
The other possibility is your access token does not belong to user 100002278102636. If that is the case, then the friend subquery will fail.
Also, you should be using album_object_id now instead of aid. It appears that the aid field (and pid) will be removed in November.
Have you tried running your $fql query through urlencode? You'll notice that the one on facebooks graph explorer is encoded but yours is not
$ret_obj1 = $this->facebook->api(array(
'method' => 'fql.query',
'query' => urlencode($fql),
));
As an aside - this query:
$fql = 'SELECT aid,owner,name FROM album WHERE owner IN
(SELECT uid1 FROM friend WHERE uid1 = 100002278102636 LIMIT 1 )';
You are selecting uid1 WHERE uid1 = a known value? Why not just do
$fql = 'SELECT aid,owner,name FROM album WHERE owner = 100002278102636 )';

FQL Query to get people who like a page

I am new to Facebook development and I am playing around with some proof of concepts. How would I write a query to get a list of all my friends that like the U2 page?
I am thinking something like this.
var result = fb.Get("fql", new { q = "SELECT name FROM user WHERE uid IN (SELECT uid1 FROM friend WHERE uid2=me()) AND 'U2' IN like" });
also checkins
var result = fb.Get("fql", new { q = "SELECT checkin_id, author_uid, page_id FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND page_id IN (SELECT page_id FROM page WHERE name = 'MyPlace')" });
Also is there a query builder tool?
This should do it (example is with the PHP SDK (v3.x) )
$page_id = ID OF PAGE
$result = $facebook->api(array(
'method' => 'fql.multiquery',
'queries' => array(
'friends_liking_page' => 'SELECT uid, page_id FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND page_id = ' . $page_id,
'result' => 'SELECT uid, name, pic FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me() AND (uid2 IN (SELECT uid FROM #friends_liking_page)))'
)
));
you'll need user_likes and friends_likes permission

fql query fails - suspected auth issue

In a page, if I make a test fql query it works:
$fql = 'SELECT name from user where uid = ' . $user_id;
$ret_obj = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql,
));
echo '<pre>Name: ' . $ret_obj[0]['name'] . '</pre>';
However if I try to run this query, it fails:
$fql2 = 'SELECT uid, name, pic_square FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1 = me()) AND sex =male';
$ret_obj2 = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql2,
));
echo '<pre>Name: ' . $ret_obj2[0]['name'] . '</pre>';
I suspect it is an auth problem, because the same fql query works in the graph api test tool!
If you want to checkout the full php code, it's the second example on this page:
https://developers.facebook.com/docs/reference/php/facebook-api/
You need just basic permissions for this query, so this is not the issue. Try adding double quotes around "male":
$fql2 = 'SELECT uid, name, pic_square FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1 = me()) AND sex="male"';
Thanks for the support guys, the query wasn't working for 2 reasons:
1) I forgot the ; after the end of statement
2) In my code I used
`SELECT uid, name, pic_square, FROM`
instead of
`SELECT uid, name, pic_square FROM`

FQL page_fan query to filter results of only one page

I have a fql query like this:
SELECT uid,page_id,type,profile_section,created_time FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) ;
Is there any way to get only the results where page_id = XXXXXX?
Because the page_id is not indexable.. and i was hoping for a way to filter it.
I guess i found a great solution that works for me to get friends that are not pagefans.
$facebook_result = $this->facebook->api(array(
'method' => 'fql.multiquery',
'queries' => array(
'friends_liking_page' => 'SELECT uid, page_id FROM page_fan WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND page_id = ' . $page_id,
'result' => 'SELECT uid, name, pic FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me() AND NOT (uid2 IN (SELECT uid FROM #friends_liking_page)))'
)
));

Check if user is a fan of my Facebook app

How can I check thought the FB Javascript API if the current user is a fan of my app? I need to check this from within the page inserted into the FB's canvas IFRAME, throught the JS SDK...so that I can call a method of a local Flash, and do "something special" for that user.
In PHP, you can achieve this by using their PHP-SDK.
First you're gonna have to query their FQL database. Use the ff query (replace UID with the user's Id and PAGE_ID with your application's Id).
'SELECT uid, page_id FROM page_fan WHERE uid=UID AND page_id=PAGE_ID'
So your code might look like this:
$client = new Facebook(YOUR_PARAMS_HERE);
$result = $client->api(array(
'method' => 'fql.query',
'query' => 'SELECT uid, page_id, type FROM page_fan WHERE uid=1234 AND page_id=4321',
));
This returns an array similar to the ff:
array(
[0] = array(
[uid] = 1234
[page_id] = 4321
[type] = APPLICATION
)
)
FQL page_fan details here.