wuno
wuno

Reputation: 9885

Using PHP Composer For Facebook API

I had a working site using facebook api version 2.0 but was having some problems. I realized some of my calls were depreciated and so I set up composer and included the facebook api.

I think my problem is how I am including the api in my site.

I was using require 'facebookAPI/src/facebook.php'; Now that I am using composer this does not work.

file path is, vendor/facebook/php-sdk-v4/src/Facebook/ There is no facebook.php file in here.

How do I add the api? If facebook.php does not exist anymore? Do I use different files to achieve different goals? And last.. Can I use the autoloader by

require 'vendor/autoload.php';

If is there anything else i'm supposed to do from there?

Here is my full current code that just shows a blank page when the page loads.

<?php       
require 'vendor/autoload.php';

$facebook = new Facebook(array(
  'appId'  => 'foo foo foo',
  'secret' => 'foo foo foo',
));

$user = $facebook->getUser(); 

if ($user) {
  try {
    $user_info          = $facebook->api('/' . $user);
    $user_tags          = $facebook->api('/' . $user . '/tagged_places');
    $friends            = $facebook->api('/' . $user . '/friends');
    $user_feed          = $facebook->api('/' . $user . '/feed/?with=location');
    $friends_locations  = $facebook->api('/' . $user . '/friends/?fields=location');
    $user_checkins      = $facebook->api('/' . $user . '/checkins');
    $friends_checkins   = $facebook->api('/' . $user . '/friends/checkins');

  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

if ($user) {
$params = array( 'next' => 'http://www.wuno.com/sandbox/actions/fbLogout.php' );
$logoutUrl = $facebook->getLogoutUrl($params);
} else {
  $loginUrl = $facebook->getLoginUrl(array(
    'scope' => 'user_tagged_places, email, publish_actions, publish_stream, user_birthday, user_work_history, user_hometown, user_photos, user_about_me, user_checkins, friends_checkins, user_location, friends_location, read_stream, user_status, friends_status')
  );
}
?>

Upvotes: 2

Views: 5003

Answers (1)

wuno
wuno

Reputation: 9885

Facebook api v-4 uses namespaces

namespace
A namespace is a way of grouping code that exists across multiple files without having a naming collision. That is, you can have the same named class in two different places if they are encapsulated within namespaces.

so in the code in the question above the FB API is loaded with vendor and called like this,

require 'vendor/autoload.php';

Now that the FB API is added you just need to use the namespace of the classes you require for whatever you're trying to accomplish.

In my situation I ditched vendor and added these classes like so,

  // include required classes from Facebook SDK
require_once( 'facebook/src/Facebook/FacebookHttpable.php' );
require_once( 'facebook/src/Facebook/FacebookCurl.php' );
require_once( 'facebook/src/Facebook/FacebookCurlHttpClient.php' );
require_once( 'facebook/src/Facebook/FacebookSession.php' );
require_once( 'facebook/src/Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'facebook/src/Facebook/FacebookRequest.php' );
require_once( 'facebook/src/Facebook/FacebookResponse.php' );
require_once( 'facebook/src/Facebook/FacebookSDKException.php' );
require_once( 'facebook/src/Facebook/FacebookRequestException.php' );
require_once( 'facebook/src/Facebook/FacebookOtherException.php' );
require_once( 'facebook/src/Facebook/FacebookAuthorizationException.php' );
require_once( 'facebook/src/Facebook/GraphObject.php' );
require_once( 'facebook/src/Facebook/GraphSessionInfo.php' );

// Called class with namespace
use Facebook\FacebookHttpable;
use Facebook\FacebookCurl;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;

Please take note this is done with \ and not /

Each task you want to achieve with the FB API may require different classes then the ones included in my answer.

Upvotes: 2

Related Questions