Получить канал с Facebook - SDK 4.0

0

Я пытаюсь найти кого-то фида facebook, используя как php, так и javascript, но до сих пор ничего не работало. В соответствии с тем, что я пробовал, сеанс необходим для получения токена доступа и, следовательно, может видеть, что кто-то еще публично кормит - developers.facebook.com/docs/facebook-login/access-tokens/#usertokens

Если мы попробуем следующий url: graph.facebook.com/PAGE-ID/feed, он вернет ошибку, заявив, что для запроса этого ресурса требуется токен доступа.

Ниже моей попытки javascript, основанной на документации facebook sdk: http://pastebin.com/2KkU0iyF

window.fbAsyncInit = function() {
       FB.init
            ({
                appId   : 'APP-ID',
                status  : true, // check login status
                cookie  : true, // enable cookies to allow the server to access the session
                xfbml   : true, // parse XFBML
                version: 'v2.2'
            });
            FB.Event.subscribe('auth.login', function()
            {
                window.location.reload();
            });

      FB.getLoginStatus(function(response) {
          if (response.status === 'connected') {
            console.log('Logged in.');
            var uid = response.authResponse.userID;
            var accessToken = response.authResponse.accessToken;

           if(typeof facebookInit !== 'undefined')
                  facebookInit();
          }
          else {
            FB.login(function (response) {
                if (response.authResponse) {
                  // some code here

                } else {
                  alert("Login attempt failed!");
                }
              } //, { scope: 'read_stream' } // do I need to use scope here?
            );;
           }
        });
    };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));


function facebookInit() {

    FB.api('/PAGE-ID/feed', function(response) {
       console.log(response); // the returned array is empty
});


}

Дело в том, что /PAGE-ID/feed возвращает пустой массив. Я пытался просить что-то вроде /меня, и он печатает основную информацию в консоли, например имя, идентификатор, имя пользователя и т.д.

Консольный выход:

Objectdata: Array [0] __proto__: Object

Я считаю, что я пропустил что-то простое, как разрешения или так (я пытался использовать область действия в фазе входа). Однако, согласно документации API Graph (developers.facebook.com/docs/graph-api/reference/v2.2/post/), любой действительный токен доступа должен работать, если публикация является общедоступной.

PHP-попытка: http://pastebin.com/4wCBqSTu

session_start();

define('__ROOT__', dirname(dirname(dirname(__FILE__))));
require (__ROOT__.'/resources/facebook-php-sdk-v4-4.0-dev/autoload.php');

// added in v4.0.5
use Facebook\FacebookHttpable;
use Facebook\FacebookCurl;
use Facebook\FacebookCurlHttpClient;

// added in v4.0.0
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;
use Facebook\GraphUser;

// init app with app id and secret
FacebookSession::setDefaultApplication('APP-ID','APP-SECRET');

// get app access_token
$session = FacebookSession::newAppSession();

// make request to Facebook                        
$request = new FacebookRequest( $session, 'GET', '/PAGE-ID/feed' ); // /PAGE-ID only would retrieve the basic info, like username
$response = $request->execute();
// get response as array


$content = $response->getGraphObject();
print_r($content);
// output html
?>

Прежде всего. Мне действительно нужно попросить войти здесь? Я только хочу прочитать публичные сообщения. Для создания сеанса недостаточно файлов app-id и app-secret? Согласно документации, /feed возвращает массив объектов post.

Однако, когда я использую /PAGE-ID/feed, return является пустым массивом: [backingData: protected] => Array()

Если я использую только /PAGE-ID, он печатает основную информацию, такую как имя пользователя, имя и т.д.

Какие-либо предложения?

Редактировать Рабочие примеры:

pastebin.com/8WzmzxX0

pastebin.com/wKcfB8vj

благодаря

  • 1
    пожалуйста, оставьте свой код здесь.
  • 0
    Я только что добавил это в ветку
Теги:
facebook

1 ответ

0
Лучший ответ

Даже для публичных сообщений вы ДОЛЖНЫ использовать пользовательский токен для конкретного пользователя, и вам нужно разрешить ему разрешение read_stream.

При этом вы можете прочитать следующее:

Это разрешение предоставляется приложениям, создающим клиент под брендом Facebook на платформах, где Facebook еще не доступен. Например, приложения Android и iOS не будут одобрены для этого разрешения. Кроме того, веб-приложениям, настольным и телевизионным приложениям не будет предоставлено это разрешение.

Источник: https://developers.facebook.com/docs/facebook-login/permissions/v2.2

Это касается профилей пользователей. Если вы хотите получить канал страницы, вы можете даже использовать токен приложения без авторизации, если только страница не ограничена (страна, возраст) - в этом случае вам нужно использовать токен пользователя или токен страницы. Дополнительная информация о токенах доступа:

  • 0
    Я пытался авторизоваться с разрешением read_stream (образец javascript), но это не сработало. Пользовательский токен получен с логином, верно? Спасибо
  • 0
    да, но вам обычно не нужно беспокоиться о токенах, sdk обрабатывает токены внутри. что значит "это не сработало"?
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню