Pull to refresh

Используем Flickr API из Perl

Reading time 5 min
Views 4.9K
Добрый день, уважаемый %habr_username% !

Если кто не знает — речь идёт об одном из самых популярных в мире фотохостингов — Flickr (wiki про Flickr).

Вкратце о Flickr API, ибо на хабре присутствуют только краткие упоминания о нём.

Разработчики Flickr дают возможность всем страждущим использовать мощный API, предоставляющий доступ ко всем мыслимым и немыслимым функциям, данным, возможностям. Flickr API отлично документирован, есть полное описание всех запросов (пример), есть FAQ, есть «быстрый старт», это основные источники познаний о Flickr API, их вполне достаточно для начала разработки вашего приложения. Модули для облегчения использования Flickr API есть для большинства популярных языков программирования, в том числе для Objective-C и Java, которые в настоящее время широко используются в разработке для IOS и Android, список с ссылками можно посмотреть тут (Прокрутив страничку вниз).

Предмет написания приложения (как пример)

Немного об одной из популярнейших идей Flickr — существует алгоритм отбора самых интересных фотографий за день, который каждый день формирует список из 500 интереснейших (по мнению алгоритма) фотографий, куда стремится попасть каждый пользователь. И это является пожалуй одной из самых популярных (но при этом простой в реализации) тем для написания приложений использующих Flickr API. Дабы быстрее закончить этот краткий экскурс в Flickr, ибо это не предмет данной статейки, дам пару ссылок, из которых сразу станет понятно о чём идёт речь. Самые популярные фотографии за каждый день месяца (страничка непосредственно в самом Flickr`е), теперь парочку сторонних веб проектов — Flickriver, flickrhivemind. О количестве подобного рода проектов можно только догадываться, я также уверен, что подобные приложения уже есть и для Android и IOS, в общем «масштаб трагедии» глобален, как и возможности реализации и развития данной идеи.

Пример использования из Perl

После того как вы сделали всё необходимое для начала работы (зарегистрировались на flickr, получили ключ, секретный хеш код для вашего приложения и т.д.), можно начинать. И так для языка Perl также есть модуль, который так и называет Flickr::API. Ну что же попробуем его использовать.
#!/usr/bin/perl
use warnings;
use strict;
use Flickr::API;
my $flickr_api_key = ваш_flickr_api_key;
my $flickr_api_secret = ваш_flickr_api_secret; 
my $api = new Flickr::API({ 'key' => $flickr_api_key,
            'secret' => $flickr_api_secret});

my $resp = $api->execute_method('flickr.interestingness.getlist', {
                          'per_page' => 100
                            })
my  $cont = $$resp{_content};

Тут мы используем API method flickr.interestingness.getList для получения списка популярных фотографий, как видно из описания — можно указывать день, за который хотим получить список, количество фотографий в выдаче и дополнительные параметры.
Теперь $cont содержит xml ответ, вида указанного в описании метода API. Приведу тут кусок (выдача сегодняшняя 20110809) — и так если делаем print $cont, то получаем:

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photos page="1" pages="5" perpage="100" total="500">
        <photo id="6017677390" owner="16956431@N06" secret="45ceb165dc" server="6012" farm="7" title="" ispublic="1" isfriend="0" isfamily="0" />
        <photo id="6018692165" owner="28911620@N00" secret="fa3550b6be" server="6144" farm="7" title="Tottenham riots" ispublic="1" isfriend="0" isfamily="0" />
        <photo id="6016971301" owner="23450806@N04" secret="985e5ba585" server="6141" farm="7" title="." ispublic="1" isfriend="0" isfamily="0" />
...........................
...........................
...........................
        <photo id="6017757609" owner="23548413@N00" secret="00f14219f3" server="6130" farm="7" title="harvest field" ispublic="1" isfriend="0" isfamily="0" />
        <photo id="6016821183" owner="39952864@N07" secret="dbf3a64a3f" server="6028" farm="7" title="duisburg_060811" ispublic="1" isfriend="0" isfamily="0" />
</photos>
</rsp>


И так, что тут к чему или о формировании ссылок на изображения Flickr — каждое поле это как вы поняли описание каждой фотографии, о ссылках на изображения офиц. документация. Или вкратце — ссылка на любое изображение Flickr имеет вид — http ://farm"farm из выдачи".static.flickr.com/"server из выдачи"/"photo id из выдачи"_"secret из выдачи".jpg.
То есть например для первой фотографии из нашей выдачи мы получаем https://habrastorage.org/getpro/habr/post_images/055/f43/5b2/055f435b217e402bb660663b7c6c1463.png. Не стесняемся — нажимаем, проверяем.
То есть теперь нужно просто «пропарсить» эту выдачу, это каждый делает как ему нравится, парсеров XML для перла не перечислить, да можно и прямо в лоб парсить, на свой страх и риск — ибо структура выдачи может изменится в будущем.

Теперь у вас есть всё для отображения лучших фотографий на Flickr за определённую дату, а уж куда это вставлять — решать вам, хотите на свой сайт, хотите в виджет для рабочего стола, хотите в приложения для мобильных устройств и т.д.

Ну и чтобы закончить, простенький пример для формирования html страницы. Приведу кусок кода, который в лоб парсит XML ответ от Flickr API, тут же в одном цикле печатает код для формирования html страницы с изображениями.
@cont_strings = split(/\n/,$cont);
foreach $string (@cont_strings) {                                                                                                                        
         next if $string !~ /photo/;
         next if $string =~ /<photos/;
         next if $string =~ /\/photos>/;
         $string =~ m:photo\sid="(.*)"\sowner="(.*)"\ssecret="(.*)"\sserver="(.*)"\sfarm="(.*)"\stitle="(.*)"\sispublic:;
         $photo_id = $1;
         $owner = $2;
         $secret = $3;
         $server = $4;
         $farm = $5;
         $title = $6;
         print "<div>";
         print "<a target=blank_ href = http://www.flickr.com/photos/".$owner."/".$photo_id."><img title=\"$title\" src=http://farm".$farm.".static.flickr.com/".$server."/".$photo_id."_".$secret.".jpg></a>";
          print "</div> 

Код рабочий, собственно пишу и проверяю в реальном времени, а не дёргаю откуда то, так что если всё вышеописанное собрать и вставить в cgi скрипт, то на странице появится 100 лучших изображений за день, со всего Flickr`а. Так же при нажатии на изображение вы будете переходить на страничку данного изображения в альбоме автора.
Для примера вставлю сюда одну фотографию как она будет выглядеть на вашей страничке (с ссылкой на страничку автора), опять же первую из нашей выдачи.
image
Да будет тупо 100 фотографий на всю страницу, да это очень печально, но всё что написано выше написано исключительно для ознакомления. Главное, что у вас есть необходимый массив данных и если добавить немного CSS и javascript`а получится не хуже, чем это.

В данной статье хотел познакомить вас с Flickr API и показать лёгкость его использования, имея 30 строчек кода мы получили простое приложение. Не думаю, что использовать Flickr API из других языков программирования намного сложнее, чем показано выше с Perl`ом. Так что если есть идеи, не трудно будет разработать приложения использующие Flickr API под любую платформу и любые задачи. Сожалею, что пришлось написать много материала не относящегося к названию темы, но необходимого для её понимания, надеюсь кто-нибудь почерпнёт чего то нового из вышеописанного.

З.Ы. С удивлением обнаружил, что блога Flickr на хабре не существует, если бы был, то ответ на вопрос куда публиковать был бы однозначен. А так либо в Yahoo либо в Perl, ну для первого как то совсем не подходит, для второго конечно тоже не очень (ибо для статьи по Perl всё таки не сильно подходит из за большого объёма информации про Flickr и Flickr API), но не в такой степени.
Tags:
Hubs:
+12
Comments 6
Comments Comments 6

Articles