【发布时间】: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