2016-04-19 77 views
2

我無法通過最新的facebook SDK PHP 5.0獲取用戶facebook好友列表。我已閱讀Facebook Developers網站的文檔,但並不真正瞭解它。我曾嘗試在網站上的代碼:使用最新的facebook SDK獲取facebook朋友列表/計數php

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

當我嘗試這方面,我只是得到「致命錯誤:類‘FacebookRequest’/應用程序/ XAMPP/...未找到」。在頁面頂部的Developer site上,它表示「本文檔指的是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'] . '">'; 

所有我想要做的就是呼應了好友列表或者只是一個計數,但不知道我可怎麼辦那。我真的停留在這一點,並無法理解文檔。有誰知道實現這一目標的正確/最佳方法?

非常感謝!

+0

看起來像文檔中的錯誤。無論哪種方式,您只能通過user_friends獲得授權您的應用的朋友,您知道嗎? – luschn

回答

0

我解決了這個問題,只是在別人遇到同樣的問題。首先,您必須在FB開發者頁面上進行應用程序審查。接下來,你必須添加taggable朋友到你的應用程序,使用此代碼,嘿presto!

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