Получайте последние сообщения на Facebook с помощью PHP SDK

Следующий код находится внутри файла под названием facebook_posts.php, который я вызываю из моего индексного файла следующим образом: <?php require_once("http://www.example.com/design/php/facebook_posts.php"); ?> <?php require_once("http://www.example.com/design/php/facebook_posts.php"); ?> . Однако, когда этот код ставится, ответа нет. Поэтому ни успех, ни ошибки catch не возвращают ошибку (как я вижу). Я пробовал абсолютные URL-адреса, но это тоже не сработало. (Я скрыл информацию об api и странице.) По-видимому, содержимое, которое следует за require_once (нижний колонтитул и скрипты), не загружается. Что-то кажется неправильным при включении SDK.

Я не использую композитор, нужно ли мне require файлы Facebook\ или use их? И какие из них мне нужны для получения сообщений со страницы?

 <?php // Defining FB SDK with absolute paths define('FACEBOOK_SDK_V4_SRC_DIR', 'http://example.com/design/Facebook/'); require 'http://example.com/design/php/autoload.php'; use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\GraphUser; use Facebook\FacebookRequestException; FacebookSession::setDefaultApplication('{my-app-id}','{my-app-secret}'); $session = new FacebookSession('{my-long-lived-access-token}'); // Get the GraphUser object for the current user: try { $request = new FacebookRequest( $session, 'GET', '/{my-page-id}/feed' ); $response = $request->execute(); $graphObject = $response->getGraphObject(); var_dump($graphObject); echo graphObject; echo "banana"; } catch (FacebookRequestException $e) { echo "API ERROR"; } catch (\Exception $e) { echo "other error"; } ?> 

EDIT: так что мне просто нужно во всех файлах FB, и это, похоже, работает. Тем не менее, я не знаю, как перемещаться / повторять возвращаемый объект. Т.е. как перебирать разные сообщения (четыре последних сообщения на странице) и эхо их в HTML. Базовая структура будет выглядеть так:

 <time>{publish date}</time> <p>{post message}</p> <a href="{link to included url}">{title to included url}</a> 

Solutions Collecting From Web of "Получайте последние сообщения на Facebook с помощью PHP SDK"

Вам нужно использовать долгоживущий токен доступа к странице.

Ток доступа к сети

Эти токены доступа аналогичны токенам доступа пользователей, за исключением того, что они предоставляют разрешение API, которые читают, записывают или изменяют данные, принадлежащие странице Facebook. Чтобы получить токен доступа к странице, вам нужно начать с получения токена доступа пользователя и запросить разрешение manage_pages. После того, как у вас есть токен доступа пользователя, вы получите токен доступа к странице через Graph API.

Как сказал @CBroe, вы не должны использовать этот токен доступа в клиентском коде, поскольку он секретный / закрытый, и вы не хотите, чтобы кто-то его получил.

Поэтому для того, что вы хотите сделать, Javascript не является правильным выбором. Вам нужно будет использовать некоторые серверные коды, такие как PHP, Python или Ruby, чтобы получать сообщения. Если это ясно, вот как вы можете его создать.


  1. Создайте приложение Facebook:

    • сохраняйте приложение id (1) и приложение secret (2) в стороне,
    • в «расширенных» настройках активируйте OAuth, чтобы избежать The application has disabled OAuth client flow .
  2. Вам нужно создать токен доступа пользователя.

    • перейдите в Graph API Explorer и выберите приложение, которое вы только что создали,
    • сгенерируйте токен доступа: нажмите «Получить токен доступа» и отметьте manage_pages на вкладке «Расширенные разрешения».
  3. Получите свой токен доступа к токене .

    • все еще в проводнике API диаграммы, запросите me/accounts ( GET ),
    • найдите свою страницу и получите ее токен доступа (3) .
  4. Получите ваш долгоживущий токен доступа к странице .

    • в своем браузере вставьте адресную строку https://graph.facebook.com/oauth/access_token?client_id=(1)&client_secret=(2)&grant_type=fb_exchange_token&fb_exchange_token=(3)
    • замените (1) , (2) и (3) вашим идентификатором приложения, секретным приложением и маркером доступа к странице,
    • получить свой новый долгоживущий токен доступа из результата: access_token=FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL ,
    • используйте отладчик токена доступа, чтобы убедиться, что токен доступа никогда не истечет .

Теперь вы можете использовать этот новый токен доступа для поиска сообщений на своей странице:

 $session = new FacebookSession('FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL'); try { $data = (new FacebookRequest( $session, 'GET', '/me/posts' ))->execute()->getGraphObject()->getPropertyAsArray("data"); foreach ($data as $post){ $postId = $post->getProperty('id'); $postMessage = $post->getProperty('message'); print "$postId - $postMessage <br />"; } } catch (FacebookRequestException $e) { // The Graph API returned an error } catch (\Exception $e) { // Some other error occurred } 

Я обнаружил, что наиболее проголосовавшее решение слишком сложно и длится только 2 месяца.

Для меня это лучшее решение, использующее приложение с графическим API 2.5:

1. Создать приложение.

2.- Перейдите по адресу : https://developers.facebook.com/tools/explorer/

  • Выберите новое созданное приложение справа вверху.
  • Выберите «Get App Token»

3.- Скопируйте это «{ACCESS-TOKEN}» (имеет форму: number | hash)

ВАЖНО: (Это не app_id | app_secret !!!)

4. Запрос URL с помощью CURL:

(5) .- Эквивалентный URL:

Я собрал все это в очень простой форме:

https://gist.github.com/biojazzard/740551af0455c528f8a9

Надеюсь, поможет.

  1. Создать страницу Facebook для разработчиков приложений.

Затем код exmaple:

 <ul> <?php $page_name = '{PAGE_NAME}'; // Example: http://facebook.com/{PAGE_NAME} $page_id = '{PAGE_ID}'; // can get form Facebook page settings $app_id = '{APP_ID}'; // can get form Developer Facebook Page $app_secret = '{APP_SECRET}'; // can get form Developer Facebook Page $limit = 5; function load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len) { $access_token = "https://graph.facebook.com/oauth/access_token?client_id=$app_id&client_secret=$app_secret&grant_type=client_credentials"; $access_token = file_get_contents($access_token); // returns 'accesstoken=APP_TOKEN|APP_SECRET' $access_token = str_replace('access_token=', '', $access_token); $limit = 5; $data = file_get_contents("https://graph.facebook.com/$page_name/posts?limit=$limit&access_token=$access_token"); $data = json_decode($data, true); $posts = $data[data]; //echo sizeof($posts); for($i=0; $i<sizeof($posts); $i++) { //echo $posts[$i][id]; $link_id = str_replace($page_id."_", '', $posts[$i][id]); $message = $posts[$i][message]; echo ($i+1).". <a target='_blank' href='https://www.facebook.com/AqualinkMMC/posts/".$link_id."'>".$message."</a><br>"; } } load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len); ?> </ul> 

все, что вам нужно, чтобы получить последние сообщения из фида facebook, описано здесь: http://piotrpasich.com/facebook-fanpage-feed/

В ярлыке – используйте фидную ленту (замените {id} на соответствующий идентификатор)

https://facebook.com/feeds/page.php?format=atom10&id= {id}

Вы можете скачать фид с помощью этого фрагмента кода:

 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $rss_url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); curl_setopt($curl, CURLOPT_REFERER, ''); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_TIMEOUT, 10); $raw_xml = curl_exec($curl); // execute the curl command