我正在制作一个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 = 新的 Facebook(array( 'appId' => 'xxxxx', "秘密" => "xxxxx", "饼干" => 真的,));
$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;
您是否在身份验证期间请求了read_stream权限?
您经历了哪种类型的身份验证/"允许"过程?
JavaScript SDK?Facebook PHP SDK?XFBML 登录按钮?
编辑 - 这里有有用的链接,可以帮助您入门:
脸书 PHP 开发工具包
身份验证过程
在 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
并重新打开应用程序
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'));