基本上我正在做的是生成一个缩略图页面。指定用户拥有的每个标记都有一个缩略图。因此,如果用户使用了50个不同的标签,那么将有50个缩略图(我最终会对此进行分页。)。有用;这只是效率低下。即使只有8个标签,这也非常慢,因为它必须等待来自Flickr服务器的9个响应(标签列表+1)。有没有更有效的方法来做到这一点?在扫描Flickr API时,我似乎无法找到更好的解决方案。以下是我目前正在使用的内容。
<?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>';
?>
答案 0 :(得分:1)
您可以使用flickr.people.getPhotos
方法获取有关所有用户照片的信息(每页最多500张),并将extra=tags
添加到呼叫参数中。然后你可以在内存中进行每个标签的选择。这将需要更少的API调用,除非用户在其帐户中每500张照片使用少于1个唯一标记,代价是更大的API响应以及脚本中更多的内存使用和计算。
(这仅适用于少于500张照片的用户的“一个请求”标准)。