2016-02-19 5 views
0

Im пытается получить сообщения на странице Facebook. я сделал это в here Проблема заключается в том, что страница является немного медленным (4 или 5 секунд, чтобы загрузить)Facebook Graph API - получить сообщения в PHP

Я использую 2 «Еогеасп», чтобы получить данные и, возможно, то будет проблема.


Вот мой код:

$json_object = @file_get_contents('https://graph.facebook.com/'.$page_id.'/posts?limit=4&access_token=' . $access_token); 

$fbdata = json_decode($json_object); 

foreach ($fbdata->data as $post) 
{ 
$postid = $post->id; 

    $json_object2 = @file_get_contents('https://graph.facebook.com/'.$postid.'/attachments?access_token=' . $access_token); 

    $fbdata2 = json_decode($json_object2); 

    foreach ($fbdata2->data as $post2) 
    { 
     $title = $post2->title; 
     $type = $post2->type; 
     $url = $post2->url; 
     $desc = $post2->description; 
     $desc = str_replace("\n", "<br>", $desc); 
     if (strlen($desc) > 200){ 
      $desc = substr($desc, 0, 200) . '...<br>...<br><a href="'.$url.'" target="_blank">Ver mais</a>'; 
     } 

     $imgsrc = $post2->media->image->src; 
     if ($type=="note") { 
      ?> 
      <div class="wrapper"> 
       <a href="<?php echo $url;?>" target="_blank"><div class="img" style="background-image: url('<?php echo $imgsrc; ?>');"></div></a> 
       <a href="<?php echo $url;?>" target="_blank"><h1><?php echo $title; ?></h1></a> 
       <p><?php echo $desc; ?></p> 
      </div> 
      <?php 
     } 
    } 
} 

Im не показывая вам "PAGE_ID" и "access_token" переменных, но они правильны.

Что я могу сделать, чтобы получить лучшую производительность при загрузке страницы?

Спасибо!

+0

Да, конечно, это медленно, если вы запускаете несколько запросов API внутри цикла. Вместо этого используйте расширение поля, чтобы запросить все эти данные за один раз. https://developers.facebook.com/docs/graph-api/using-graph-api/#fieldexpansion – CBroe

+0

Спасибо! Я использую такие поля API Graph: '' https://graph.facebook.com/".$page_id."/?fields=posts.limit(4){id,message,attachments{title,type.url , описание, media {image {src}}}} & access_token = ". $ access_token' , а затем просто прочитайте его как массив. – danielfos

ответ

1

Да, конечно, это медленно, если вы запускаете несколько запросов API внутри цикла.
(Наиболее замедляя часть запроса HTTP приложение позволяет разговаривать с серверами Facebook, - и если вы делаете одиночные запросы API в цикле, это означает, что один запрос HTTP для каждого из них.) Расширение поля

Используйте вместо этого запросить все эти данные за один раз: https://developers.facebook.com/docs/graph-api/using-graph-api/#fieldexpansion