【问题标题】:Limit output from facebook graph api限制来自 facebook graph api 的输出
【发布时间】:2016-08-19 12:21:55
【问题描述】:

我有一个脚本可以从墙上获取 Facebook 帖子,但我只想显示最新的 4 条消息。数据是使用 file_get_contents 检索的,我的问题是这也获取了无用的数据,并且被我过滤掉了。例如,如果另一个人在墙上发帖,我不想显示该帖子。这篇文章仍然被检索到(因为它与来自页面所有者的消息具有相同的名称message),因此算作一个数组值。

我想对数组进行计数,如果它超过 4 个则中断。这不起作用,因为最新的 4 条消息只有 2 条是页面所有者发布的消息。只有当我将值设置为 8 时,它才会显示 4 条消息,但这不是未来的证明,因为如果将来所有者连续发布 8 条消息,那么将显示 8 条消息而不是 4 条。

我的代码:

$app_id = "23532523";
$app_secret = "secret";

//Retrieve auth token
$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=23532523&client_secret=secret");

$size = 4;

$json_object = file_get_contents("https://graph.facebook.com/v2.6/23532523/feed?fields=full_picture%2Cmessage%2Cstory%2Cpermalink_url%2Cupdated_time%2Cfrom&access_token=23532523");


$feedarray = json_decode($json_object);

$f = 0;

foreach ( $feedarray->data as $key => $feed_data )
{
    if($feed_data->full_picture != ''){
        $fbimage = $feed_data->full_picture;
    }else{
        $fbimage = 'cms/images/placeholder/placeholder.jpg';
    }

    $shortstrfb = substr($feed_data->message, 0, 170) . '...';
    if(++$f > 8) break;

    if($feed_data->message != '' && $feed_data->from->name == 'page name'){
        $facebookfeed .= '
        <div class="col-sm-3 column_item_1">
            <div class="post_item post_item_news sc_blogger_item">
                <div class="post_featured">
                    <div class="post_thumb">
                        <div class="fbimgwrap">
                            <a href="'.$feed_data->permalink_url.'" target="_blank"><img src="'.$fbimage.'"></a>
                        </div>
                    </div>
                </div>                                                    
                <a href="'.$feed_data->permalink_url.'"><h4 class="post_title sc_title sc_blogger_title">'.$feed_data->name.'</h4></a>           
                <div class="post_content sc_blogger_content">
                    <div class="post_descr" style="margin-top:-100px;height:200px;">
                        <p>'.$shortstrfb.'</p>
                        <div class="fbbutton">
                            <a href="'.$feed_data->permalink_url.'" target="_blank" class="sc_button sc_button_square sc_button_bg_underline sc_button_iconed ">
                                Bekijk op Facebook
                                <span class="sc_button_iconed icon-right"></span>
                            </a>
                        </div>
                    </div>
                </div>  
            </div>      
        </div>';
    }
}
echo $facebookfeed;

我现在在 8 之后打破循环(应该是 4,但现在 8 显示最后的 4)。

【问题讨论】:

  • 如果您不希望别人发帖,请考虑改用/page-id/posts,请参阅developers.facebook.com/docs/graph-api/reference/v2.7/page/feed
  • @CBroe 谢谢!有没有办法从 file_get_contents 中过滤出“用户更新了他的个人资料图片”之类的东西?我认为那是 story 参数,但如果我删除它,类似的帖子仍会显示在图形 api 资源管理器中。
  • 不,在这方面过滤结果是不可能的。但无论如何,您不应该在每次页面加载时都发出 API 请求(您冒着遇到 API 速率限制的风险),而应该定期获取新帖子,并最终缓存数据。 (Webhook 是让 Facebook 在页面上发布新帖子时通知您的应用程序的另一种选择;但实现这些功能要复杂一些。)
  • 好的,我会调查的。我通过检查消息是否存在来解决问题,然后才添加到$f

标签: php facebook facebook-graph-api for-loop


【解决方案1】:

我是如何解决的:

仅当 $feed_data->message 不为空时才添加到 $f。

if($feed_data->message != ''){
    $f++;   
}

if($f > 4){
    break;  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多