使用最新的 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);
}
我在使用最新的 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);
}