簡體   English   中英

Flickr API-獲取原始標簽

[英]Flickr API - getting raw tags

我正在嘗試修改jQuery庫 ,以簡化與Flickr API的通信,以獲取Flickr標簽的原始版本 ,而不是干凈的/機器可讀的版本

庫的以下摘錄負責使用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.tags.getListPhoto方法來使用變通方法: https ://www.flickr.com/services/api/explore/flickr.tags.getListPhoto-自從您開始無法直接傳遞標簽,您首先必須使用機器可讀的版本進行照片搜索,獲取返回的第一張照片的ID,然后將其傳遞給getListPhoto。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM