2016-08-19 6 views
1

壁から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 $に追加:私はそれを固定する方法

+1

あなたが他の人によって投稿をしたくない場合は、https://developers.facebook.com/docs/graph-api/reference/v2を参照してください、代わりに '/ページ-ID/posts'を使用することを検討してください。 7 /ページ/フィード – CBroe

+0

@CBroeありがとう! file_get_contentsから 'ユーザーがプロフィール画像を更新しました'のようなものをフィルタリングする方法はありますか?私はそれが 'story'パラメータだと思っていましたが、もし私がそれを削除すると、グラフapi explorerにまだ表示されているような投稿があります。 – twan

+0

いいえ、その点で結果をフィルタリングすることはできません。しかし、すべてのページが読み込まれるたびにAPIリクエストを作成するべきではありません(APIレートの制限がかかる危険があります)。定期的に新しい投稿を取得し、最後にデータをキャッシュします。 (Webhooksは、新しい投稿がページに作成されたときにFacebookにあなたのアプリに通知させるもう1つの選択肢だろうが、それらを実装するのはもう少し複雑だ。) – CBroe

答えて

0

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

if($f > 4){ 
    break; 
}