Hi guys! Today I'm going to post about this class I made for pulling data from your Facebook fan page. In this post we are going to pull data such as photo albums, photos, events, event members, videos and their corresponding likes and comments.
I previously posted about pulling Facebook photos, events and videos with separate but simple methods. Now this class (pull_fb.class.php), tries to work out all those functions in one with some newly added features.
I previously posted about pulling Facebook photos, events and videos with separate but simple methods. Now this class (pull_fb.class.php), tries to work out all those functions in one with some newly added features.
![]() |
Facebook Database - Facebook API - Your Website |
Some people says the old Facebook PHP SDK (2.1.2) don't work so I used the latest PHP SDK version 3.0.1 that can be downloaded on GitHub. And for this post, the you can download the code I used here:
Facebook Photos
For pulling Facebook albums and photos to website, this version has some new features which includes Facebook like count, comments, comments like count and pagination. Here's a sample code on how I used the PullFb class to achieve it.
Our index.php code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Photos From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div style='font-size: 16px; font-weight: bold; margin: 0 0 10px 0;'>
This demo is synchronized with this
<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=photos'>
Dummy Page Album
</a>
</div>
<?php
echo "<p>COAN Dummy Page Albums</p>";
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//pass your fan page id
$album_result = $pull_fb->getAlbums( '221167777906963' );
//loop through the albums
foreach( $album_result as $key => $value ){
if( trim( $key ) != 'pull_fb' ){ //because pull_fb is the settings for paging
//pass album cover photo id to get album cover image
$album_cover = $pull_fb->getAlbumCover( $value['cover_pid'] );
//display the album details
echo "<div class='object_item'>";
//album cover
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Cover Photo:</div>";
echo "<a href='show_photos.php?aid=" . $value['aid'] . "'>";
echo "<img src='$album_cover' border='1' width='400px'>";
echo "</a>";
echo "</div>";
//album name
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Name:</div>";
echo "<div class='val'>" . $value['name'] . "</div>";
echo "</div>";
//album date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Created Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y h:i:s A', $value['created'] ) . "</div>";
echo "</div>";
//description
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Description:</div>";
$description = empty( $value['description'] ) ? "N/A" : $value['description'];
echo "<div class='val'>" . $description . "</div>";
echo "</div>";
//where album photos were taken
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Location:</div>";
$location = empty( $value['location'] ) ? "N/A" : $value['location'];
echo "<div class='val'>" . $location . "</div>";
echo "</div>";
//link to facebook
echo "<div class='field_item'>";
echo "<div class='lbl'>Album FB Link:</div>";
echo "<div class='val'><a href='" . $value['link'] . "' target='_blank'>Click Here!</a></div>";
echo "</div>";
//how many photos in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Photo Count:</div>";
echo "<div class='val'>" . $value['photo_count'] . "</div>";
echo "</div>";
//videos included in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Video Count:</div>";
echo "<div class='val'>" . $value['video_count'] . "</div>";
echo "</div>";
//number of likes
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Like Count:</div>";
echo "<div class='val'>" . $value['like_info']['like_count'] . " people like this album</div>";
echo "</div>";
//number of comments
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Comment Count:</div>";
echo "<div class='val'>" . $value['comment_info']['comment_count'] . " comments</div>";
//pass the album object id to get comments
$comments_result = $pull_fb->getComments( $value['object_id'] );
//loop through comments
foreach( $comments_result as $key => $value ){
//you can set values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>"; //end object_item
echo "<div style='clear:both;'></div>";
}
}
//paging here
//show the page buttons based on the settings returned from getAlbums()
echo "<div style='font-size:24px;'>";
//paging here
if( $value['prev_button'] ){
echo "<a href='index.php?page=1'>◄◄ First</a> ";
echo "<a href='index.php?page={$value['prev_page']}'>◄ Previous</a> ";
}
if( $value['next_button'] ){
echo "<a href='index.php?page={$value['next_page']}'>Next ►</a> ";
echo "<a href='index.php?page={$value['last_page']}'>Last ►►</a>";
}
echo "</div>";
?>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Photos From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div style='font-size: 16px; font-weight: bold; margin: 0 0 10px 0;'>
This demo is synchronized with this
<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=photos'>
Dummy Page Album
</a>
</div>
<?php
echo "<p>COAN Dummy Page Albums</p>";
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//pass your fan page id
$album_result = $pull_fb->getAlbums( '221167777906963' );
//loop through the albums
foreach( $album_result as $key => $value ){
if( trim( $key ) != 'pull_fb' ){ //because pull_fb is the settings for paging
//pass album cover photo id to get album cover image
$album_cover = $pull_fb->getAlbumCover( $value['cover_pid'] );
//display the album details
echo "<div class='object_item'>";
//album cover
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Cover Photo:</div>";
echo "<a href='show_photos.php?aid=" . $value['aid'] . "'>";
echo "<img src='$album_cover' border='1' width='400px'>";
echo "</a>";
echo "</div>";
//album name
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Name:</div>";
echo "<div class='val'>" . $value['name'] . "</div>";
echo "</div>";
//album date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Created Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y h:i:s A', $value['created'] ) . "</div>";
echo "</div>";
//description
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Description:</div>";
$description = empty( $value['description'] ) ? "N/A" : $value['description'];
echo "<div class='val'>" . $description . "</div>";
echo "</div>";
//where album photos were taken
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Location:</div>";
$location = empty( $value['location'] ) ? "N/A" : $value['location'];
echo "<div class='val'>" . $location . "</div>";
echo "</div>";
//link to facebook
echo "<div class='field_item'>";
echo "<div class='lbl'>Album FB Link:</div>";
echo "<div class='val'><a href='" . $value['link'] . "' target='_blank'>Click Here!</a></div>";
echo "</div>";
//how many photos in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Photo Count:</div>";
echo "<div class='val'>" . $value['photo_count'] . "</div>";
echo "</div>";
//videos included in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Video Count:</div>";
echo "<div class='val'>" . $value['video_count'] . "</div>";
echo "</div>";
//number of likes
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Like Count:</div>";
echo "<div class='val'>" . $value['like_info']['like_count'] . " people like this album</div>";
echo "</div>";
//number of comments
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Comment Count:</div>";
echo "<div class='val'>" . $value['comment_info']['comment_count'] . " comments</div>";
//pass the album object id to get comments
$comments_result = $pull_fb->getComments( $value['object_id'] );
//loop through comments
foreach( $comments_result as $key => $value ){
//you can set values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>"; //end object_item
echo "<div style='clear:both;'></div>";
}
}
//paging here
//show the page buttons based on the settings returned from getAlbums()
echo "<div style='font-size:24px;'>";
//paging here
if( $value['prev_button'] ){
echo "<a href='index.php?page=1'>◄◄ First</a> ";
echo "<a href='index.php?page={$value['prev_page']}'>◄ Previous</a> ";
}
if( $value['next_button'] ){
echo "<a href='index.php?page={$value['next_page']}'>Next ►</a> ";
echo "<a href='index.php?page={$value['last_page']}'>Last ►►</a>";
}
echo "</div>";
?>
</body>
</html>
Our show_photos.php code
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Data From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div style='font-size: 16px; font-weight: bold; margin: 0 0 10px 0;'>
This demo is synchronized with this
<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=photos'>
Dummy Page Album
</a>
</div>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//get album id from the url
$album_id = empty( $_REQUEST['aid'] ) ? die( "Album ID cannot be empty" ) : $_REQUEST['aid'];
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//get the album name based on album id
$album_name = $pull_fb->getAlbumName( $album_id );
//provide link to albums
echo "<div><a href='http://demo.codeofaninja.com/tutorials/pull-facebook-data/'>Back To Albums</a> | Album Name: <b>" . $album_name . "</b></div>";
//get photos of the album
$photos_result = $pull_fb->getPhotos( $album_id );
//loop through the photos
foreach( $photos_result as $key => $value ){
if( trim( $key ) != 'pull_fb' ){ //because pull_fb is the settings
//set caption to 'None.' if no caption was set
$caption = !empty( $value['caption'] ) ? $value['caption'] : "None.";
//display the photo details
echo "<div class='object_item'>";
//the photo
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Photo:</div>";
echo "<a href=\"" . $value['src_big'] . "\" title=\"" . $caption . "\" rel='lightbox'>";
echo "<img src='" . $value['src_big'] . "' border='1' width='400px' />";
echo "</a>";
echo "</div>";
//caption
echo "<div class='field_item'>";
echo "<div class='lbl'>Photo ID:</div>";
echo "<div class='val'>" . $value['pid'] . "</div>";
echo "</div>";
//caption
echo "<div class='field_item'>";
echo "<div class='lbl'>Caption:</div>";
echo "<div class='val'>" . $caption . "</div>";
echo "</div>";
//date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Created Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['created'] ) . "</div>";
echo "</div>";
//date modified
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Modified Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['modified'] ) . "</div>";
echo "</div>";
//photo position in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Photo Position:</div>";
echo "<div class='val'>" . $value['position'] . "</div>";
echo "</div>";
//link to facebook
echo "<div class='field_item'>";
echo "<div class='lbl'>Album FB Link:</div>";
echo "<div class='val'>";
echo "<a href='" . $value['link'] . "' target='_blank'>Click Here!</a>";
echo "</div>";
echo "</div>";
//number of likes
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Like Count:</div>";
echo "<div class='val'>" . $value['like_info']['like_count'] . " people like this</div>";
echo "</div>";
//number of comments
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Comment Count:</div>";
echo "<div class='val'>" . $value['comment_info']['comment_count'] . " comments</div>";
//pass the object id to get comments of this photo
$comments_result = $pull_fb->getComments( $value['object_id'] );
//loop through retrieved comments
foreach( $comments_result as $key => $value ){
//you can set the values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>";
}
}
//paging here
//show the page buttons based on the settings returned from getPhotos()
echo "<div style='font-size:24px;'>";
if( $value['prev_button'] ){
echo "<a href='show_photos.php?aid={$_GET['aid']}&page=1'>◄◄ First</a> ";
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['prev_page']}'>◄ Previous</a> ";
}
if( $value['next_button'] ){
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['next_page']}'>Next ►</a> ";
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['last_page']}'>Last ►►</a>";
}
echo "</div>";
?>
<!-- START JLIGHTBOX -->
<link rel="stylesheet" type="text/css" href="jQuery-lightbox/css/jquery.lightbox-0.5.css" media="screen" />
<script type="text/javascript" src="jQuery-lightbox/js/jquery.js"></script>
<script type="text/javascript" src="jQuery-lightbox/js/jquery.lightbox-0.5.js"></script>
<script type="text/javascript">
$(function() {
$('a[@rel*=lightbox]').lightBox(); // Select all links that contains lightbox in the attribute rel
});
</script>
<!-- END JLIGHTBOX -->
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Data From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div style='font-size: 16px; font-weight: bold; margin: 0 0 10px 0;'>
This demo is synchronized with this
<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=photos'>
Dummy Page Album
</a>
</div>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//get album id from the url
$album_id = empty( $_REQUEST['aid'] ) ? die( "Album ID cannot be empty" ) : $_REQUEST['aid'];
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//get the album name based on album id
$album_name = $pull_fb->getAlbumName( $album_id );
//provide link to albums
echo "<div><a href='http://demo.codeofaninja.com/tutorials/pull-facebook-data/'>Back To Albums</a> | Album Name: <b>" . $album_name . "</b></div>";
//get photos of the album
$photos_result = $pull_fb->getPhotos( $album_id );
//loop through the photos
foreach( $photos_result as $key => $value ){
if( trim( $key ) != 'pull_fb' ){ //because pull_fb is the settings
//set caption to 'None.' if no caption was set
$caption = !empty( $value['caption'] ) ? $value['caption'] : "None.";
//display the photo details
echo "<div class='object_item'>";
//the photo
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Photo:</div>";
echo "<a href=\"" . $value['src_big'] . "\" title=\"" . $caption . "\" rel='lightbox'>";
echo "<img src='" . $value['src_big'] . "' border='1' width='400px' />";
echo "</a>";
echo "</div>";
//caption
echo "<div class='field_item'>";
echo "<div class='lbl'>Photo ID:</div>";
echo "<div class='val'>" . $value['pid'] . "</div>";
echo "</div>";
//caption
echo "<div class='field_item'>";
echo "<div class='lbl'>Caption:</div>";
echo "<div class='val'>" . $caption . "</div>";
echo "</div>";
//date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Created Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['created'] ) . "</div>";
echo "</div>";
//date modified
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Modified Date:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['modified'] ) . "</div>";
echo "</div>";
//photo position in the album
echo "<div class='field_item'>";
echo "<div class='lbl'>Photo Position:</div>";
echo "<div class='val'>" . $value['position'] . "</div>";
echo "</div>";
//link to facebook
echo "<div class='field_item'>";
echo "<div class='lbl'>Album FB Link:</div>";
echo "<div class='val'>";
echo "<a href='" . $value['link'] . "' target='_blank'>Click Here!</a>";
echo "</div>";
echo "</div>";
//number of likes
echo "<div class='field_item'>";
echo "<div class='lbl'>Album Like Count:</div>";
echo "<div class='val'>" . $value['like_info']['like_count'] . " people like this</div>";
echo "</div>";
//number of comments
echo "<div class='field_item' style='height:auto;'>";
echo "<div class='lbl'>Album Comment Count:</div>";
echo "<div class='val'>" . $value['comment_info']['comment_count'] . " comments</div>";
//pass the object id to get comments of this photo
$comments_result = $pull_fb->getComments( $value['object_id'] );
//loop through retrieved comments
foreach( $comments_result as $key => $value ){
//you can set the values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>";
}
}
//paging here
//show the page buttons based on the settings returned from getPhotos()
echo "<div style='font-size:24px;'>";
if( $value['prev_button'] ){
echo "<a href='show_photos.php?aid={$_GET['aid']}&page=1'>◄◄ First</a> ";
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['prev_page']}'>◄ Previous</a> ";
}
if( $value['next_button'] ){
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['next_page']}'>Next ►</a> ";
echo "<a href='show_photos.php?aid={$_GET['aid']}&page={$value['last_page']}'>Last ►►</a>";
}
echo "</div>";
?>
<!-- START JLIGHTBOX -->
<link rel="stylesheet" type="text/css" href="jQuery-lightbox/css/jquery.lightbox-0.5.css" media="screen" />
<script type="text/javascript" src="jQuery-lightbox/js/jquery.js"></script>
<script type="text/javascript" src="jQuery-lightbox/js/jquery.lightbox-0.5.js"></script>
<script type="text/javascript">
$(function() {
$('a[@rel*=lightbox]').lightBox(); // Select all links that contains lightbox in the attribute rel
});
</script>
<!-- END JLIGHTBOX -->
</body>
</html>
Facebook Events
For pulling Facebook events, it features pulling the event members and their corresponding RSVP status. As for the paging, maybe you can do the same approach I used in pulling Facebook albums and photos.
Our show_events.php code:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Events From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//we have to set timezone to California
date_default_timezone_set('America/Los_Angeles');
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//just a heading
echo "<div style='font-weight: bold; margin: 0 0 20px 0;'>";
echo "This event list is synchronized with this ";
echo "<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=events'>";
echo "COAN Dummy Page Events</a></div>";
//pass your fan page id
$event_result = $pull_fb->getEvents( '221167777906963' );
//looping through retrieved data
foreach( $event_result as $key => $value ){
//see here http://php.net/manual/en/function.date.php for the date format I used
//The pattern string I used 'l, F d, Y g:i a'
//will output something like this: July 30, 2015 6:30 pm
//getting 'start' and 'end' date,
//'l, F d, Y' pattern string will give us
//something like: Thursday, July 30, 2015
$start_date = date( 'l, F d, Y', $value['start_time'] );
$end_date = date( 'l, F d, Y', $value['end_time'] );
//getting 'start' and 'end' time
//'g:i a' will give us something
//like 6:30 pm
$start_time = date( 'g:i a', $value['start_time'] );
$end_time = date( 'g:i a', $value['end_time'] );
//display the album details
echo "<div class='object_item'>";
//event image
echo "<div style='float: left; margin: 0 8px 0 0;'>";
echo "<img src={$value['pic_big']} />";
echo "</div>";
echo "<div style='float: left;'>";
//event name
echo "<div class='field_item'>";
echo "<div class='val' style='font-size: 26px'>";
echo "<a href='https://www.facebook.com/events/{$value['eid']}/' target='_blank'>";
echo $value['name'];
echo "</a>";
echo "</div>";
echo "</div>";
//event date / time
echo "<div class='field_item'>";
echo "<div class='val'>";
if( $start_date == $end_date ){
//if $start_date and $end_date is the same
//it means the event will happen on the same day
//so we will have a format something like:
//July 30, 2015 - 6:30 pm to 9:30 pm
echo "on {$start_date} - {$start_time} to {$end_time}";
}else{
//else if $start_date and $end_date is NOT the equal
//it means that the event will will be
//extended to another day
//so we will have a format something like:
//July 30, 2013 9:00 pm to Wednesday, July 31, 2013 at 1:00 am
echo "on {$start_date} {$start_time} to {$end_date} at {$end_time}";
}
echo "</div>";
echo "</div>";
//event location
echo "<div class='field_item'>";
echo "<div class='lbl'>Location:</div>";
echo "<div class='val'>" . $value['location'] . "</div>";
echo "</div>";
//event description
echo "<div class='field_item'>";
echo "<div class='lbl'>More Info:</div>";
echo "<div class='val'>" . $value['description'] . "</div>";
echo "</div>";
echo "<div style='clear: both'></div>";
//get people invited to the event
$event_members = $pull_fb->getEventMembers( $value['eid'] );
//loop through event members
foreach( $event_members as $event_member ){
//get profile pic and name of the event member
$result = $pull_fb->getProfileDetails( $event_member['uid'] );
$pic_square = $result[0]['pic_square'];
$name = $result[0]['name'];
//display event member details
echo "<div style='padding:8px 0; text-align:left;'>";
//small square profile pic
echo "<div style='float:left; width:40px;'>";
echo "<img src='{$pic_square}' width='30px' height='30px' />";
echo "</div>";
//provide link to event member profile
echo "<div>Name: ";
echo "<a href='https://www.facebook.com/profile.php?id={$event_member['uid']}' target='_blank'>";
echo $name;
echo "</a>";
echo "</div>";
//rsvp status
echo "<div>RSVP Status: {$event_member['rsvp_status']}</div>";
echo "</div>";
}
echo "</div>";
echo "<div style='clear: both'></div>";
echo "</div>";
}
?>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Events From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//we have to set timezone to California
date_default_timezone_set('America/Los_Angeles');
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//just a heading
echo "<div style='font-weight: bold; margin: 0 0 20px 0;'>";
echo "This event list is synchronized with this ";
echo "<a href='https://www.facebook.com/pages/COAN-Dummy-Page/221167777906963?sk=events'>";
echo "COAN Dummy Page Events</a></div>";
//pass your fan page id
$event_result = $pull_fb->getEvents( '221167777906963' );
//looping through retrieved data
foreach( $event_result as $key => $value ){
//see here http://php.net/manual/en/function.date.php for the date format I used
//The pattern string I used 'l, F d, Y g:i a'
//will output something like this: July 30, 2015 6:30 pm
//getting 'start' and 'end' date,
//'l, F d, Y' pattern string will give us
//something like: Thursday, July 30, 2015
$start_date = date( 'l, F d, Y', $value['start_time'] );
$end_date = date( 'l, F d, Y', $value['end_time'] );
//getting 'start' and 'end' time
//'g:i a' will give us something
//like 6:30 pm
$start_time = date( 'g:i a', $value['start_time'] );
$end_time = date( 'g:i a', $value['end_time'] );
//display the album details
echo "<div class='object_item'>";
//event image
echo "<div style='float: left; margin: 0 8px 0 0;'>";
echo "<img src={$value['pic_big']} />";
echo "</div>";
echo "<div style='float: left;'>";
//event name
echo "<div class='field_item'>";
echo "<div class='val' style='font-size: 26px'>";
echo "<a href='https://www.facebook.com/events/{$value['eid']}/' target='_blank'>";
echo $value['name'];
echo "</a>";
echo "</div>";
echo "</div>";
//event date / time
echo "<div class='field_item'>";
echo "<div class='val'>";
if( $start_date == $end_date ){
//if $start_date and $end_date is the same
//it means the event will happen on the same day
//so we will have a format something like:
//July 30, 2015 - 6:30 pm to 9:30 pm
echo "on {$start_date} - {$start_time} to {$end_time}";
}else{
//else if $start_date and $end_date is NOT the equal
//it means that the event will will be
//extended to another day
//so we will have a format something like:
//July 30, 2013 9:00 pm to Wednesday, July 31, 2013 at 1:00 am
echo "on {$start_date} {$start_time} to {$end_date} at {$end_time}";
}
echo "</div>";
echo "</div>";
//event location
echo "<div class='field_item'>";
echo "<div class='lbl'>Location:</div>";
echo "<div class='val'>" . $value['location'] . "</div>";
echo "</div>";
//event description
echo "<div class='field_item'>";
echo "<div class='lbl'>More Info:</div>";
echo "<div class='val'>" . $value['description'] . "</div>";
echo "</div>";
echo "<div style='clear: both'></div>";
//get people invited to the event
$event_members = $pull_fb->getEventMembers( $value['eid'] );
//loop through event members
foreach( $event_members as $event_member ){
//get profile pic and name of the event member
$result = $pull_fb->getProfileDetails( $event_member['uid'] );
$pic_square = $result[0]['pic_square'];
$name = $result[0]['name'];
//display event member details
echo "<div style='padding:8px 0; text-align:left;'>";
//small square profile pic
echo "<div style='float:left; width:40px;'>";
echo "<img src='{$pic_square}' width='30px' height='30px' />";
echo "</div>";
//provide link to event member profile
echo "<div>Name: ";
echo "<a href='https://www.facebook.com/profile.php?id={$event_member['uid']}' target='_blank'>";
echo $name;
echo "</a>";
echo "</div>";
//rsvp status
echo "<div>RSVP Status: {$event_member['rsvp_status']}</div>";
echo "</div>";
}
echo "</div>";
echo "<div style='clear: both'></div>";
echo "</div>";
}
?>
</body>
</html>
Facebook Videos
For pulling Facebook videos, it features pulling the comments and likes. As for the paging, maybe you can do the same approach I used in pulling Facebook albums and photos.
Our show_videos.php code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Videos From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class='page_title'>
These videos are synchronized with this
<a href='https://www.facebook.com/video/?id=221167777906963' target='_blank'>
Dummy Page Videos
</a>
</div>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//pass your fan page id
$videos_result = $pull_fb->getVideos( '221167777906963' );
//loop through each videos
foreach( $videos_result as $keys => $value ){
//display video details
echo "<div class='object_item'>";
//video embed html
echo $value['embed_html'];
//video title
echo "<div class='field_item'>";
echo "<div class='lbl'>Title:</div>";
echo "<div class='val'>" . $value['title'] . "</div>";
echo "</div>";
//date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Date Created:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['created_time'] ) . "</div>";
echo "</div>";
//video description
echo "<div class='field_item'>";
echo "<div class='lbl'>Description:</div>";
echo "<div class='val'>" . $value['description'] . "</div>";
echo "</div>";
//fb link to video
echo "<div class='field_item'>";
echo "<div class='lbl'>FB Link:</div>";
echo "<div class='val'><a href='" . $value['link'] . "' target='_blank'>Click Here!</a></div>";
echo "</div>";
echo "<div class='field_item' style='height:auto;'>";
//vid is the object id of video, pass to get the comments
$comments_result = $pull_fb->getComments( $value['vid'] );
//loop through comments
foreach( $comments_result as $key => $value ){
//you can set values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>";
echo "</div>";
}
?>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>The Code Of A Ninja - Pull Videos From Facebook</title>
<link href="http://demo.codeofaninja.com/images/favicon.ico" rel="SHORTCUT ICON">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class='page_title'>
These videos are synchronized with this
<a href='https://www.facebook.com/video/?id=221167777906963' target='_blank'>
Dummy Page Videos
</a>
</div>
<?php
//get page number
//if page num was not set, default to page 1
$page_num = isset( $_GET['page'] ) ? $_GET['page'] : 1;
//include our class
include 'pull_fb.class.php';
//pass appId, appSecret, and page number
$pull_fb = new PullFb( 'change_to_your_app_id', 'change_to_your_app_secret', $page_num );
//pass your fan page id
$videos_result = $pull_fb->getVideos( '221167777906963' );
//loop through each videos
foreach( $videos_result as $keys => $value ){
//display video details
echo "<div class='object_item'>";
//video embed html
echo $value['embed_html'];
//video title
echo "<div class='field_item'>";
echo "<div class='lbl'>Title:</div>";
echo "<div class='val'>" . $value['title'] . "</div>";
echo "</div>";
//date created
echo "<div class='field_item'>";
echo "<div class='lbl'>Date Created:</div>";
echo "<div class='val'>" . date( 'l, F d, Y', $value['created_time'] ) . "</div>";
echo "</div>";
//video description
echo "<div class='field_item'>";
echo "<div class='lbl'>Description:</div>";
echo "<div class='val'>" . $value['description'] . "</div>";
echo "</div>";
//fb link to video
echo "<div class='field_item'>";
echo "<div class='lbl'>FB Link:</div>";
echo "<div class='val'><a href='" . $value['link'] . "' target='_blank'>Click Here!</a></div>";
echo "</div>";
echo "<div class='field_item' style='height:auto;'>";
//vid is the object id of video, pass to get the comments
$comments_result = $pull_fb->getComments( $value['vid'] );
//loop through comments
foreach( $comments_result as $key => $value ){
//you can set values to variables
$text = $value['text'];
$time = date( 'l, F d, Y h:i:s A', $value['time'] );
$fromid = $value['fromid'];
$likes = $value['likes'];
//get commenter's name by passing pass fromid
$profile_name = $pull_fb->getProfileName( $fromid );
//display the comment details
echo "<div style='display:block; text-align:left; float:left; border-bottom:thin solid blue; width:100%;'>";
echo "<div>";
//provide link to commenter's profile
echo "<a href='https://www.facebook.com/profile.php?id={$fromid}' target='_blank'>";
echo "{$profile_name}";
echo "</a>";
echo " says:";
echo "</div>";
//display comment
echo "<div style='font-style:italic;'>{$text}</div>";
//the time and number of likes of the comment
echo "<div>{$time} | {$likes} people liked this comment</div>";
echo "</div>";
}
echo "<div style='clear:both;'></div>";
echo "</div>";
echo "</div>";
echo "</div>";
}
?>
</body>
</html>
June 9, 2012 Update: Display Facebook Feed on Website
PullFB Class
Now here's the code of our class pull_fb.class.php
<?php
require 'fb-sdk/src/facebook.php';
class PullFb{
//set properties
public $facebook;
public $page_num;
//number of items you want to see per page
//you can add for other objects such as videos, etc.
public $albums_per_page = 2;
public $photos_per_page = 4;
//if you want to exclude some albums like the Profile Pictures and Wall Photos, do something like:
//$excluded_albums = "AND name <> 'Profile Pictures' AND name <> 'Wall Photos'";
//in my example, I'm gonna exclude the wall photos only
public $excluded_albums = "AND name <> 'Wall Photos'";
//same with excluding photos, just state the pid
public $excluded_photos = "AND pid <> '221167777906963_1513599' AND pid <> '221167777906963_1513596'";
public function __construct( $appId, $secret, $page_num ){
//create facebook instance
$this->facebook = new Facebook(array(
'appId' => $appId,
'secret' => $secret,
'cookie' => true, // enable optional cookie support
));
//for the page number
$this->page_num = $page_num;
}
//this will get facebook albums based on the $owner or fan page id
public function getAlbums( $owner ){
//we have to get the total number of albums first
//i don't know why the count function is not working
$fql = "SELECT aid FROM album WHERE owner = {$owner} {$this->excluded_albums}";
//calculatePaging() will give us the paging settings
//pass the fql and type of object
$settings = $this->calculatePaging( $fql, 'album' );
//get start and end limit for the next fql query
$start_limit = $settings['start_limit'];
$end_limit = $settings['end_limit'];
//in this query we will include the paging based on the page number
$fql = "SELECT
aid, object_id, owner, cover_pid, cover_object_id, name, created, modified,
description, location, size, link, visible, modified_major, edit_link,
type, can_upload, photo_count, video_count,
like_info, comment_info
FROM
album
WHERE
owner = {$owner} {$this->excluded_albums}
LIMIT
{$start_limit}, {$end_limit}";
//set params
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
//we will include the settings to our result variable
$result['pull_fb'] = $settings;
return $result;
}
//this function was made for paging
public function calculatePaging( $fql, $type ){
//set the params based on passed fql
//to count the total number of records
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
//get the total number of items
$number_of_items = count( $result );
//we will have the following calculations for the pagination
//we just need some simple math
//decide how many albums to show per page
//values was actually declared as class property
//you can easily add for other types of object
if( $type == 'album' ){
$items_per_page = $this->albums_per_page;
}else if( $type == 'photo' ){
$items_per_page = $this->photos_per_page;
}
//this is the current page
$curr_page = $this->page_num;
//previous page will be the current page MINUS one
$prev_page = $curr_page - 1;
//next page will be the current page PLUS one
$next_page = $curr_page + 1;
//no need to calculate for the first page, obviously, it's 1
//calculate last page
$last_page = round( $number_of_items / $items_per_page );
//detect if prev button will be visible
if( $curr_page != 1 ){
$prev_button = true;
}
//get $albums_shown value
//it is the number of photos from the first page up to the current page
$items_shown = $items_per_page * $curr_page;
//detect if next button will be visible
//if the $number_of_albums were still higher than the $albums_shown, show the next page button,
//but if they are equal, don't show the next page button
if( $number_of_items > $items_shown ){
$next_button = true;
}
//get start limit for the fql query
$start_limit = $items_per_page * $prev_page;
//get end limit
//i'm not sure why i had to + 1, maybe it's a facebook bug?
$end_limit = $items_per_page + 1;
//these are the values or settings returned
//i made it to an array
$settings = array(
'number_of_items' => $number_of_items,
'prev_page' => $prev_page,
'next_page' => $next_page,
'prev_button' => $prev_button,
'next_button' => $next_button,
'start_limit' => $start_limit,
'end_limit' => $end_limit,
'last_page' => $last_page
);
return $settings;
}
//to get photos of an album, we have to pass the album id
public function getPhotos( $album_id ){
//we have to get total number of photos first
//i don't know why the count function is not working
$fql = "SELECT object_id FROM photo WHERE aid = '" . $album_id ."' ORDER BY position DESC";
//calculatePaging() will give us the paging settings
//pass the fql and type of object, this is 'photo'
$settings = $this->calculatePaging( $fql, 'photo' );
//get start and end limit for the next fql query
$start_limit = $settings['start_limit'];
$end_limit = $settings['end_limit'];
//query the photos
$fql = "SELECT
object_id, pid, src_small, src, src_big, link, caption, created, modified, position, like_info, comment_info
FROM
photo
WHERE
aid = '" . $album_id ."' {$this->excluded_photos}
ORDER BY
position DESC
LIMIT
{$start_limit}, {$end_limit}";
//set the parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get photos recordset
$result = $this->facebook->api( $params );
//add the settings to the result
$result['pull_fb'] = $settings;
return $result;
}
//to get album cover, you need to pass the cover_id or id of the photo
public function getAlbumCover( $cover_pid ){
//get album cover query
$fql = "select src_big from photo where pid = '" . $cover_pid . "'";
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//run the query
$result = $this->facebook->api( $params );
//the the value and return it
$value = $result[0]['src_big'];
return $value;
}
//to get comments, you need to pass the object id, it can be a video, photo, album etc
//check the fql tables to know object id https://developers.facebook.com/docs/reference/fql/
public function getComments( $object_id ){
//query the comment
$fql = "SELECT
text, time, fromid, likes
FROM
comment
WHERE
object_id = " . $object_id;
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
return $result;
}
//to get profile name, you need to pass fromid or the profile id
public function getProfileName( $fromid ){
//query commenter / profile name
$fql = "SELECT
name
FROM
profile
WHERE
id = " . $fromid;
//set the paramters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get the resulting value
$result = $this->facebook->api( $params );
$value = $result[0]['name'];
return $value;
}
//this time we will just get the profile name and profile thumbnail
public function getProfileDetails( $fromid ){
//select name and pic_square which can be used as profile thumbnail
$fql = "SELECT
name, pic_square
FROM
profile
WHERE
id = " . $fromid;
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get and return the result
$result = $this->facebook->api( $params );
return $result;
}
//to get album name, pass the album id
public function getAlbumName( $aid ){
//query album name
$fql = "SELECT
name
FROM
album
WHERE
aid = '{$aid}'";
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//return result value for album name
$result = $this->facebook->api( $params );
$value = $result[0]['name'];
return $value;
}
//to get events, pass the uid or you fan page id
public function getEvents( $uid ){
//query the events
//we will eid, name, pic_big, start_time, end_time, location, description this time
//but there are other data that you can get on the event table (https://developers.facebook.com/docs/reference/fql/event/)
//as you've noticed, we have TWO select statement here
//since we can't just do "WHERE creator = your_fan_page_id".
//only eid is indexable in the event table, so we have to retrieve
//list of events by eids
//and this was achieved by selecting all eid from
//event_member table where the uid is the id of your fanpage.
//*yes, you fanpage automatically becomes an event_member
//once it creates an event
$fql = "SELECT
eid, name, pic_big, start_time, end_time, location, description
FROM
event
WHERE
eid IN ( SELECT eid FROM event_member WHERE uid = {$uid} )
ORDER BY start_time asc";
//set parameters
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset and retur results
$result = $this->facebook->api($param);
return $result;
}
//this function will get the profile invited to the event
//pass eid or event id
public function getEventMembers( $eid ){
//query the members
$fql = "SELECT
eid, uid, rsvp_status
FROM
event_member
where eid = {$eid}";
//set params
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get result and return it
$result = $this->facebook->api( $param );
return $result;
}
//get the videos
//pass the owner or the fan page id
public function getVideos( $owner ){
//query to get videos
//specify you fan page id, I got 221167777906963
//you can also use the LIMIT clause here if you want to show limited number of videos only
$fql = "SELECT
vid, owner, title, description, thumbnail_link,
embed_html, updated_time, created_time, link
FROM
video
WHERE owner={$owner}";
//set parameters
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset and return it
$result = $this->facebook->api($param);
return $result;
}
}
?>
require 'fb-sdk/src/facebook.php';
class PullFb{
//set properties
public $facebook;
public $page_num;
//number of items you want to see per page
//you can add for other objects such as videos, etc.
public $albums_per_page = 2;
public $photos_per_page = 4;
//if you want to exclude some albums like the Profile Pictures and Wall Photos, do something like:
//$excluded_albums = "AND name <> 'Profile Pictures' AND name <> 'Wall Photos'";
//in my example, I'm gonna exclude the wall photos only
public $excluded_albums = "AND name <> 'Wall Photos'";
//same with excluding photos, just state the pid
public $excluded_photos = "AND pid <> '221167777906963_1513599' AND pid <> '221167777906963_1513596'";
public function __construct( $appId, $secret, $page_num ){
//create facebook instance
$this->facebook = new Facebook(array(
'appId' => $appId,
'secret' => $secret,
'cookie' => true, // enable optional cookie support
));
//for the page number
$this->page_num = $page_num;
}
//this will get facebook albums based on the $owner or fan page id
public function getAlbums( $owner ){
//we have to get the total number of albums first
//i don't know why the count function is not working
$fql = "SELECT aid FROM album WHERE owner = {$owner} {$this->excluded_albums}";
//calculatePaging() will give us the paging settings
//pass the fql and type of object
$settings = $this->calculatePaging( $fql, 'album' );
//get start and end limit for the next fql query
$start_limit = $settings['start_limit'];
$end_limit = $settings['end_limit'];
//in this query we will include the paging based on the page number
$fql = "SELECT
aid, object_id, owner, cover_pid, cover_object_id, name, created, modified,
description, location, size, link, visible, modified_major, edit_link,
type, can_upload, photo_count, video_count,
like_info, comment_info
FROM
album
WHERE
owner = {$owner} {$this->excluded_albums}
LIMIT
{$start_limit}, {$end_limit}";
//set params
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
//we will include the settings to our result variable
$result['pull_fb'] = $settings;
return $result;
}
//this function was made for paging
public function calculatePaging( $fql, $type ){
//set the params based on passed fql
//to count the total number of records
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
//get the total number of items
$number_of_items = count( $result );
//we will have the following calculations for the pagination
//we just need some simple math
//decide how many albums to show per page
//values was actually declared as class property
//you can easily add for other types of object
if( $type == 'album' ){
$items_per_page = $this->albums_per_page;
}else if( $type == 'photo' ){
$items_per_page = $this->photos_per_page;
}
//this is the current page
$curr_page = $this->page_num;
//previous page will be the current page MINUS one
$prev_page = $curr_page - 1;
//next page will be the current page PLUS one
$next_page = $curr_page + 1;
//no need to calculate for the first page, obviously, it's 1
//calculate last page
$last_page = round( $number_of_items / $items_per_page );
//detect if prev button will be visible
if( $curr_page != 1 ){
$prev_button = true;
}
//get $albums_shown value
//it is the number of photos from the first page up to the current page
$items_shown = $items_per_page * $curr_page;
//detect if next button will be visible
//if the $number_of_albums were still higher than the $albums_shown, show the next page button,
//but if they are equal, don't show the next page button
if( $number_of_items > $items_shown ){
$next_button = true;
}
//get start limit for the fql query
$start_limit = $items_per_page * $prev_page;
//get end limit
//i'm not sure why i had to + 1, maybe it's a facebook bug?
$end_limit = $items_per_page + 1;
//these are the values or settings returned
//i made it to an array
$settings = array(
'number_of_items' => $number_of_items,
'prev_page' => $prev_page,
'next_page' => $next_page,
'prev_button' => $prev_button,
'next_button' => $next_button,
'start_limit' => $start_limit,
'end_limit' => $end_limit,
'last_page' => $last_page
);
return $settings;
}
//to get photos of an album, we have to pass the album id
public function getPhotos( $album_id ){
//we have to get total number of photos first
//i don't know why the count function is not working
$fql = "SELECT object_id FROM photo WHERE aid = '" . $album_id ."' ORDER BY position DESC";
//calculatePaging() will give us the paging settings
//pass the fql and type of object, this is 'photo'
$settings = $this->calculatePaging( $fql, 'photo' );
//get start and end limit for the next fql query
$start_limit = $settings['start_limit'];
$end_limit = $settings['end_limit'];
//query the photos
$fql = "SELECT
object_id, pid, src_small, src, src_big, link, caption, created, modified, position, like_info, comment_info
FROM
photo
WHERE
aid = '" . $album_id ."' {$this->excluded_photos}
ORDER BY
position DESC
LIMIT
{$start_limit}, {$end_limit}";
//set the parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get photos recordset
$result = $this->facebook->api( $params );
//add the settings to the result
$result['pull_fb'] = $settings;
return $result;
}
//to get album cover, you need to pass the cover_id or id of the photo
public function getAlbumCover( $cover_pid ){
//get album cover query
$fql = "select src_big from photo where pid = '" . $cover_pid . "'";
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//run the query
$result = $this->facebook->api( $params );
//the the value and return it
$value = $result[0]['src_big'];
return $value;
}
//to get comments, you need to pass the object id, it can be a video, photo, album etc
//check the fql tables to know object id https://developers.facebook.com/docs/reference/fql/
public function getComments( $object_id ){
//query the comment
$fql = "SELECT
text, time, fromid, likes
FROM
comment
WHERE
object_id = " . $object_id;
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset
$result = $this->facebook->api( $params );
return $result;
}
//to get profile name, you need to pass fromid or the profile id
public function getProfileName( $fromid ){
//query commenter / profile name
$fql = "SELECT
name
FROM
profile
WHERE
id = " . $fromid;
//set the paramters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get the resulting value
$result = $this->facebook->api( $params );
$value = $result[0]['name'];
return $value;
}
//this time we will just get the profile name and profile thumbnail
public function getProfileDetails( $fromid ){
//select name and pic_square which can be used as profile thumbnail
$fql = "SELECT
name, pic_square
FROM
profile
WHERE
id = " . $fromid;
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get and return the result
$result = $this->facebook->api( $params );
return $result;
}
//to get album name, pass the album id
public function getAlbumName( $aid ){
//query album name
$fql = "SELECT
name
FROM
album
WHERE
aid = '{$aid}'";
//set parameters
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//return result value for album name
$result = $this->facebook->api( $params );
$value = $result[0]['name'];
return $value;
}
//to get events, pass the uid or you fan page id
public function getEvents( $uid ){
//query the events
//we will eid, name, pic_big, start_time, end_time, location, description this time
//but there are other data that you can get on the event table (https://developers.facebook.com/docs/reference/fql/event/)
//as you've noticed, we have TWO select statement here
//since we can't just do "WHERE creator = your_fan_page_id".
//only eid is indexable in the event table, so we have to retrieve
//list of events by eids
//and this was achieved by selecting all eid from
//event_member table where the uid is the id of your fanpage.
//*yes, you fanpage automatically becomes an event_member
//once it creates an event
$fql = "SELECT
eid, name, pic_big, start_time, end_time, location, description
FROM
event
WHERE
eid IN ( SELECT eid FROM event_member WHERE uid = {$uid} )
ORDER BY start_time asc";
//set parameters
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset and retur results
$result = $this->facebook->api($param);
return $result;
}
//this function will get the profile invited to the event
//pass eid or event id
public function getEventMembers( $eid ){
//query the members
$fql = "SELECT
eid, uid, rsvp_status
FROM
event_member
where eid = {$eid}";
//set params
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get result and return it
$result = $this->facebook->api( $param );
return $result;
}
//get the videos
//pass the owner or the fan page id
public function getVideos( $owner ){
//query to get videos
//specify you fan page id, I got 221167777906963
//you can also use the LIMIT clause here if you want to show limited number of videos only
$fql = "SELECT
vid, owner, title, description, thumbnail_link,
embed_html, updated_time, created_time, link
FROM
video
WHERE owner={$owner}";
//set parameters
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
//get recordset and return it
$result = $this->facebook->api($param);
return $result;
}
}
?>
This class can be easily modified or extend depending on your needs. You can play around different Facebook tables. Thanks for all your comments, suggestions, catches and contributions from the previous version. Feel free to do that again. :)
Regarding "Headers already sent..." issues, you can learn more fixing that here.
Note: A lot of you is trying this script in localhost, I think this won't work. Please use this script on your real web host or buy from this bluehost link. Thanks!
Regarding "Headers already sent..." issues, you can learn more fixing that here.
Note: A lot of you is trying this script in localhost, I think this won't work. Please use this script on your real web host or buy from this bluehost link. Thanks!
The Code of a Ninja Resources
For FREE programming tutorials, click the red button below and subscribe! :)
website