あなたが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>";
}
}
の代わりに '$を保存しますfancounts'と '$ messages'を配列として使うと、データをエコーアウトするとどうなりますか?それは表示されませんか? – hohner
@Jamieはい、最初のすべての名前、ファン、IDを表示し、すべてのメッセージを表示し続けます。私は以前これが好きだった。 – EnexoOnoma
[facebook batch request](http://developers.facebook.com/docs/reference/api/batch/) –