1

我正在制作一个 facebook 应用程序,我必须在其中显示正在使用它的用户的新闻提要。我正在使用图形 API 来执行此操作。问题是它没有给我提要。我用它来展示这样的朋友:

$friends = $facebook->api('/me/friends');

它工作正常。

对于新闻提要,我使用这个:

$feeds   = $facebook->api('/me/home');

它向我显示了一个错误:

Fatal error: Uncaught IDInvalidException: Invalid id: 0 thrown in 
/home/content/58/6774358/html/test/src/facebook.php on line 560

当我尝试使用以下方法获取个人资料提要(墙)时:

$feeds   = $facebook->api('/me/feed');

它向我显示了一个空数组。

这些 API 调用在图形 API 页面中向我显示结果,但不知道为什么不能在我的应用程序中工作。谁能帮助我。我的完整代码如下

require_once 'src/facebook.php';

// 创建我们的应用程序实例。$facebook = new Facebook(array('appId' => 'xxxxx', 'secret' => 'xxxxx', 'cookie' => true, ));

$session = $facebook->getSession();
    $fbme = null;
// Session based graph API call.
if (!empty($session)){
    $fbme = $facebook->api('/me');
}
if ($fbme) {
     $logoutUrl = $facebook->getLogoutUrl();
     echo '<a href="'.$logoutUrl.'">Logout</a>';
}else{
    $loginUrl = $facebook->getLoginUrl();
     echo '<a href="'.$loginUrl.'">Logout</a>';
}
$friends = $facebook->api('/me/friends?access_token='.$session["access_token"]);
$feeds   = $facebook->api('/me/feed?access_token='.$session["access_token"]); 
print('<pre>Herere:');print_r($feeds);die;
4

2 回答 2

3

您在身份验证期间是否要求read_stream 权限

您经历了哪种类型的身份验证/“允许”过程?

JavaScript 开发工具包?Facebook PHP SDK?XFBML 登录按钮?

编辑- 这里有帮助你入门的链接:

脸书 PHP SDK

认证过程

在 Facebook.com 上构建应用程序

这些都是 Facebook 和 github 中的官方文档。


编辑:按照这个一步一步:

从您的原始代码中,查找:

$loginUrl = $facebook->getLoginUrl();

将其更改为:

$loginUrl = $facebook->getLoginUrl(array('req_perms'=>'read_stream'));

首先从您的帐户中卸载您的应用程序:

http://www.facebook.com/settings/?tab=applications

然后再试一次以显示新的允许弹出窗口


编辑

它还与 if 语句中的代码排列有关。使用此代码:

<?php
require_once 'src/facebook.php';
$session = $facebook->getSession();
$fbme = null;

if($session){
    $fbme = $facebook->api('/me');
    $friends = $facebook->api('/me/friends');
    $feeds = $facebook->api('/me/feed'); 
    $logoutUrl = $facebook->getLogoutUrl();
    echo '<a href="'.$logoutUrl.'">Logout</a>';
    echo "<pre>".print_r($feeds,TRUE)."</pre>";
}else{
    $loginUrl = $facebook->getLoginUrl(array('req_perms'=>'read_stream','canvas'=>1,'fbconnect'=>0));
    echo '<script> top.location.href="'.$loginUrl.'"; </script>>';
}

再次卸载您的应用程序

http://www.facebook.com/settings/?tab=applications

并重新打开应用程序

于 2011-05-07T13:28:22.107 回答
2

Facebook PHP SDK 应该为您处理您的访问令牌,您无需在Facebook::api()调用时将其附加到您的图形 API 端点。

正如@dragonjet 指出的那样,您需要向您的 FB 用户请求read_stream扩展权限才能访问他们的提要。但是,您粘贴的异常与此类问题并不真正匹配,并且您的请求/me/home不会引发类似的异常(或关于无权访问的异常)。

我仍然认为这是一个权限问题,所以从这里开始尝试修复它。以下是如何请求适当权限的示例。

$facebook = new Facebook(array(
    'appId' => FB_APP_ID, //put your FB APP ID here
    'secret' => FB_APP_SECRET, //put your FB APP SECRET KEY here
    'cookie' => true
));

$session = $facebook->getSession();

if ($session)
{
    //check to see if we have friends_birthday permission
    $perms = $facebook->api('/me/permissions');
}

 //we do this to see if the user is logged & installed
if (empty($session) || empty($perms['read_stream']))
{
    //get url to oauth endpoint for install/login
    $loginUrl = $facebook->getLoginUrl(array(
        //put the URL to this page, relative to the FB canvas
        //(apps.facebook.com) here vvv
        'next' => 'http://apps.facebook.com/path_to_your_app/index.php',
        'req_perms' => 'read_stream'
    ));

    //use javascript to redirect. the oauth endpoint cant be loaded in an
    //iframe, so we have to bust out of the iframe and load it in the browser
    //and tell the oauth endpoint to come back to the fb canvas location
    echo "<script>window.top.location='{$loginUrl}';</script>";
    exit;
}

print_r($facebook->api('/me/home'));
print_r($facebook->api('/me/feed'));
于 2011-05-07T19:49:35.903 回答