使用最新的 facebook SDK php 结交 facebook 好友 list/count

Get facebook friends list/count with the latest facebook SDK php

我在使用最新的 facebook SDK PHP 5.0 获取用户 facebook 好友列表时遇到问题。我已经阅读了 Facebook Developers 网站上的文档,但并没有真正理解它。我试过网站上的代码:

/* PHP SDK v5.0.0 */
/* make the API call */

$request = new FacebookRequest(
  $session,
  'GET',
  '/me/friends'
);
$response = $request->execute();
$graphObject = $response->getGraphObject();
/* handle the result */

当我尝试这个时,我得到 "Fatal error: Class 'FacebookRequest' not found in /Applications/XAMPP/..."。在页面顶部的 Developer site 上写着 "This document refers to an outdated version of Graph API. Please use the latest version." 但是 link 没有指向任何地方?这就是我收到致命错误的原因吗?我真的不确定我会在这里问的是什么。 这是我当前代码的副本:

Init.php

<?php 
session_start(); 
require_once 'vendor/autoload.php'; 

$fb = new Facebook\Facebook([
  'app_id' => '******',
  'app_secret' => '******',
  'default_graph_version' => 'v2.5',
]);

<?php 

require_once 'app/init.php';

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes', 'user_friends', 'user_birthday', 'user_location', 'user_education_history', 'user_hometown']; // optional
$loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB_login/login-callback.php', $permissions);

if(!isset($_SESSION['fb_access_token'])){
    echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
} else {
    echo '<a href="signout.php">Sign Out!</a> <br />';


    $accessToken = $_SESSION['fb_access_token'];
    try {
  // Returns a `Facebook\FacebookResponse` object
      $response = $fb->get('/me?fields=id,name,email,likes,first_name,last_name,birthday,hometown,gender,picture', $accessToken);
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
      echo 'Graph returned an error: ' . $e->getMessage();
      exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
      echo 'Facebook SDK returned an error: ' . $e->getMessage();
      exit;
    }

    $user = $response->getGraphUser();

    echo 'Email: ' . $user->getEmail() . '<br />';
    echo 'First Name: ' . $user->getFirstName() . '<br />';
    echo 'Last Name: ' . $user->getLastName() . '<br />';
    echo 'Name: ' . $user->getName() . '<br />';
    echo 'Birth: ' . $user->getBirthday()->format('Y-m-d') . '<br />';
    echo 'HomeTown: ' . $user->getHometown()['name'] . '<br />';
    echo 'Gender: ' . $user->getGender() . '<br />';
    echo '<img src="' . $user->getPicture()['url'] . '">';

我想做的就是回显一个朋友列表或者可能只是一个计数,但不知道我该怎么做。我真的坚持这一点并且无法理解文档。有谁知道 correct/best 实现这个的方法吗?

非常感谢!

我解决了这个问题,以防其他人遇到同样的问题。首先,您必须在 FB 开发者页面上进行应用审查。接下来,您必须将可标记的朋友添加到您的应用程序中,使用此代码,嘿!

    if (isset($accessToken)) {
    if (isset($_SESSION['facebook_access_token'])) {
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    } else {
        $_SESSION['facebook_access_token'] = (string) $accessToken;
        // OAuth 2.0 client handler
        $oAuth2Client = $fb->getOAuth2Client();
        // Exchanges a short-lived access token for a long-lived one
        $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
        $_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
        $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
    }
    // validating the access token
    try {
        $request = $fb->get('/me');
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        if ($e->getCode() == 190) {
            unset($_SESSION['facebook_access_token']);
            $helper = $fb->getRedirectLoginHelper();
            $loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB/index.php', $permissions);
            echo "<script>window.top.location.href='".$loginUrl."'</script>";
        }
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }
    // get list of friends' names
    try {
        $requestFriends = $fb->get('/me/taggable_friends?fields=name&limit=1000');
        $friends = $requestFriends->getGraphEdge();
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }

    if ($fb->next($friends)) {
        $allFriends = array();
        $friendsArray = $friends->asArray();
        $allFriends = array_merge($friendsArray, $allFriends);
        while ($friends = $fb->next($friends)) {
            $friendsArray = $friends->asArray();
            $allFriends = array_merge($friendsArray, $allFriends);
        }
        foreach ($allFriends as $key) {
            echo $key['name'] . "<br>"; 
        }

        //echo count($allfriends);
    } else {
        $allFriends = $friends->asArray();
        $totalFriends = count($allFriends);
        $counter = 0; 
        foreach ($allFriends as $key) {
            echo $key['name'] . "<br>";
            $counter++;
        }
        echo $counter;
    }

} else {
    $helper = $fb->getRedirectLoginHelper();
    $loginUrl = $helper->getLoginUrl('http://localhost/Tutorials/FB/index.php', $permissions);
}