2016-08-19 10 views
1

У меня есть сценарий, который получает сообщения facebook со стены, но я хочу только отображать последние 4 сообщения. Данные извлекаются с помощью file_get_contents, моя проблема в том, что это также приводит к бесполезным и отфильтрованным данным. Например, если другой человек стоит на стене, я не хочу показывать этот пост. Этот пост все еще извлекается (поскольку он имеет то же имя message как сообщение от владельца страницы) и, следовательно, считается значением массива.Предельный вывод из графика facebook api

Я хочу подсчитать массив и сломаться, если он длиннее 4. Это не работает из-за последних 4 сообщений, только 2 сообщения, отправленные владельцем страницы. Только если я верну его значение 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; 

Теперь я разбиваю петлю после 8 (должно быть 4, но с 8 показывает последние 4 на данный момент).

+1

Если вы не хотите, сообщения от других, а затем рассмотреть вопрос об использовании '/ страница-идентификатор/posts' вместо см https://developers.facebook.com/docs/graph-api/reference/v2. 7/page/feed – CBroe

+0

@CBroe Спасибо! Есть ли способ фильтровать такие вещи, как «пользователь обновил изображение своего профиля» из файла file_get_contents? Я думал, что это параметр 'story', но если я удалю его, такие сообщения все еще отображаются в графическом api explorer. – twan

+0

Нет, фильтрация результатов в этом отношении невозможна. Но вы не должны делать запросы API на каждой загрузке страницы в любом случае (вы рискуете столкнуться с ограничениями скорости API), но периодически отправляйте новые записи и кешируйте данные на своем конце. (Webhooks будет еще одним вариантом, чтобы Facebook уведомил ваше приложение, когда на странице были сделаны новые сообщения, но их реализация немного сложнее.) – CBroe

ответ

0

Как я установил его:

только добавить к $ е, если $ feed_data-> сообщение не является пустым.

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

if($f > 4){ 
    break; 
} 
Смежные вопросы