使用最新的facebook SDK php获取facebook好友列表/计数


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

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

/* 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 */

当我尝试这样做时,我只得到"致命错误:在/Applications/XAMPP/…中找不到类'FacebookRequest'"。在页面顶部的开发人员网站上,它说"此文档引用了Graph API的过时版本。请使用最新版本。"但链接没有指向任何位置??这就是我出现致命错误的原因吗?我真的不确定它会是什么,所以我想我会在这里问。这是我当前代码的副本:

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'] . '">';

我所想做的就是回复一个朋友列表,或者只是一个计数,但我不知道我该怎么做。我真的很纠结,很难理解文档。有人知道实现这一目标的正确/最佳方式吗?

非常感谢!

我解决了这个问题,以防其他人也有同样的问题。首先,你必须在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);
}