基本的には、サムネイルのページを生成しています。指定されたユーザーが持つ各タグごとに1つのサムネイルがあります。したがって、ユーザーが50種類の異なるタグを使用している場合は、50のサムネイルが表示されます(これには最終的にページが貼り付けられます)。できます;それだけで非効率です。わずか8つのタグでも、Flickrサーバーから9つの応答(タグのリストの+1)を待たなければならないため、これは非常に遅いです。これを行うより効率的な方法はありますか? Flickr APIをスキャンしているうちに、より良い解決策を見つけることができないようです。以下は私が現在これを行うために使用しているものです。1回のリクエストで特定のユーザーがFlickrタグごとに1枚の写真を取得するにはどうすればよいですか?
<?php
function get_api_url($additional_params) {
$params = array_merge($additional_params, array(
'api_key' => API_KEY,
'format' => 'php_serial',
'user_id' => USER_ID,
));
$encoded_params = array();
foreach ($params as $k => $v)
$encoded_params[] = urlencode($k) . '=' . urlencode($v);
return 'http://api.flickr.com/services/rest/?' . implode('&', $encoded_params);
}
// Set any additional paramaters.
$additional_params = array(
'method' => 'flickr.tags.getListUser',
);
// Get the tags.
$rsp_obj = unserialize(file_get_contents(get_api_url($additional_params)));
// Parse the tags.
$unparsed_tags = $rsp_obj['who']['tags']['tag'];
$tags = array();
foreach ($unparsed_tags as $tag) {
$tags[] = $tag['_content'];
}
// Set any additional parameters.
$additional_params = array(
'method' => 'flickr.photos.search',
'per_page' => '1',
);
$api_url = get_api_url($additional_params);
// Call the API and parse the response.
echo "<div id=\"tags\">";
foreach ($tags as $tag) {
$rsp_obj = unserialize(file_get_contents($api_url . '&tags=' . urlencode($tag)));
$photo = $rsp_obj['photos']['photo'][0];
$image_url = 'http://farm' . $photo['farm'] . '.static.flickr.com/' .
$photo['server'] . '/' . $photo['id'] . '_' . $photo['secret'] . '_m.jpg';
$tag_url = "/gallery/?tag=$tag";
$tag = ucwords($tag);
echo <<<HD
<a class="tag" href="$tag_url">
<img src="$image_url" />
<span class="caption">$tag</span>
</a>
HD;
}
echo '</div>';
?>
あなたが言っていることは(私があなたを正しく理解している場合)、1ページあたり最大写真数500セットの特定のユーザーがすべての写真を検索し、すべての写真を取得するために必要な場合に複数のリクエストを行います。次に、すべてのタグを解析して、各タグごとに1つの写真を取得します。ユーザーがタグごとに平均500枚以上の写真を撮っていない限り、これはより効率的なソリューションになります。あれは正しいですか? –
、API呼び出しの数の点でより効率的です。私はそれがより効率的であるかどうかをベンチマークします。 – geoffspear
うわー。非常に顕著な違い。ありがとう。 –