壁からFacebookの投稿を取得するスクリプトがありますが、最新の4つのメッセージだけを表示したいだけです。データはfile_get_contentsを使用して取得されますが、私の問題はこれも役に立たないデータを取得し、フィルタリングしたことです。たとえば、他の人が壁に投稿した場合、私はその投稿を表示したくありません。このポストは引き続き検索されます(ページ所有者からのメッセージとして同じ名前のmessage
があるため)、配列値としてカウントされます。facebook graph apiの出力を制限する
私は配列を数え、それが4より大きい場合に中断したいと思います。これは最新の4つのメッセージだけがページ所有者によって投稿されたメッセージであるために機能しません。値を8に変更すると4つのメッセージが表示されますが、今後所有者が8つのメッセージを連続して投稿する場合、4の代わりに8つのメッセージが表示されるので、これは将来の証明ではありません。
マイコード:
$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;
私は今、(4であってもよいが、8と、それは現時点では最後の4を示す必要があります)8後にループを破ります。
を$ feed_data->メッセージが空でない場合にのみ、F $に追加:私はそれを固定する方法
あなたが他の人によって投稿をしたくない場合は、https://developers.facebook.com/docs/graph-api/reference/v2を参照してください、代わりに '/ページ-ID/posts'を使用することを検討してください。 7 /ページ/フィード – CBroe
@CBroeありがとう! file_get_contentsから 'ユーザーがプロフィール画像を更新しました'のようなものをフィルタリングする方法はありますか?私はそれが 'story'パラメータだと思っていましたが、もし私がそれを削除すると、グラフapi explorerにまだ表示されているような投稿があります。 – twan
いいえ、その点で結果をフィルタリングすることはできません。しかし、すべてのページが読み込まれるたびにAPIリクエストを作成するべきではありません(APIレートの制限がかかる危険があります)。定期的に新しい投稿を取得し、最後にデータをキャッシュします。 (Webhooksは、新しい投稿がページに作成されたときにFacebookにあなたのアプリに通知させるもう1つの選択肢だろうが、それらを実装するのはもう少し複雑だ。) – CBroe