В основном, что я делаю, создается страница миниатюр. Для каждого тега есть один эскиз, указанный указанным пользователем. Поэтому, если пользователь использовал 50 разных тегов, будет 50 миниатюр (в конечном итоге это будет разбито на страницы). Оно работает; это просто неэффективно. Даже с 8 тегами, это очень медленно, так как он должен ждать 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>'; ?>
Вы можете использовать метод flickr.people.getPhotos
чтобы получить информацию обо всех фотографиях пользователя (не более 500 на странице) и добавить extra=tags
к параметрам для вызова. Затем вы можете сделать выбор для каждого тега в памяти. Это потребует меньше вызовов API, если пользователь не использует менее одного уникального тега на 500 фотографий в своей учетной записи за счет более крупных ответов API и большего количества использования памяти и вычислений в вашем скрипте.
(Это соответствует только вашим критериям «одного запроса» для пользователей с менее чем 500 фотографиями).