Новости

Facebook API: публікація в групи і на сторінки

  1. створення програми
  2. Отримання access token
  3. Налаштування публікації в групу
  4. Налаштування публікації на сторінку
  5. Схожі записи

Facebook API дає можливість розміщувати інформацію на сторінках або в групах FB без участі редактора. Наприклад, автоматично публікувати в соцмережі новини сайту відразу після їх появи. Під катом приклад інтеграції найактуальнішою на даний момент бібліотеки FB SDK for PHP v5.0.0 і опис популярних помилок її використання.

На відміну від Вконтакте, методи роботи з групами і сторінками fb дещо відрізняються, тому їм будуть присвячена окремі розділи. Загалом же вигляді стаття містить 4 блоки:

1. створення додатка
2. отримання токена
3. настройка публікації в групу
4. настройка публікації на сторінку

створення програми

На сторінці My Apps потрібно створити додаток типу «Веб-сайт», дати йому довільну назву і перейти в розділ «Settings»

Тут обов'язково заповнюємо поля «App Domains» і «Contact Email», інакше fb не дасть перевести додаток з пісочниці в робочий режим і публікації будуть видимі лише адміністраторам.

На сторінці «Status & Review» публікуємо

Варто відзначити, що отримувати токен доступу ми плануємо від імені аккаунта адміністратора програми - в даному випадку не потрібно налаштовувати і обґрунтовувати fb використання дозволів.

Тепер можна скопіювати значення «App ID» і «App Secret» і переходити до наступного кроку.

Отримання access token

Для роботи з API знадобиться бібліотека FB SDK for PHP v5.0.0, скачати її можна на офіційному сайті . Там же знаходяться приклади і документація.

На сайті створимо сторінку login.php, єдине завдання якої - сформувати посилання на сторінку авторизації:

<? // старт сесії необхідний бібліотеці session_start (); require_once __DIR__. '/../Class/Facebook/autoload.php'; // App ID і App Secret з установки програми $ app_id = "1057093380989633"; $ App_secret = "bd4f3810d8875d"; // посилання на сторінку повернення після авторизації // домен повинен збігатися із зазначеним в налаштуваннях програми $ callback = "http://api.alexvaleev.ru/fb/callback/"; $ Fb = new Facebook \ Facebook ([ 'app_id' => $ app_id, 'app_secret' => $ app_secret, 'default_graph_version' => 'v2.4',]); $ Helper = $ fb-> getRedirectLoginHelper (); // для публікації в групах досить дозволу publish_actions // для публікації на сторінках потрібні всі 3 елементи $ permissions = [ 'publish_actions', 'manage_pages', 'publish_pages']; $ LoginUrl = $ helper-> getLoginUrl ($ callback, $ permissions); echo '<a href="'. htmlspecialchars($loginUrl).'"> Log in with Facebook! </a>';

Також потрібна сторінка callback.php, саме там ми зловимо токен (код практично без змін узятий з документації):

<? session_start (); require_once __DIR__. '/../Class/Facebook/autoload.php'; // App ID і App Secret з установки програми $ app_id = "1057093380989633"; $ App_secret = "bd4f3810d8875d"; $ Fb = new Facebook \ Facebook ([ 'app_id' => $ app_id, 'app_secret' => $ app_secret, 'default_graph_version' => 'v2.4',]); $ 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); // 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 ()); }

Переходимо на сторінку авторизації і дозволяємо додатком все, що вона запитує.

У діалозі визначення області видимості публікацій важливо відзначити «Доступно всім», в іншому випадку буде викидатися помилка

(# 200) Insufficient permission to post to target on behalf of the viewer

Використовуючи отриманий токен можна розміщувати контент в групи або собі в стрічку. Час його життя всього 60 днів, тобто кожні 2 місяці доведеться отримувати новий. Це не відноситься до токені сторінок (вони вічні).

Налаштування публікації в групу

Єдина вимога при налаштуванні групи - зробити її видимою. При спробі розмістити що-небудь в «секретної» групі FB API поверне помилку

Unsupported post request.

Скрипт публікації:

<? require_once __DIR__. '/../Class/Facebook/autoload.php'; // App ID і App Secret з установки програми $ app_id = "1057093380989633"; $ App_secret = "bd4f3810d8875d"; // ID групи і токен $ group_id = "169341013404224"; $ Token = "CAAPBa7t34sEBAGqXsKyPO7hDgRBcfj0Ma3saPxV7WiHttKIQrZCgLmJf4xJZCUO1PUgxQ"; $ Fb = new Facebook \ Facebook ([ 'app_id' => $ app_id, 'app_secret' => $ app_secret, 'default_graph_version' => 'v2.4',]); // опис параметрів є в документації $ linkData = [ 'link' => 'http://alexvaleev.ru', 'message' => 'It works!',]; try {// Returns a `Facebook \ FacebookResponse` object $ response = $ fb-> post (" / {$ group_id} / feed ", $ linkData, $ 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; } $ GraphNode = $ response-> getGraphNode (); echo 'Posted with id:'. $ GraphNode [ 'id'];

У разі успішного виконання пост з'явиться в стрічці групи

Налаштування публікації на сторінку

Сторінки мають 2 важливих відмінності від груп:

1. публікація в основну стрічку можлива тільки з окремим токеном сторінки, але він є вічним і його не потрібно отримувати заново.
2. пости в групу можливі тільки від імені користувача, на сторінку - від імені сторінки.

Отримати токен сторінки найпростіше в Graph API Explorer . Вставляємо отриманий на попередньому кроці «власні» токен, тиснемо submit і отримуємо токени всіх своїх сторінок.

Тепер можна публікувати:

<? require_once __DIR__. '/../Class/Facebook/autoload.php'; // App ID і App Secret з установки програми $ app_id = "1057093380989633"; $ App_secret = "bd4f3810d8875d"; // ID сторінки і токен $ page_id = "497620137079453"; $ Token = "CAAPBa7t34sEBANjFScsnaF7j4Fg9RlXE3rZC7Rsqz5smbkzxwPIOF5B0ZApZAlcZAW"; $ Fb = new Facebook \ Facebook ([ 'app_id' => $ app_id, 'app_secret' => $ app_secret, 'default_graph_version' => 'v2.4',]); // опис параметрів є в документації $ linkData = [ 'link' => 'http://alexvaleev.ru', 'message' => 'It works!',]; try {// Returns a `Facebook \ FacebookResponse` object $ response = $ fb-> post (" / {$ page_id} / feed ", $ linkData, $ 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; } $ GraphNode = $ response-> getGraphNode (); echo 'Posted with id:'. $ GraphNode [ 'id'];

Лайвхак - токен сторінки можна отримати без створення login.php і callback.php, використовуючи виключно Graph API Explorer.

Схожі записи

Якщо вам сподобалася стаття, підписуйтесь на оновлення блогу по rss або приєднуйтесь в twitter Поділитися посиланням з друзями:

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

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: