Статьи

Интеграция с Facebook Graph API

Интеграция с Facebook из PHP проста с помощью PHP SDK Facebook и некоторых HTTP-библиотек, таких как Zend_Http_Client или PEAR HTTP_Request2. В этой статье я покажу вам, как начать использовать Facebook PHP SDK. Вы узнаете об API Graph Facebook и создадите приложение Facebook, способное обновлять ваше статусное сообщение и загружать фотографии.

Если у вас его еще нет, вы можете клонировать или загрузить PHP SDK с GitHub . Вам также понадобится подтвержденная учетная запись Facebook.

Регистрация вашего приложения на Facebook

Сначала вам нужно зарегистрировать свое приложение на Facebook. Перейдите по адресу developers.facebook.com/apps и нажмите кнопку « Создать новое приложение» в верхней части страницы.

В открывшемся диалоговом окне запрашивается имя и пространство имен для вашего приложения. Отображаемое имя приложения — это имя вашего приложения, которое будет показано пользователям. Пространство имен приложения — это пространство имен, которое ваше приложение будет использовать для Open Graph и Canvas Page.

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

  • Веб-сайт — опция веб-сайта используется для добавления социальных функций на ваш сайт.
  • Приложение на Facebook — эта опция приложения Facebook встраивает ваше приложение на страницу Facebook Canvas. Код размещается на ваших серверах, но выполняется в контексте страницы Facebook, аналогично IFrame.
  • Мобильная сеть — опция мобильной сети аналогична опции интеграции с веб-сайтом, хотя и предназначена для мобильных сайтов.
  • Собственное приложение для iOS / Android — встроенные опции позволяют интегрировать данные Facebook в приложения для iOS и Android.
  • Вкладка страницы — опция вкладки представляет ваше приложение как вкладку страницы Facebook.

Для целей этой статьи я буду использовать вариант интеграции с веб-сайтом. Мое приложение будет автономным веб-сайтом, и после авторизации Facebook перенаправит пользователя на указанный URL-адрес. Установите флажок рядом с параметром и введите URL-адрес страницы входа вашего приложения. Затем обязательно нажмите кнопку « Сохранить изменения» внизу страницы.

Вы также должны отметить значения App ID и App Secret в верхней части страницы, поскольку эти значения понадобятся вам для подключения вашего приложения к Facebook.

Использование SDK

Функциональность подключения и взаимодействия с Facebook предоставляется через объект Facebook Конструктор принимает массив параметров, которые содержат информацию о вашем приложении, например, идентификатор приложения и секрет приложения, которые отображаются на странице основных настроек вашего приложения.

 <?php 
session_start();
require_once "php-sdk/src/facebook.php"; 

$config = array(
    "appId" => FACEBOOK_APP_ID,
    "secret" => FACEBOOK_APP_SECRET);

$fb = new Facebook($config);

авторизация

Метод getUser() Информация может быть или не быть доступной, в зависимости от того, вошел ли пользователь в систему или нет. Если метод возвращает 0, то вы знаете, что пользователь не вошел в систему.

 <?php
$user = $fb->getUser();

Ссылка для входа в систему, которая служит отправной точкой для процесса аутентификации OAuth с Facebook, получается с помощью getLoginUrl() getLoginUrl()redirect_uri и scope .

 <?php
$params = array(
    "redirect_uri" => REDIRECT_URI,
    "scope" => "email,read_stream,publish_stream,user_photos,user_videos");
    echo '<a href="' . $fb->getLoginUrl($params) . '">Login</a>';

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

Независимо от того, принимает ли пользователь запрос и входит ли он в Facebook или отклоняет ли он запрос, он будет перенаправлен обратно на redirect_uri, и в качестве параметров URL будут доступны несколько значений. Отклонение будет включать в себя параметры errorerror_reasonerror_description

  http://example.com/facebook/myapp.php?error=access_denied&error_reason=user_denied&error_description=The+user+denied+your+request. 

Успешная аутентификация / авторизация добавит параметр code

  http://example.com/facebook/myapp.php?code=TOKEN_VALUE 

Затем этот код используется для запроса токена доступа:

  https://graph.facebook.com/oauth/access_token?client_id=FACEBOOK_APP_ID&redirect_uri=FACEBOOK_REDIRECT_URI&client_secret=FACEBOOK_APP_SECRET&code=TOKEN_VALUE 

Поскольку вы используете SDK, который обрабатывает все это для вас, я не буду больше вдаваться в то, как работает OAuth. Если вы заинтересованы в получении дополнительной информации, прочитайте статью Дастина Раннелла « Понимание OAuth» и документацию SDK по аутентификации . (Facebook использует OAuth v2 и статью Дастина, посвященную v1, но он все же даст вам хорошее представление о роли запросов и учетных данных, которые играют в этом процессе).

API Graph

После того, как пользователь предоставит разрешение, вы можете прочитать пользовательский поток сообщений о состоянии с помощью запроса GET

  https://graph.facebook.com/me/feed?access_token=ACESS_TOKEN 

Кроме того, вы можете использовать метод api()

 <?php
$data = $fb->api("/me/feed");

В этом случае метод api()GET

Graph API предоставляет интерфейс для доступа к участникам и отношениям в социальной сети Facebook. Каждый участник имеет уникальный идентификатор, и к нему можно получить доступ в стиле REST через ресурсы, начинающиеся с «https://graph.facebook.com». Например, отправив запрос GET

  https://graph.facebook.com/harikt 

вернет объект JSON с основной общедоступной информацией обо мне и моем профиле.

  {
    "id": "596223095",
    "имя": "Хари кт",
    "first_name": "Hari",
    "last_name": "Kt",
    "ссылка": "http://www.facebook.com/harikt",
    "username": "harikt",
    "мужской пол",
    "locale": "en_US"
 } 

Для некоторых запросов требуется токен доступа. Запрос ленты обновлений сообщений является привилегированным действием, поэтому отправка запроса GET

  https://graph.facebook.com/harikt/feed 

вернет объект JSON, заполненный информацией об ошибке OAuthException

  {
    "ошибка": {
       "message": "Требуется токен доступа для запроса этого ресурса.",
       "type": "OAuthException"
    }
 } 

Идентификатор me

Чтобы добавить обновление в фид пользователя с помощью метода api()POST/me/feedсообщения .

 <?php
$data = array("message" => "Hello World!");
$status = $fb->api("/me/feed", "POST", $data);

Чтобы загрузить новую фотографию, вы должны сделать запрос POST/me/photosALBUM_ID/photosname и image .

 <?php
$fb->setFileUploadSupport(true); 
$data = array(
    "name" => "a vacation photo",
    "image" => "@/home/hari/vacation/img42.jpg");
$status = $fb->api("/me/photos", "POST", $data);

SDK использует расширение PHP cURL для публикации данных, а вызов setFileUploadSupport()trueCURLOPT_POSTFIELDS Также с cURL связано использование @ См. Описание для CURLOPT_POSTFIELDSдокументации PHP curl_setopt() для получения дополнительной информации.

Чтобы узнать больше о Graph API в Facebook, я рекомендую вам прочитать документацию по Graph API и поэкспериментировать с Graph API Explorer, довольно удобной утилитой.

Ваше первое приложение

Давайте соберем все, что вы узнали сейчас, и напишем очень простой пример приложения для Facebook. Он предложит пользователю войти в систему и авторизовать приложение, а затем даст ему возможность обновить свое статусное сообщение и загрузить фотографию.

 <?php 
session_start();
require_once "php-sdk/src/facebook.php"; 

$config = array(
    "appId" => FACEBOOK_APP_ID,
    "secret" => FACEBOOK_APP_SECRET);

$fb = new Facebook($config);

$user = $fb->getUser();
?>
<html> 
 <head> 
  <title>Hello Facebook</title> 
 </head> 
 <body>
<?php
if (!$user) { 
    $params = array(
        "scope" => "read_stream,publish_stream,user_photos",
        "redirect_uri" => REDIRECT_URI);
    echo '<a href="' . $fb->getLoginUrl($params) . '">Login</a>'; 
}
else { 
?>
  <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" enctype="multipart/form-data">
   <textarea name="message" id="message" rows="2" cols="40"></textarea><br>
   <input type="file" name="image" id="image"><br>
   <input type="submit" value="Update"> 
  </form> 
<?php
    // process form submission
    if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST["message"])) {
        if (is_uploaded_file($_FILES["image"]["tmp_name"])) { 
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mime = finfo_file($finfo, $_FILES["image"]["tmp_name"]);
            $allowed = array("image/gif", "image/jpg", "image/jpeg", "image/png");
            // upload image
            if (in_array($mime, $allowed)) { 
                $data = array(
                    "name" => $_POST["message"],
                    "image" => "@" . realpath($_FILES["image"]["tmp_name"]));
                $fb->setFileUploadSupport(true); 
                $status = $fb->api("/me/photos", "POST", $data);    
            }
        }
        else {
            // update status message
            $data = array("message" => $_POST["message"]);
            $status = $fb->api("/me/feed", "POST", $data); 
        }
    } 
    if (isset($status)) {
        echo "<pre>" . print_r($status, true) . "</pre>";
    } 
}
?>
 </body> 
</html>

Код представляет ссылку для входа или выхода в зависимости от ситуации в зависимости от возвращаемого значения getUser() Затем отображается простая форма HTML, которая позволяет пользователю вводить сообщение о состоянии и, возможно, файл изображения. Когда пользователь отправляет форму, код проверяет загруженное изображение, если оно предоставлено, и публикует его в Facebook или выполняет только обновление сообщения о состоянии.

Резюме

Данный код предназначен для демонстрационных целей, и я пропустил множество проверок, связанных с фильтрацией и безопасностью, которые вы хотели бы выполнять при написании реальных приложений. Тем не менее, он подчеркивает основные моменты, представленные в этой статье. PHP PHP SDK упрощает интеграцию с Facebook. Он описывает работу с аутентификацией OAuth и API Graph Facebook.

Изображение через mkabakov / Shutterstock