Как импортировать друзей из Facebook на сайт - PullRequest
8 голосов
/ 27 июля 2010

У меня есть сайт, на котором есть пользователи, и пользователи могут добавлять друг друга в друзья.В последнее время я видел много веб-приложений, в которых есть функция, позволяющая импортировать своих друзей из Facebook прямо в их веб-приложение.Как реализован этот тип импорта списка друзей на Facebook?

Я посмотрел в документации по API Facebook и не могу найти что-либо непосредственно по этому поводу.

Предположительно, я бы использовал Facebook API, чтобы получить список друзей пользователя.Оттуда, как мне найти пользователей на моем сайте, которые являются членами этого списка?Работает ли этот тип схемы только с другими пользователями, которые уже использовали поиск друзей в Facebook, так что вы можете привязать к ним учетную запись Facebook?тема, хотя я видел много сайтов, делающих это, поэтому любая помощь, независимо от того, насколько она проста, будет высоко ценится.

Ответы [ 2 ]

28 голосов
/ 31 декабря 2010

Основные сведения о том, что вам понадобится для этого центра в районе , зарегистрируйте свой сайт как «приложение Facebook» и воспользуйтесь Graph API .

Взгляните на раздел "Войти через Facebook" на этой странице . По сути, когда вы регистрируете свое «приложение», у вас будет идентификатор приложения и «секрет приложения» (который является просто строкой символов и никогда не должен быть обнародован, иначе кто-либо с ним может подделать ваше приложение). В примере на странице показано небольшое количество JavaScript для инициализации приложения с вашего веб-сайта, и в этот момент вы можете перейти на интеграцию с Facebook.

Чуть ниже показан пример кнопки «Войти через Facebook», которую ваши пользователи будут использовать, чтобы указать, что они хотят разрешить вашему сайту доступ к некоторым своим данным Facebook (например, список друзей). Вы можете настроить индивидуальные специальные разрешения , которые ваш сайт запрашивает у пользователя в рамках этого тега входа, и вашим пользователям будет выдаваться приглашение типа на этот , специально запрашивающее разрешение на разрешение вашего сайта. чтобы получить доступ к своим данным Facebook.

Оглядываясь назад на эту страницу еще раз (хотя это может быть и на других страницах, документация Facebook сильно меняется), прокручивая немного дальше, вы найдете простой пример (в PHP) для очень базовая интеграция с Facebook. Страница примера предоставляет пользователю кнопку «Войти через Facebook» и перезагружается после нажатия кнопки (путем подписки на правильное событие Facebook API в JavaScript). После перезагрузки у пользователя теперь есть зашифрованный файл cookie (при условии, что пользователь согласился на запрос разрешений), который может прочитать страница примера.

«Секрет приложения» используется для расшифровки файла cookie, который содержит идентификатор пользователя Facebook и токен доступа, который разрешает вашему сайту отправлять запросы на информацию этого пользователя в Facebook. Использование токена доступа в запросах Graph API предоставит вам разрешение на получение данных из этих запросов.

Запросы API Graph - это просто запросы GET, которые возвращают данные JSON, поэтому, когда у вас есть токен доступа (и идентификатор пользователя в качестве отправной точки), вы можете делать такие запросы в любом месте. Они могут быть сделаны на стороне клиента в JavaScript (наряду с использованием социальных плагинов и других виджетов Facebook), чтобы "Facebookify" воспринимать опыт ваших пользователей на вашем сайте, не подвергая большой, если таковые имеются, данные или ответственность вашего сайта , Или же запросы могут быть сделаны из вашего серверного кода на внутреннем сервере с целью хранения запрошенных данных и использования их по своему усмотрению (например, списка друзей).

Запрос API для получения списка друзей будет выглядеть примерно так:

https://graph.facebook.com/me/friends?access_token=your_access_token

(Однако вы бы заменили me в пути на идентификатор Facebook пользователя, чьи Друзья вы хотите получить, и заменили your_access_token на фактический токен доступа. Пример ссылок для вашей учетной записи, предполагая, Вы вошли в Facebook, можно найти на этой странице .)

Graph API (как следует из названия) распространяется на социальный график данных Facebook. Любой объект JSON, который возвращается с id, может быть запрошен в его собственном API-запросе, чтобы увидеть больше его информации. Любая информация, которую вы хотите, например, адреса электронной почты Друзей пользователя, будет доступна , если и (надеюсь) , только если разрешения как пользователя, так и Друга пользователя в вопрос позволяет это. (Извините, но если Друзья пользователя специально сказали, что их Друзья не могут предоставить доступ к этой информации, то она недоступна.)

Таким образом, как только ваши пользователи предоставят вашему сайту запрошенные разрешения на просмотр своих данных Facebook, вы сможете собирать любые данные, которые вы хотите (и им разрешен доступ), которые доступны в Graph API. (Я ненавижу использовать слово «урожай» там, но вы поняли идею. Действуйте ответственно, конечно.) Таким образом, ваш процесс, с точки зрения пользователя в любом конкретном случае, будет:

  1. Попросите пользователя войти через Facebook, запрашивая определенные разрешения.
  2. Получите эти разрешения от пользователя (в противном случае процесс заканчивается здесь).
  3. Выполните запросы API API к графическому интерфейсу из кода своего сервера, чтобы получить соответствующую информацию из социальной сети Facebook пользователя.
  4. Предоставьте пользователю варианты, которые вы могли бы осмыслить (например, сопоставление адресов электронной почты или даже имен с пользователями, которые у вас уже есть), будь то пользователи, которые у вас уже есть (эй, этот ваш друг есть на нашем сайте, вы хотел бы поздороваться?) или приглашает на ваш сайт (у нас нет записи о том, что ваш друг посещал наш сайт, нажмите здесь, чтобы пригласить их!) и т. д.
  5. Затем пользователь продолжает взаимодействовать с любой функциональностью, которую ваш сайт предоставляет в этом вопросе.

Имеет смысл? Как я уже упоминал, документация для всего этого в Facebook сильно меняется (я нашел несколько мертвых ссылок на их собственном сайте, когда писал это). Их программные интерфейсы также меняются довольно часто. Они могут разработать более простые способы сделать это, но как только вы настроите и начнете абстрагировать вызовы Graph API и все такое, будет довольно просто интегрировать ваш сайт (ы) с Facebook.

0 голосов
/ 07 декабря 2016

Вы можете получить список друзей, которые заходят на ваш сайт через 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 <- это то, что вы ищете </p>

После входа на ваш сайт через Facebook зарегистрированному участнику будет присвоен постоянный уникальный идентификатор для вашего сайта.

Когда вы запрашиваете график user_friends этого участника, Facebook Graph возвратит список пользовательских объектов для друзей, которые также используют это приложение. И эти объекты включают в себя идентификатор пользователя (который уникален для каждого приложения), с помощью которого вы сможете связывать друзей, которые знают друг друга в вашем приложении.

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

Пример пользователя A (ID: 1234) и пользователя B (ID: 5678)

1) Пользователь. Вход на ваш сайт через Facebook.

2) Вы пытаетесь запросить user_friends из Facebook пользователя A, но это ничего не возвращает.

3) Пользователь B зарегистрируйтесь и войдите на свой сайт, используя Facebook.

4) Вы пытаетесь запросить user_friends графиков пользователя B и Facebook возвращает идентификатор пользователя А 1234.

Отсюда вы можете понять, что 5679 и 1234 являются друзьями, и вы можете создать базу данных, которая будет ассоциировать ваших участников с друзьями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...