Я пытаюсь найти кого-то фида 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
благодаря
Даже для публичных сообщений вы ДОЛЖНЫ использовать пользовательский токен для конкретного пользователя, и вам нужно разрешить ему разрешение read_stream
.
При этом вы можете прочитать следующее:
Это разрешение предоставляется приложениям, создающим клиент под брендом Facebook на платформах, где Facebook еще не доступен. Например, приложения Android и iOS не будут одобрены для этого разрешения. Кроме того, веб-приложениям, настольным и телевизионным приложениям не будет предоставлено это разрешение.
Источник: https://developers.facebook.com/docs/facebook-login/permissions/v2.2
Это касается профилей пользователей. Если вы хотите получить канал страницы, вы можете даже использовать токен приложения без авторизации, если только страница не ограничена (страна, возраст) - в этом случае вам нужно использовать токен пользователя или токен страницы. Дополнительная информация о токенах доступа: