1
基本上我正在做的是生成一個縮略圖的頁面。每個標籤有一個指定用戶的縮略圖。因此,如果用戶使用了50個不同的標籤,則會有50個縮略圖(我將最終對此進行分頁)。有用;這只是低效率。即使只有8個標籤,由於它必須等待來自Flickr服務器的9個響應(標籤列表的+1),所以速度很慢。有沒有更有效的方法來做到這一點?掃描Flickr API時,我似乎無法找到更好的解決方案。以下是我目前用來做到這一點。如何在特定用戶的請求下爲每個Flickr標籤獲取一張照片?
<?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>';
?>
所以你說的話(如果我正確理解你的話)是我搜索指定用戶的所有照片,每個頁面設置500個最大照片,並在需要獲取所有照片時發出多個請求。然後解析所有內容,爲每個標籤獲取一張照片。只要用戶每個標籤的平均照片不超過500張,這將是一個更有效的解決方案。那是對的嗎? –
不錯,就API調用的數量而言效率更高。我會基準它是否整體效率更高。 – geoffspear
哇。非常明顯的差異。謝謝。 –