Статьи

Окончательное руководство по декодированию API Flickr

Flickr, крупнейший в мире сайт по управлению и обмену фотографиями, имеет впечатляющий API, который позволяет разработчикам получать доступ и манипулировать практически всеми своими данными. Давайте посмотрим, как работать с API: на самом низком уровне.

В эту эпоху Web 2.0 веб-приложения, которые имеют простой в использовании, интуитивно понятный API, имеют явное преимущество, поскольку они позволяют разработчикам использовать и создавать платформы и таким образом привлекать больше пользователей. По мере продвижения к социальной сети и гибридным приложениям хороший API больше не является хорошим дополнением: он совершенно необходим. И помните, что слишком много абстракций никогда не бывает хорошим. Хотя существует ряд наборов API для упрощения работы с данным API, не было бы здорово узнать, что на самом деле происходит под капотом? Разве не было бы интересно деконструировать фактическое вуду, происходящее между набором и API? Да, я так и думал! В этой новой серии мы рассмотрим API некоторых наиболее популярных сервисов. Сегодня мы рассмотрим API Flickr.

Танго между разработчиком и API начинается и завершается серией четко определенных шагов. Я объясню каждый шаг, как мы идем.

Прежде всего, нам нужно определиться с типом приложения, которое мы собираемся создать. Настольные приложения должны использовать модель рабочего стола, в то время как веб-приложение может использовать любую из моделей. Мобильная модель выходит за рамки этой статьи.

В этой статье я выбрал модель настольного компьютера, поскольку веб-модель требует, чтобы все тестирование проводилось в домене, на котором должно быть развернуто приложение. Это не обязательно может быть осуществимо для многих людей. Мы выбираем модель рабочего стола, так как она лишена этого ограничения.

Следующим шагом является получение ключа приложения. Flickr использует этот ключ приложения, чтобы следить за нашим использованием и другой статистикой. Зайдите сюда и подайте заявку на собственный ключ API.

Поскольку использование этого конкретного ключа API носит исключительно образовательный характер, мы решили получить некоммерческий ключ.

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

Успешная регистрация дает вам эту страницу. Запишите ключ API и общий секрет для последующего использования.

API Flickr предоставляет ряд методов, которые могут требовать или не требовать аутентификации. Каждый метод принимает несколько аргументов, которые изменяют его поведение и полезную нагрузку. Ответы могут быть получены в нескольких форматах, включая JSON, XML, SOAP и REST. Все эти запросы могут быть отправлены в конечные точки, соответствующие формату, который вы выбрали для выполнения запроса. Например, мы будем использовать REST для остальной части этой статьи, и поэтому нашей конечной точкой URL будет http: // api .flickr.com / услуги / отдых /.

Существует ряд методов, которые извлекают общедоступные данные и поэтому не требуют никакой аутентификации. Нам просто нужен ключ API, который мы получили ранее, вместе с необходимыми аргументами рассматриваемого метода. Давайте посмотрим на пример.

Метод getPublicGroups является примером метода, который не требует аутентификации и который извлекает общедоступные данные. Мы передаем идентификатор пользователя и наш ключ API, и API отвечает в формате, который вы запросили, со списком групп, в которые входит пользователь.

Мы отправим запрос на этот URL.

1
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x

Замените your_api_key на ключ, который мы получили ранее, а user_id_x — на действительный NSID. Поскольку мне нравится, что мои ответы находятся в JSON, я могу добавить еще один параметр, запрашивающий у API ответ с полезной нагрузкой JSON.

1
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x&format=json

API отправит ответ примерно так:

Правильно отформатированный, это будет выглядеть так.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
jsonFlickrApi(
    {«photos»: {
        «page»: 1,
        «pages»: 1,
        «perpage»: 100,
        «total»: «2»,
        «photo»: [
            {
                «id»: «3729689790»,
                «owner»: «40318902@N02»,
                «secret»: «ea9c38a675»,
                «server»: «3466»,
                «farm»: 4,
                «title»: «opac»,
                «ispublic»: 1,
                «isfriend»: 0,
                «isfamily»: 0
            },
            {
                «id»: «3729689845»,
                «owner»: «40318902@N02»,
                «secret»: «df6dfee053»,
                «server»: «2531»,
                «farm»: 3,
                «title»: «scale»,
                «ispublic»: 1,
                «isfriend»: 0,
                «isfamily»: 0
            }
          ]
      },
      «stat»: «ok»
})

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

Для получения личных данных каждому методу требуется аутентификация, а для работы аутентификации каждый из наших вызовов должен быть подписан. Подписание работает так:

Составьте отсортированный по алфавиту список аргументов

Например, в предыдущем примере наш список выглядел бы так:

  • api_key: xxx
  • Формат: JSON
  • user_id: гггг

Создать строку подписи

Строка подписи создается путем взятия секрета API, который мы получили ранее, и затем добавления к нему списка аргументов. Например, наша строка подписи будет выглядеть так:

1
0123456789api_keyxxxformatjsonuseridyyy

Подписание нашего звонка

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

Таким образом, любой аутентифицированный вызов имеет этот общий формат

1
http://api.flickr.com/services/rest/?method=ourmethod&api_key=apikey&api_sig=hashedvalue

Теперь, когда мы вышли из системы, мы можем перейти к фактической аутентификации. Для авторизации Flickr использует систему, аналогичную OAuth, что означает, что пользователю, который хочет использовать наше приложение, не нужно разглашать свои учетные данные. Пользователи переносятся на веб-сайт Flickr, где пользователя спрашивают, хочет ли он / она разрешить нашему приложению доступ к данным пользователя.

Вот где появляется лягушка . Чтобы создать ссылку для входа, которая ведет пользователя на страницу авторизации на Flickr, нам нужен способ идентифицировать конкретный сеанс входа в систему.

Чтобы получить лягушку для идентификации сеанса, нам нужно вызвать flickr.auth.getFrob, передавая наш ключ API в качестве именованного аргумента. Наш URL будет выглядеть так:

1
http://api.flickr.com/services/rest/?method=flickr.auth.getFrob&api_key=apikey&api_sig=hashedvalue

Ответ JSON выглядит так:

1
2
3
4
5
6
frobcallback(
   {«frob»:{
       «_content»: «xxx»
       },
    «stat»:»ok»
    })

Успешно получив лягушку, мы теперь можем работать над созданием URL, который позволяет пользователю авторизовать наше приложение. URL для входа имеет следующий общий формат:

1
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&perms=perms&frob=frob

Замените значение api_key на значение, которое мы получили ранее, значение api_sig — хэш MD5 нашей строки подписи, а значение frob — значением frob, возвращаемым API. Параметр perms определяет желаемый уровень доступа к учетной записи и имеет допустимые значения read, write и delete. Каждый доступ включает в себя права всех своих предшественников.

Действительный URL для входа в систему имеет следующую форму:

1
http://flickr.com/services/auth/?api_key=63b08e2efcc22de9900163f4d761fdbc&api_sig=663369798c695dbe2fd7e2af7576dd2b&perms=delete&frob=72157621742082858-8e995a1104e28114-870912

Страница авторизации выглядит так:


Во-первых, Flickr удостоверяется, что пользователь не был обманут в авторизации приложения.

Затем выполняется проверка того, что пользователь знает уровень авторизации, который он / она предоставляет приложению.

Удачной авторизации!

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

Получить токен авторизации так же просто, как вызвать метод flickr.auth.getToken, передав ключ api, frob и подпись api в качестве именованных параметров. URL будет выглядеть так:

1
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&frob=frob

Успешный запрос требует от нас токен авторизации, который можно использовать неограниченное время для доступа к данным конкретного пользователя с помощью определенного ключа API.

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

На базовом минимуме URL для вашего запроса REST должен выглядеть следующим образом. Другие специфичные для метода параметры или параметры, которые изменяют полезную нагрузку, могут добавляться по мере необходимости.

1
http://flickr.com/services/auth/?api_key=xxx&api_sig=yyy&auth_token=zzz&method=method_name

При подписании обязательно включайте другие аргументы и их значения. Это частая причина ошибок и головной боли, и ее легко устранить. Включаете ли вы параметры обратного вызова в URL, чтобы избежать междоменного ограничения в браузерах при использовании AJAX? Те должны идти в строке подписи тоже!

Давайте рассмотрим пример ответа для метода, который возвращает общедоступные фотографии.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
jsonFlickrApi(
    {«photos»: {
        «page»: 1,
        «pages»: 1,
        «perpage»: 100,
        «total»: «2»,
        «photo»: [
            {
                «id»: «3729689790»,
                «owner»: «40318902@N02»,
                «secret»: «ea9c38a675»,
                «server»: «3466»,
                «farm»: 4,
                «title»: «opac»,
                «ispublic»: 1,
                «isfriend»: 0,
                «isfamily»: 0
            },
            {
                «id»: «3729689845»,
                «owner»: «40318902@N02»,
                «secret»: «df6dfee053»,
                «server»: «2531»,
                «farm»: 3,
                «title»: «scale»,
                «ispublic»: 1,
                «isfriend»: 0,
                «isfamily»: 0
            }
          ]
      },
      «stat»: «ok»
})

Это все хорошо, но ответ не содержит URL, на который мы могли бы просто сослаться. Вместо этого мы должны создать URL для рассматриваемого изображения на основе данных, отправленных обратно с сервера. Вот как:

URL любого изображения на Flickr следует четко определенному шаблону. Разблокируйте это, и ответ начинает иметь больше смысла. Вот URL изображения в моем аккаунте.

1
http://farm3.static.flickr.com/2531/3729689790_ea9c38a675_b.jpg

URL состоит из нескольких частей:

  • Идентификатор фермы. 3 в нашем случае.
  • Идентификатор сервера. 2531 здесь.
  • Идентификатор фотографии — способ уникальной идентификации каждой фотографии, размещенной на Flickr. 3729689845 в этом случае.
  • Фото секрет — ea9c38a675
  • Размер изображения — определяет размер возвращаемого изображения. Возможные значения включают o для оригинала, b для ширины / высоты 1024, m для 240, t для 100 и s для 75. Если не указано, по умолчанию используется ширина / высота 500.

Короче говоря, чтобы создать источник изображения, ссылка должна выглядеть так, как показано ниже, если бы мы были созданы для анализа ответа JSON, где data — это переменная, которая содержит ответ:

1
«http://farm» + data.photos.photo[i].farm + «.static.flickr.com/» + data.photos.photo[i].server + «/»+data.photos.photo[i].id + «_»+data.photos.photo[i].secret + «.jpg

Теперь, когда мы взглянули на то, как извлечь данные из Flickr с помощью его API, пришло время взглянуть на то, как отправить данные обратно.

API загрузки Flickr отличается от его API на основе REST или SOAP тем, что в нем нет конечных точек URL, к которым можно было бы просто обращаться и получать данные. Вместо этого данные должны быть отправлены через запрос POST

1
http://api.flickr.com/services/upload/

Поскольку в этой статье не показано, как создать POST-запрос с нуля, мы будем использовать элемент формы со значением enctype multipart / form-data , чтобы сгенерировать весь код для нас. Использование этого определенного атрибута позволяет нам утверждать, что форма содержит двоичные данные, и она должна обрабатываться как таковая. Пример формы будет выглядеть следующим образом.

1
2
3
4
<form enctype=»multipart/form-data» method=»post» action=»http://api.flickr.com/services/upload/»>
<input type=»file» name=»photo»/>
<input type=»submit» name =»submit» value=»Upload»/>
</form>

Но помните, нам все еще нужно отправить в сервис ряд параметров, включая ключ API, токен аутентификации и сигнатуру метода. Как мы это делаем? Это просто вопрос создания скрытого текстового поля и изменения его значения для отображения правильных значений. Вот так:

1
2
3
4
5
6
7
<form enctype=»multipart/form-data» method=»post» action=»http://api.flickr.com/services/upload/»>
<input type=»file» name=»photo»/>
<input type=»hidden» name=»api_key» value=»»/>
<input type=»hidden» name=»auth_token» value=»»/>
<input type=»hidden» name=»api_sig» value=»»/>
<input type=»submit» name =»submit» value=»Upload»/>
</form>

Помните, что при создании хэша MD5 строки подписи вам необходимо загрузить каждый элемент формы, кроме поля фотографии. Это включает в себя значение кнопок отправки, поскольку содержимое всей формы публикуется в URL. Для приведенного выше примера хэш должен быть рассчитан следующим образом:

1
var hash = MD5(secret + «api_key» + apikey + «auth_token» + token + «submitUpload»);

Вы не полностью ограничены этими аргументами. API загрузки принимает множество аргументов, включая название фотографии, ее заголовок и описание. Если вы хотите, вы можете просто позволить пользователю ввести все эти данные вместе с настройками конфиденциальности, например:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<form enctype=»multipart/form-data» method=»post» action=»http://api.flickr.com/services/upload/»>
<input type=»file» name=»photo»/>
<input type=»text» name=»title» value=»»/>
<input type=»text» name=»description» value=»»/>
<input type=»text» name=»tags» value=»»/>
<input type=»text» name=»is_public» value=»0″/>
<input type=»text» name=»is_friend» value=»1″/>
<input type=»text» name=»content_type» value=»1″/>
<input type=»text» name=»hidden» value=»2″/>
<input type=»hidden» name=»api_key» value=»»/>
<input type=»hidden» name=»auth_token» value=»»/>
<input type=»hidden» name=»api_sig» value=»»/>
<input type=»submit» name =»submit» value=»Upload»/>
</form>

Статья о том, как работать с API службы, будет явно неполной, если не рассматривать некоторые из наиболее часто используемых методов API. Имея это в виду, вот несколько методов API, которые должны быть очень полезны, независимо от того, создаете ли вы mashup или просто хотите получить свои собственные данные.

Помните, что для аутентифицированных вызовов требуются действительные значения параметров api_key, api_sig и auth_token, в то время как обычные вызовы могут требовать или не требовать параметров, специфичных для метода. Все вызовы требуют отправки параметра api_key. Поэтому, если я упомяну, что вызов требует аутентификации, то факт, что вызов требует других аргументов, подразумевается неявно. Аргументы, указанные ниже, являются необязательными, если не указано иное. Методы, которые возвращают список данных, также принимают аргумент page и per_page для определения своих однофамильцев.

Я включил ответы по каждому методу, чтобы дать вам представление о данных, которые возвращаются нам. Я использовал JSON в качестве формата ответа, так как большинство разработчиков, с которыми я работаю, любят JSON лучше, чем XML.

flickr.activity.userPhotos
Возвращает список последних действий с фотографиями, принадлежащими вызывающему пользователю.

Аргументы : таймфрейм — Определяет период времени, в течение которого нужно искать обновления.

Аутентификация : да

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
    «items»: {
          «item»:[
               {
                   «type»: «photo»,
                   «id»: «3728895285»,
                   «owner»: «40318902@N02»,
                   «ownername»: «lordtottuu»,
                   «secret»: «df6dfee053»,
                   «server»: «3466»,
                   «farm»: 4,
                   «title»: {
                         «_content»: «opac»
                        },
                   «commentsold»: 1,
                   «commentsnew»: 0,
                   «notesold»: 0,
                   «notesnew»: 0,
                   «views»: 0,
                   «faves»: 0,
                   «more»: 0,
                   «activity»: {
                         «event»: [
                               {
                                   «type»: «comment»,
                                   «commentid»: «40298554-3728895285-72157621628251433»,
                                   «user»: «40318902@N02»,
                                   «username»: «lordtottuu»,
                                   «dateadded»: «1248131143»,
                                   «_content»: «Demo image for my upcoming article on Net Tuts»
                               }
                            ]
                        }
                  }
            ],
          «page»: 1,
          «pages»: 1,
          «perpage»: 10,
          «total»: 1
      },
     «stat»: «ok»
}

flickr.contacts.getList
Возвращает список контактов для вызывающего пользователя.

Аргументы : фильтр — Аргумент для фильтрации списка. Допустимые значения включают друзей, семью, и то и другое.

Аутентификация : да

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    «contacts»: {
          «page»: 1,
          «pages»: 1,
          «per_page»: 1000,
          «perpage»: 1000,
          «total»: 2,
          «contact»: [
              {
                 «nsid»: «7488445@N05»,
                 «username»: «thegleek»,
                 «iconserver»: «179»,
                 «iconfarm»: 1,
                 «ignored»: 0,
                 «realname»: » Mike Poleski»,
                 «friend»: «1»,
                 «family»: «0»,
                 «path_alias»: null,
                 «location»: «»
              }
           ]
        // Rest of the contacts
     },
    «stat»: «ok»

flickr.favorites.getList
Возвращает список фотографий, отмеченных избранным конкретным пользователем.

Аргументы : min_fave_date, max_fav_date — говорят сами за себя.

Аутентификация : да

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    «photos»: {
          «page»: 1,
          «pages»: 1,
          «perpage»: 100,
          «total»: «3»,
          «photo»: [
               {
                  «id»: «2332823355»,
                  «owner»: «53555705@N00»,
                  «secret»: «e603be40a2»,
                  «server»: «2333»,
                  «farm»: 3,
                  «title»: «Xbox 360 still life»,
                  «ispublic»: 1,
                  «isfriend»: 0,
                  «isfamily»: 0,
                  «date_faved»: «1248134938»
               }
            ]
          // Rest of the photos
      },
    «stat»: «ok»
}

flickr.people.getPublicPhotos
Получить список общедоступных фотографий для данного пользователя.

Аргументы : nsid [обязательный] — идентификатор вызывающего пользователя, safe_search — для блокировки содержимого NSFW.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
    «photos»: {
          «page»: 1,
          «pages»: 1,
          «perpage»: 100,
          «total»: «15»,
          «photo»: [
               {
                   «id»: «3728895285»,
                   «owner»: «40318902@N02»,
                   «secret»: «df6dfee053»,
                   «server»: «3466»,
                   «farm»: 4,
                   «title»: «opac»,
                   «ispublic»: 1,
                   «isfriend»: 0,
                   «isfamily»: 0
                }
            ]
        // Rest of the photos
      },
     «stat»: «ok»
}

flickr.groups.getInfo
Получить информацию о конкретной группе.

Аргументы : group_id [обязательный] — идентификатор группы, о которой вы ищете информацию.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
    «group»: {
           «id»: «51035612836@N01»,
           «iconserver»: «1»,
           «iconfarm»: 1,
           «name»: {
                 «_content»: «Flickr API»
           },
           «description»: {
                 «_content»: string»A Flickr group for Flickr API projects. Driving awareness of the Flickr API, projects that use it and those incredible ideas that programmatically exposed systems produce. Think Google API + Amazon API + Flickr API with a bit of GMail thrown in. The developers of Flickr rightly pointed out they want to keep technical discussions directly related to the API on the mailing list.»
           },
           «members»: {
                 «_content»: «7775»
           },
           «privacy»: object{
                 «_content»: «3»
           },
           «lang»: null,
           «ispoolmoderated»: 1,
           «throttle»: object{
                 «count»: «3»,
                 «mode»: «day»
           },
           «restrictions»: object{
                 «photos_ok»: 1,
                 «videos_ok»: 1,
                 «images_ok»: 1,
                 «screens_ok»: 1,
                 «art_ok»: 1,
                 «safe_ok»: 1,
                 «moderate_ok»: 0,
                 «restricted_ok»: 0,
                 «has_geo»: 0
           }
     },
     «stat»: «ok»
}

flickr.photos.getExif
Извлекает EXIF ​​данные существующей фотографии.

Аргументы : photo_id [обязательный] — идентификатор фотографии, данные EXIF ​​которой должны быть извлечены.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
 
    «photo»: {
          «id»: «2332823355»,
          «secret»: «e603be40a2»,
          «server»: «2333»,
          «farm»: 3,
          «exif»: [
                  {
                      «tagspace»: «TIFF»,
                      «tagspaceid»: 1,
                      «tag»: 271,
                      «label»: «Make»,
                      «raw»: {
                            «_content»: «Canon»
                        }
                  },
                  {
                      «tagspace»: «TIFF»,
                      «tagspaceid»: 1,
                      «tag»: 272,
                      «label»: «Model»,
                      «raw»: {
                            «_content»: «Canon EOS 350D DIGITAL»
                        }
                  },
                // Rest of the exif data
            ]
      },
    «stat»: «ok»
}

flickr.photos.geo.getLocation
Возвращает широту и долготу места, где была сделана конкретная фотография.

Аргументы : photo_d [обязательный] — идентификатор фотографии, местоположение которой должно быть известно.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
     «photo»: object{
         «id»: string»229097925″,
         «location»: object{
                 «latitude»: -33.856874,
                 «longitude»: 151.214672,
                 «accuracy»: «16»,
                 «context»: «0»,
                 «locality»: {
                       «_content»: «Sydney»,
                       «place_id»: «p50kaZyYAJx9BZHQ»,
                       «woeid»: «1105779»
                 },
                 «region»: object{
                       «_content»:»New South Wales»,
                       «place_id»: «puGzSeubAphuNnF2»,
                       «woeid»: «2344700»
                 },
                 «country»: object{
                       «_content»: «Australia»,
                       «place_id»: «om3Zr2abAphqrm3jdA»,
                       «woeid»: «23424748»
                 },
                 «place_id»: string»p50kaZyYAJx9BZHQ»,
                 «woeid»: string»1105779″
           }
     },
    «stat»: string»ok»
}

flickr.photos.getFavorites
Возвращает список людей, которые отметили переданную фотографию как избранное.

Аргументы : photo_id [обязательно] — идентификатор фотографии, о которой идет речь.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
{
     «photo»: {
           «person»: [
               {
                   «nsid»: «39011391@N06»,
                   «username»: «derek1960»,
                   «favedate»: «1243834286»
               },
               // Rest of the photos
            ],
           «id»: «229097925»,
           «secret»: «13a21546fb»,
           «server»: «61»,
           «farm»: 1,
           «page»: 1,
           «pages»: 2,
           «perpage»: 10,
           «total»: «18»
      …},
     «stat»: «ok»
}

flickr.places.getTopPlacesList
Возвращает список из 100 самых отмеченных мест за день.

Аргументы : place_type_id [обязательный] — числовой идентификатор места, чтобы определить, как кластеризовать фотографии.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
{
     «places»: object{
           «total»: number100,
           «place»: [
               {
                   «place_id»: «4KO02SibApitvSBieQ»,
                   «woeid»: «23424977»,
                   «latitude»: «48.890»,
                   «longitude»: «-116.982»,
                   «place_url»: «/United+States»,
                   «place_type»: «country»,
                   «place_type_id»: «12»,
                   «_content»: «United States»,
                   «photo_count»: «23654»
               },
               // Rest of the 99 countries
            ],
           «date_start»: 1248048000,
           «date_stop»: 1248134399
      },
     «stat»: «ok»
}

flickr.tags.getHotList
Возвращает список наиболее часто используемых тегов за указанный период времени.

Аргументы : period — указывает период, за который нужно получить теги. count — указывает количество тегов, которые нужно вернуть в ответе.

Аутентификация : нет

отклик

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
{
     «hottags»: {
           «period»: «day»,
           «count»: 20,
           «tag»: [
               {
                  «score»: «100»,
                  «_content»: «sundaystreets»
               },
               {
                  «score»: «100»,
                  «_content»: «happymondayblues»
               },
               {
                  «score»: «100»,
                   «_content»: «melbourneopenhouse2009»
               }
            ]
      },
     «stat»: string»ok»
}

В этой вводной части серии мы рассмотрели, как работать с API Flickr, в том числе как получать общедоступные и личные данные, проходить аутентификацию с помощью API и как загружать данные в сервис. Мы также рассмотрели некоторые из наиболее используемых методов API вместе с их ответами JSON, чтобы лучше понять структуру данных, которые API отправляет обратно.

Какой API рассматривается ниже, зависит только от вас. Здесь, в Net Tuts, мы ориентируемся на популярный спрос, и поэтому мы позволим вам, читателям, решить, о каком API сервиса будет написано следующее. В вашем комментарии ниже, при необходимости, оставьте название сервиса и интерфейс API. Мы рассмотрели REST в этой статье, но мы будем рады рассмотреть API на основе SOAP или XML-RPC, если этого захотят достаточно люди.

Вопросов? Хорошие вещи, чтобы сказать? Критицизмы? Нажмите на раздел комментариев и оставьте мне комментарий. Удачного кодирования!