Flickr API - получение необработанных тегов

0

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

Ниже выдержка из библиотеки отвечает за получение чистых тегов с flickr.tags.getListUser метода flickr.tags.getListUser:

  // handles requesting list of tags

  $.flickr.tags = function(method, options, select) {
    var options = $.extend($.flickr.settings, options || {}),
          elements = $.flickr.self, tags

    return elements.each(function() {
      $.getJSON($.flickr.url(method, options), function(data) {
        var list = $.flickr.tags.selectList(data.who.tags, select);
        elements.append(list);
      })
    })
  }

  // converts tags into select list.

  $.flickr.tags.selectList = function(tags, options) {

    var optionList = $.map(tags.tag, function(tag) {
      return ['<option value="' + tag._content + '">' + tag._content + '</option>']
    }).join("\n")

    var selectList = $('<select class="flickr"></select>');
    if (options.multiple === true)
      selectList.attr('multiple', 'multiple');
    if (options.size !== undefined && options.size > 0)
      selectList.attr('size', options.size);
    if (options.prompt !== undefined && options.prompt != '')
      selectList.append('<option value="" selected="selected">' + options.prompt + '</option>');
    if (typeof(options.onchange) === 'function')
      selectList.change(options.onchange);

    return selectList.append(optionList)
  }

  // namespace to hold available API methods

  $.flickr.methods = {
    // http://www.flickr.com/services/api/flickr.tags.getListUser.html

    tagSelect: function(options, select) {
      $.flickr.tags('flickr.tags.getListUser', options, select)
    }
  }

До сих пор я не увенчался успехом в модификации выше, чтобы использовать метод flickr.tags.getListUserRaw. Разница между этими двумя методами заключается в том, как возвращаются теги:

Теги flickr.tags.getListUser возвращаются следующим образом:

<who id="12037949754@N01">
  <tags>
    <tag>gull</tag>
    <tag>tag1</tag>
    <tag>tag2</tag>
    <tag>tags</tag>
    <tag>test</tag>
  </tags>
</who>

И для flickr.tags.getListUserRaw теги возвращаются следующим образом:

<who id="12037949754@N01">
  <tags>
    <tag clean="foo">
      <raw>foo</raw>
      <raw>Foo</raw>
      <raw>f:oo</raw>
    </tag>
  </tags>
</who>

Итак, я изменил код следующим образом:

  // handles requesting list of tags

  $.flickr.tags = function(method, options, select) {
    var options = $.extend($.flickr.settings, options || {}),
          elements = $.flickr.self, tags

    return elements.each(function() {
      $.getJSON($.flickr.url(method, options), function(data) {
        var list = $.flickr.tags.selectList(data.who.tags, select);
        elements.append(list);
      })
    })
  }

  // converts tags into select list.

  $.flickr.tags.selectList = function(tags, options) {

    var optionList = $.map(tags.tag, function(tag) {
      return ['<option value="' + tag.attr('clean') + '">' + tag.raw._content + '</option>']
    }).join("\n")

    var selectList = $('<select class="flickr-tags" data-placeholder="Choose a tag..."></select>');
    if (options.multiple === true)
      selectList.attr('multiple', 'multiple');
    if (options.size !== undefined && options.size > 0)
      selectList.attr('size', options.size);
    /*
    if (options.size == undefined)
      selectList.attr('size', tags.size);
    */
    if (options.prompt !== undefined && options.prompt != '')
      selectList.append('<option value="" selected="selected">' + options.prompt + '</option>');
    if (typeof(options.onchange) === 'function')
      selectList.change(options.onchange);

    return selectList.append(optionList)
  }

  // namespace to hold available API methods

  $.flickr.methods = {
    // http://www.flickr.com/services/api/flickr.tags.getListUserRaw.html
    tagSelect: function(options, select) {
      $.flickr.tags('flickr.tags.getListUserRaw', options, select)
    }
  }

Но это не сработает. Я уверен, что что-то пропустил и хотел бы указать на меня в правильном направлении.

Теги:
flickr

1 ответ

0

Я думаю, что этот метод нарушен или, по крайней мере, не работает, как рекламируется. Чтобы получить необработанную версию некоторых тегов, вам, возможно, придется использовать обходной путь, используя метод flickr.tags.getListPhoto: https://www.flickr.com/services/api/explore/flickr.tags.getListPhoto - поскольку вы не может передать тег напрямую, вам сначала нужно выполнить поиск фотографий с помощью машиносчитываемой версии, взять идентификатор первой фотографии и передать ее в getListPhoto.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню