2014-02-24 124 views
0

我試圖修改一個jQuery library,簡化與Flickr API的溝通,獲取Flickr標籤的raw versions,而不是clean/machine-readable versionsFlickr API - 獲取原始標籤

以下圖書館的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="[email protected]"> 
    <tags> 
    <tag>gull</tag> 
    <tag>tag1</tag> 
    <tag>tag2</tag> 
    <tag>tags</tag> 
    <tag>test</tag> 
    </tags> 
</who> 

而對於flickr.tags.getListUserRaw標籤返回的是這樣的:

<who id="[email protected]"> 
    <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) 
    } 
    } 

但它不起作用。我確信我錯過了一些東西,並會感激我指着正確的方向。

回答

0

我覺得這個方法斷或至少不工作作爲標榜。爲了獲得某些標籤的原始版本,您可能必須使用flickr.tags.getListPhoto方法使用解決方法:https://www.flickr.com/services/api/explore/flickr.tags.getListPhoto - 由於您無法直接傳遞標籤,因此首先必須使用機器可讀版本進行照片搜索,取回返回的第一張照片的ID並將其傳遞給getListPhoto。