【发布时间】:2014-11-24 01:18:09
【问题描述】:
我一直在尝试使用 php 和 javascript 检索某人的 facebook 提要,但到目前为止没有任何效果。根据我的尝试,需要一个会话来检索访问令牌,因此能够看到其他人的公开提要-developers.facebook.com/docs/facebook-login/access-tokens/#usertokens
如果我们尝试以下网址: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 正在返回一个空数组。我尝试询问类似 /me 的内容,它会在控制台中打印基本信息,例如姓名、ID、用户名等。
控制台输出:
对象数据:数组[0] __proto__: 对象
我相信我缺少一些简单的东西,比如权限左右(我尝试在登录阶段使用范围)。但是,根据 Graph API 文档(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 时,返回的是一个空数组:[backingData:protected] => Array ()
如果我只使用 /PAGE-ID,它会打印基本信息,例如用户名、姓名等。
有什么建议吗?
编辑 工作示例:
pastebin.com/8WzmzxX0
pastebin.com/wKcfB8vj
谢谢
【问题讨论】:
-
请在此处发布您的代码。
-
我刚刚将它添加到线程中
标签: javascript php facebook