【问题标题】:Retrieve feed from facebook - sdk 4.0从 facebook 检索提要 - sdk 4.0
【发布时间】: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


【解决方案1】:

即使对于公开帖子,您也必须为特定用户使用用户令牌,并且您需要使用read_stream 权限授权他。

话虽如此,您可能想阅读以下内容:

此权限授予在 Facebook 尚不可用的平台上构建 Facebook 品牌客户端的应用程序。例如,Android 和 iOS 应用程序将不会获得此权限。此外,Web、桌面和电视应用不会被授予此权限。

来源:https://developers.facebook.com/docs/facebook-login/permissions/v2.2

这适用于用户配置文件。如果您想检索页面提要,您甚至可以在未经授权的情况下使用应用令牌,除非页面受到限制(国家、年龄)——在这种情况下,您需要使用用户令牌或页面令牌。有关访问令牌的更多信息:

【讨论】:

  • 我尝试使用 read_stream 权限(javascript 示例)进行授权,但没有成功。用户令牌是通过登录检索的,对吗?谢谢
  • 是的,但是您通常不需要担心令牌,sdk 在内部处理令牌。 “它不起作用”是什么意思?
  • 顺便说一句,您以错误的方式使用 FB.login。查看本教程:devils-heaven.com/facebook-javascript-sdk-login
  • 我已经按照您建议的方式尝试了登录,并且该部分正在工作。正如您还建议的那样,使用 read_stream,我可以访问新闻提要,但我如何使用该信息? /me/feed 的响应只是打印 [object Object]
  • 那是一个完全不同的故事,它是一个 json 对象。使用 chrome 开发工具进行调试,它们会列出 json 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多