Flickr API - 获取原始标签

时间:2014-02-24 13:33:06

标签: jquery flickr

我正在尝试修改jQuery library,以简化与Flickr API的通信,以获取raw versions Flickr标记,而不是clean/machine-readable versions

以下excerpt库负责使用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)
    }
  }

但它不起作用。我确定我错过了一些东西,并希望能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

我认为这种方法已被打破,或者至少不像宣传的那样有效。为了获得某些标签的原始版本,您可能必须使用flickr.tags.getListPhoto方法使用变通方法:https://www.flickr.com/services/api/explore/flickr.tags.getListPhoto - 由于您无法直接传递标签,因此您首先必须使用机器可读版本,获取返回的第一张照片的ID并将其传递给getListPhoto。