Retrieving posts and comments from a Facebook page - facebook

I want to retrieve all of the posts from a given facebook page along with the associated comments.
I wrote this code (app details obfuscated, replace with your own in order to run it).
<?php
require_once('facebook.php');
$facebook = new Facebook(array(
'appId' => 'MY_APP_ID',
'secret' => 'MY_APP_SECRET',
'cookie' => true,
));
$pages = array(
"stackoverflow" => 11239244970
);
$result = $facebook->api(array(
'method' => 'fql.multiquery',
'queries' => '{
"posts": "select post_id, source_id, actor_id, target_id, likes, message from stream where source_id = '.$pages["stackoverflow"].'",
"comments": "select post_id, text, username, fromid from comment where post_id in (select post_id from #posts)"
}'
));
echo json_encode($result);
?>
posts returns the expected results, but comments returns just one comment.
This example queries the stackoverflow facebook page
The comment returned from the comments query is "Joined!" (from this post). I can't figure out what's special about this comment.
Any thoughs?

I tried to find a solution playing with Graph Api
https://graph.facebook.com/me/fql?q=select message, comments from stream where source_id = 11239244970
is working but when returning comments it returns only the last 2. It's exaclty how Facebook itself shows the stream and comments with "View all XX comments" link.
To query the posts and comments together can be used:
https://graph.facebook.com/fql?q={"posts":"select post_id,message, comments from stream where source_id = 11239244970","comments": "select post_id, text, username from comment where post_id in (select post_id from #posts)"}&access_token=...
According to Facebook:
Each query of the stream table is limited to the previous 30 days or
50 posts, whichever is greater, however you can use time-specific
fields such as created_time along with FQL operators (such as < or >)
to retrieve a much greater range of posts.

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 )';

list users who like page or url

I need to list users who like specific url or at least facebook page
I tried using both PHP and https://api.facebook.com/method/fql.query
I can see the number of likers for the URL
$arr[1]['url'] = 'http://example.com/test/test3.php?ref=gametest&fb_ref=gametest&fb_source=gametest';
$arr[1]['object_id'] = '10150930574980642';
require_once("facebook.php");
$facebook = new Facebook(array(
'appId' => '325617367526193',
'secret' => '6c40e01dd717431c9b7ec6ce68bf0c94',
));
I used http://developers.facebook.com/docs/reference/fql/like/ example to form similar query
$query = <<<FQL
SELECT user_id FROM like WHERE object_id="10150930574980642"
FQL;
$fql_query_url = 'https://graph.facebook.com/fql?q=' . rawurlencode ( $query );
$fql_query_url .= '&access_token=' . rawurlencode ( $facebook->getAccessToken() );
but the resulting link gives no data at all
{
"data": [
]
}
The same result via link with or without access_token
api.facebook.com/method/fql.query?query=SELECT%20user_id%20FROM%20like%20WHERE%20object_id%3D%2210150930574980642%22
The "like" table will only return the IDs of users who like the following objects (video, note, link, photo, or album).
You cannot find out the user Ids of people who like a particular page, only objects within that page.
e.g. The likes for an album on the Facebook Page (SELECT user_id FROM like WHERE object_id="10150146071791729"&access_token=[access_token])
If you want to get the users that have liked a particular link, you will need to get the object_id of this link first:
https://api.facebook.com/method/fql.query?query=SELECT url,site,id FROM object_url WHERE url IN ('http://developers.facebook.com')
This will return the object_id of the link http://developers.facebook.com.

Facebook /me/home FQL equivalent

to get the functionality of I want for my app I need to start using FQL.
For the main stream I was using:-
$fb_news_feed = $facebook->api('/me/home');
what would be the equivelent in FQL that returns the same JSON. My current FQL is below
$fb_feed_params = array(
'method' => 'fql.query',
'query' => "SELECT post_id, actor_id, target_id, message, likes, created_time, type FROM stream WHERE filter_key = 'nf' AND is_hidden = 0 LIMIT 100",
);
$fb_news_feed = $facebook->api($fb_feed_params);
how do I get the users name etc? I'm guessing I would have to do some kind of join like you would in mysql??
This query should do it -
SELECT name, username, pic from user WHERE uid IN (SELECT actor_id FROM stream WHERE filter_key = 'nf' AND is_hidden = 0 LIMIT 100)
Alternatively you could look at doing a multiquery. More information on multiqueries can be found on the facebook developers site:
https://developers.facebook.com/docs/reference/rest/fql.multiquery/

facebook fan pages and related open graph objects

If exist a facebook fan page like this:
https://www.facebook.com/HuffingtonPost
I suppose to get likes count calling graph API:
https://graph.facebook.com/https://www.facebook.com/HuffingtonPost
Infact here I get:
{
"id": "https://www.facebook.com/HuffingtonPost",
"shares": 435839
}
On the other hand if I call
https://graph.facebook.com/HuffingtonPost
I get a more verbose output:
{
"id": "18468761129",
"name": "The Huffington Post",
"picture": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/188072_18468761129_6398033_s.jpg",
"link": "http://www.facebook.com/HuffingtonPost",
"likes": 435832,
"category": "Website",
"website": "http://www.facebook.com/HuffingtonPost",
"username": "HuffingtonPost",
"company_overview": "The Internet Newspaper\nNews | Blogs | Video | Community",
"description": "The Huffington Post - The Internet Newspaper. - Company Overview: The Internet Newspaper News | Blogs | Video | Community | Facebook",
[... omissis ...]
}
Can anybody tell me what's difference between these two opengraph objects?
There is also a slight difference between number of shares and likes. Why?
Update:
During last days graph api returned also object type, so I realized that:
First API call returns an link_stat type object.
Second API call returns a page type object.
In first case shares count should represent sum of:
number of likes of this URL
number of shares of this URL (this includes copy/pasting a link back to Facebook)
number of likes and comments on stories on Facebook about this URL
number of inbox messages containing this URL as an attachment.
In second case like count represents only itself
May somebody confirm me shares count correctness?
For the breakdown between likes, shares and comments (which are added up and used as the "likes" number on the likes button, you're better off using FQL.
If you use OG, something like http://graph.facebook.com/http://example.com will show you:
{
"id": "http://example.com",
"shares": 3
}
... as you've noted above. If you use FQL, you can get the breakdown of each.
<?php
// require the php sdk
require_once 'facebook-php-sdk/src/facebook.php';
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => 'YOUR_APP_ID',
'secret' => 'YOUR_APP_SECRET',
'cookie' => true,
));
$external_result = $facebook->api(array(
'method' => 'fql.query',
'query' => 'SELECT share_count, like_count, comment_count, total_count, click_count FROM link_stat WHERE url="http://example.com";'
));
echo '<li>'.number_format($external_result[0]['like_count']).' likes, '.number_format($external_result[0]['share_count']).' shares';
echo '<pre>';
print_r($external_result);
echo '</pre>';
?>
This will display something on-screen like:
* 1 likes, 2 shares
Array
(
[0] => Array
(
[share_count] => 2
[like_count] => 1
[comment_count] => 0
[total_count] => 3
[click_count] => 0
)
)
Also, SA now has a Facebook-specific site that may be helpful to you. :) facebook.stackoverflow.com
First one is something that tells you how many likes selected url have.
Using second one you will get information about Page Object through page identifier

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.