从$ facebook-> api('/ me / feed')获取以前的状态

时间:2011-09-02 15:45:22

标签: php facebook facebook-graph-api facebook-php-sdk

我一直在尝试访问当前用户(登录的用户)发布的先前状态。这似乎是不可靠的,返回的状态数似乎有所不同。

我知道你可以使用?limit =,?since =和?until =,但是当我使用?limit = 1000时,说大到足以获得用户提前发布的一些帖子就变得无法预测了。

我想要做的是访问自我加入Facebook以来我​​发布的前几个状态。最好的方法是什么?(使用'?limit = 1000'似乎有点过分!)

这会设置权限等,然后抓取Feed:     

require 'php-sdk/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxx', 
  'cookie' => true
));

$user = $facebook->getUser();

// Permissions required
$par = array();
$par['scope'] = "status_update user_about_me user_status";

$feed = null;
$profile = null;
$loginUrl = null;

if ($user) {
    $logoutUrl = $facebook->getLogoutUrl();
    try {
        // Proceed knowing you have a user who is logged in and authenticated

        // Get Feed
        $feed = $facebook->api('/me/feed');
        // Get User Profile
        $profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }   
} 
else {
    $loginUrl = $facebook->getLoginUrl($par);
}

?>

这是我用来显示Feed中的状态更新的内容:

foreach ($feed['data'] as $entry)
{
    // If its a message posted by user
    $isStatusUpdate = array_key_exists('message', $entry) and $entry['from']['name'] == $profile['name'];

    if ($isStatusUpdate)
    {
        $likes = 0;
        $comment = 0;

        // Get num of likes 
        if (array_key_exists('likes', $entry))
            $likes = count($entry['likes']); 

        // Get num of comments
        if (array_key_exists('comments', $entry))
            $comments = count($entry['comments']);

        // Display message with num of likes and comments
        echo '<div class="row"><div class="span4 columns"><h2>Post '.$counter.'</h2>';
        echo '<p>Likes '.$likes.'</br>';
        echo 'Comments '.$comments.'</p></div>';
        echo '<div class="span12 columns"><h3>'.substr($entry['created_time'], 0, 10).'</h3>';
        echo '<pre class="prettyprint">'.$entry['message'].'</pre></div>';
    }
}

1 个答案:

答案 0 :(得分:2)

你不能做限制= 1000,我并不惊讶你得到了意想不到的结果。您可以一次请求的数量有一个上限,即使没有,您可能会超时并且只接收部分数据。

然而,你可以做的是发送一个请求,该请求使用过去很久以前的'since'字段,这肯定是在用户成为facebook成员之前。例如,如果您使用自2000年1月1日起的日期,您将获得用户提出的第一个帖子列表。

希望有所帮助