Как я могу получить все flickr фотосеты пользователя, используя YQL? - PullRequest
0 голосов
/ 25 июля 2010

все, что мне нужно сделать, это найти все фотосеты user_id, а затем получить все фотографии в этом фотосете, если нажать на фотосет с помощью YQL

1 Ответ

0 голосов
/ 29 июля 2010

Пока нет встроенной таблицы для вызова метода flickr.photosets.getList для API Flickr (что вам и нужно). Тогда есть два способа получить данные, которые вы ищете: запросить Flickr с помощью таблицы xml YQL или создать собственную таблицу, которая может абстрагироваться от деталей доступа к API Flickr.

1. Запрос API Flickr с помощью таблицы XML

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

Подход здесь заключается в том, чтобы использовать таблицу XML, которая при запросе со специально созданным URL-адресом и путем к нужным результатам вернет нужные вам фотосеты. Ниже мы сделаем запрос с использованием моего API-ключа (чтобы вы не получили свой собственный, хотя это было бы неплохо) и запросим фотосеты у разработчика evangelist , который работает в Yahoo (мне пришлось выбрать кто-то, его Flickr был первым, кто пришел в голову).

select * from xml
where url="http://api.flickr.com/services/rest/?method=flickr.photosets.getList&api_key=9aae7ac1770fdd8027b7aec220ae6400&user_id=11414938@N00"
and itemPath="rsp.photosets.photoset"

( Попробуйте этот запрос в консоли YQL )

XML-структура, возвращаемая из этого (вместе с обычными YQL-компонентами), выглядит как фрагмент кода ниже (если только вы не возвращаете JSON, который будет содержать ту же информацию, но только не в формате XML).

    <photoset farm="5" id="72157624272957243" photos="16"
        primary="4751612752" secret="b799dcf7d6" server="4139" videos="0">
        <title>Mozilla Add-Ons</title>
        <description/>
    </photoset>
    <photoset farm="5" id="72157624375645496" photos="83"
        primary="4741533835" secret="f6e66e4aef" server="4122" videos="0">
        <title>Carter Steam Fair in Clissold Park</title>
        <description/>
    </photoset>
    <photoset farm="5" id="72157624250084729" photos="27"
        primary="4741892180" secret="c7001a3307" server="4141" videos="0">
        <title>Stokey</title>
        <description>Stuff happening in Stoke Newington in London</description>
    </photoset>

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

Раньше я говорил, что есть другой способ.

2. Создайте собственную таблицу flickr.photosets.getList

Детали построения таблицы на заказ для запроса немного вышли бы за рамки разумного ответа здесь: ознакомьтесь с основами и мелкими деталями, перейдите к документации YQL по этому вопросу на http://developer.yahoo.com/yql/guide/yql-creating-opentables-chapter.html

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

Таблица представляет собой XML-документ, описывающий, как общаться с методом flickr.photosets.getList Фликра

<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
  <meta>
    <sampleQuery>select * from {table} where user_id="11414938@N00"</sampleQuery>
    <description>Retrieve the photosets belonging to the specified user.</description>
    <documentationURL>http://www.flickr.com/services/api/flickr.photosets.getList.html</documentationURL>
    <author>Peter Cowburn</author>
  </meta>
  <bindings>
   <select itemPath="rsp.photosets.photoset" produces="XML">
      <urls>
        <url env="all">http://api.flickr.com/services/rest/?method=flickr.photosets.getList</url>
      </urls>
      <inputs>
        <key id="user_id" type="xs:string" paramType="query" />
        <key id="api_key" type="xs:string" const="true" private="true" paramType="query" default="9aae7ac1770fdd8027b7aec220ae6400"/>
      </inputs>
    </select>
  </bindings>
</table>

Чтобы использовать эту пользовательскую таблицу, вам нужно разместить ее в сети где-нибудь, чтобы YQL ее увидел. Я загрузил его в хранилище Yahoo!, Поэтому URL (store://…) может показаться немного странным.

А теперь немного о том, чего вы ждали: что-то полезное для вас!

Как использовать наш пользовательский стол

use "store://github.com/flickr/photosets/getList" as photosets;
select * from photosets where user_id="11414938@N00"

( Попробуйте этот запрос в консоли YQL )

Заключение

Вышеприведенное (только последний запрос, так как я уже сделал для вас таблицу) - это все, что вам нужно, чтобы получить список фотосетов пользователя Flickr. Просто:

use "store://github.com/flickr/photosets/getList" as photosets;
select * from photosets where user_id="11414938@N00"

И, наконец, для получения фотографий, относящихся к набору, уже есть встроенная таблица с именем flickr.photosets.photos, поэтому вам даже не нужно use настраиваемую таблицу:

select * from flickr.photosets.photos where photoset_id='72157624272957243'
...