ページがある場合n
、スクリプトはn+1
クエリを作成します。これがスクリプトの主な欠点です。これが低パフォーマンスの理由です。
バッチ リクエストを使用してクエリを組み合わせることができます。以下のスクリプトを使用して、目的を達成できます。n+1
これらのクエリを 1 つのバッチ クエリに結合しました。したがって、スクリプトよりもはるかに高速になります。
その部分も修正しましたecho
。これで、スクリプトは質問で述べたように出力を表示します。
// Get the IDs
$pages = array();
$pagesIds = implode(',', $pages);
// fancounts[] holds the page_id, name and fan_count of the Ids I work with
$fancounts = array();
$q = "SELECT page_id, name, fan_count FROM page WHERE page_id IN ({$pagesIds})";
$queries[] = array('method'=>'GET', 'relative_url' => 'method/fql.query?query=' . urlencode($q) );
$messages = array();
foreach( $pages as $id)
{
$q = "SELECT message FROM stream WHERE source_id = '$id' LIMIT 2";
$queries[] = array('method'=>'GET', 'relative_url' => 'method/fql.query?query=' . urlencode($q) );
}
// The batch query
$batchResponse = $facebook->api('?batch='.json_encode($queries), 'POST');
$pagesFanCounts = json_decode($batchResponse[0]['body'], TRUE);
foreach ($pagesFanCounts as $page)
{
$fancounts[] = number_format($page['page_id'],0,'','')."-".$page['name']."-".$page['fan_count'];
}
for($i=0; $i < count($fancounts); $i++)
{
echo '</br>',$fancounts[$i],'<br>';
$temp = json_decode($batchResponse[$i+1]['body'], TRUE);
foreach ($temp as $msg)
{
echo ($msg['message']);
echo "</br>";
}
}