如何将Facebook好友导入网站

时间:2010-07-27 16:21:36

标签: facebook social-networking

我有一个网站,用户和用户可以互相添加为朋友。最近,我看到很多网络应用程序都有一个功能,你可以将你的朋友从Facebook直接导入他们的网络应用程序。如何实现这种Facebook好友列表的导入?

我查看了Facebook API文档,并且无法直接找到任何指向此的内容。

据推测,我会使用Facebook API来提取用户朋友的列表。从那里,我如何在我的网站上找到该列表成员的用户?这种类型的方案是否仅适用于已经使用Facebook好友搜索的其他用户,以便您可以将Facebook帐户绑定到他们?

在这个主题上似乎没有太多内容,尽管我已经看到很多网站在做这个,所以任何帮助,无论多么基本,都会非常感激。

2 个答案:

答案 0 :(得分:28)

答案 1 :(得分:0)

您可以使用Facebook登录获取朋友登录您网站的会员列表。但是,只有在您网站上注册的朋友才会显示。 (在Facebook术语中,只有使用相同应用程序的朋友)

从facebooks开发者的页面,您可以获得以下代码。

<强>的login.php

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}', // Replace {app-id} with your app id
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.2',
  ]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email','user_friends']; // Optional permissions (THIS IS WHERE YOU GET THE PERMISSION FOR FRIEND'S LIST)
$loginUrl = $helper->getLoginUrl('https://example.com/fb-callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

FB-callback.php

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}', // Replace {app-id} with your app id
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.2',
  ]);

$helper = $fb->getRedirectLoginHelper();

try {
  $accessToken = $helper->getAccessToken();
} 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 (! isset($accessToken)) {
  if ($helper->getError()) {
    header('HTTP/1.0 401 Unauthorized');
    echo "Error: " . $helper->getError() . "\n";
    echo "Error Code: " . $helper->getErrorCode() . "\n";
    echo "Error Reason: " . $helper->getErrorReason() . "\n";
    echo "Error Description: " . $helper->getErrorDescription() . "\n";
  } else {
    header('HTTP/1.0 400 Bad Request');
    echo 'Bad request';
  }
  exit;
}

// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);

// Validation (these will throw FacebookSDKException's when they fail)
$tokenMetadata->validateAppId({app-id}); // Replace {app-id} with your app id
// If you know the user ID this access token belongs to, you can validate it here
//$tokenMetadata->validateUserId('123');
$tokenMetadata->validateExpiration();

if (! $accessToken->isLongLived()) {
  // Exchanges a short-lived access token for a long-lived one
  try {
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
  } catch (Facebook\Exceptions\FacebookSDKException $e) {
    echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
    exit;
  }

  echo '<h3>Long-lived</h3>';
  var_dump($accessToken->getValue());
}

$_SESSION['fb_access_token'] = (string) $accessToken;

// User is logged in with a long-lived access token.
// You can redirect them to a members-only page.
//header('Location: https://example.com/members.php');

在login.php,您可以看到以下行

$permissions = ['email','user_friends']; 

这将提示用户访问同时使用该应用的朋友。

此代码将从图表中获取好友列表

 try {
            // Returns a `Facebook\FacebookResponse` object
            $response = $this->fb->get('/me?fields=id,name,email,gender,user_friends,', $this->token);
        } 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;
        }

代码均为样本,仅供参考,以便您了解后端发生的情况。我强烈建议您查看https://developers.facebook.com/docs/php/howto/example_facebook_login

如果您对流程有任何疑问,可以创建新问题以获得答案。

更新:处理user_friends&lt; - 这就是你要找的东西

使用Facebook登录您的网站后,登录的会员将获得永久唯一ID到您的网站。

当您请求该成员的user_friends图表时,Facebook Graph将返回正在使用此应用程序的朋友的用户对象列表。这些对象包括用户ID(每个应用程序都是唯一的),通过ID,您可以链接在您的应用中相互了解的朋友。

https://developers.facebook.com/docs/graph-api/reference/user/

  

示例用户A(ID:1234)和用户B(ID:5678)

     

1)用户A使用Facebook登录您的网站。

     

2)您尝试从用户A的Facebook请求user_friends但是它   没有回报。

     

3)用户B使用Facebook注册并登录您的网站。

     

4)您尝试请求User_friends用户B和Facebook图表   返回用户A的ID 1234。

从那里你可以理解5679和1234是朋友,你可以设计你的数据库,将你的成员关联为朋友。