jQuery + Google AJAX Feed API

以前にも何度かここでGoogle AJAX Feed APIについて書いてたのだが、JQuery HowTo: Google Feeds API - jQuery pluginを見て、もっとシンプルな使用方法があったことを知った。

クラス リファレンス - Google AJAX Feed API - Google Codeを再度確認して今一度。

上記で挙げたpluginでは渡す引数の順番に気をつけなければならないのが不満なので、使いやすいように書き直してみる。

Code

$.gFeed = function(options, callback){
  var opt = $.extend({
    v: '1.0',
    num: 10
  }, options);
  
  if (!opt.q) 
    return false;
  
  $.getJSON(
    'http://ajax.googleapis.com/ajax/services/feed/load?callback=?',
    opt,
    function(data){
      if (data) 
        callback.call(this, data.responseData.feed);
    });
}

使用できる引数の種類は「q, v, hl, key, context, num, scoring, output」
引数の説明はURL 引数で確認できます。

Usage

$.gFeed({
  'q': 'http://yas-hummingbird.blogspot.com/rss.xml'
  }, function(feed){
    var lst = [];
    for(var i=0; i<feed.entries.length; i++){
      var entry = feed.entries[i];
      lst.push(
        '<span><a href=' + entry.link + ' >' + entry.title + '</a></span>' + 
        '<span> - ' + 
        (function (date) {
          return (date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate());
        })(new Date(entry.publishedDate)) + 
        '</span>');
    }
    
    $(document.body).append('<ul><li>' + lst.join('</li><li>') + '</li></ul>');
});



iTunes Feed

このgFeedを利用して、さらに特定のFeedを取得するメソッドを作成する方が使いやすいだろうということで、iTunesのFeedを取得するメソッドを作成してみる。

Code

(function($){
$.iTunes = {
  categories: {
    Top_Albums: 'topalbums',
    Top_Songs: 'topsongs',
    New_Releases: 'newreleases',
    Just_Added: 'justadded',
    Featured_Albums: 'featuredalbums',
    _default: 'topalbums'
  },
  genre: {
    all: 0,
    country:6,
    electronic: 7,
    folk: 10,
    jazz:11,
    newAge: 13,
    pop: 14,
    rb_Soul: 15,
    dance:17,
    hiphop_Rap: 18,
    world: 19,
    rock: 21,
    vocal:23,
    reggae:24,
    jPop: 27
    // etc ...
  },
  feed: function( params, options, callback){
    var prms = $.extend({
      category:'topalbums',
      country:143462,
      limit:10,
      genre:0
    }, params);
    
    var countries = {
      usa: 143441,
      france: 143442,
      germany: 143443,
      uk: 143444,
      italy: 143450,
      canada:143455,
      australia: 143460,
      japan: 143462,
      // etc ...
      _default: 143462
    };
    
    prms.country = (function(c){
      return (+c == c) ? c : countries[c.toLowerCase()] || countries._default;
    })(prms.country);
    
    callback = $.isFunction(options) ? options : callback || function(){};
    options = ( !options || $.isFunction(options) ) ? {} : options;
    options.q = 
      'http://ax.itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/' + 
      prms.category +
      '/sf=' + prms.country +
      '/limit=' + prms.limit +
      '/genre=' + prms.genre + '/rss.xml';
    
    $.gFeed(options, callback);
  }
}
})(jQuery);

Usage

$.iTunes.feed({
    category:$.iTunes.categories.Top_Albums,
    country:'japan',
    limit:10,
    genre:$.iTunes.genre.dance
  },
  function(feed){
    var $div = $('<div>').append($('<h3>').text(feed.description));
      $.each(feed.entries, function(i, entry){
      $div.append(entry.content);
      });
    $(document.body).append($div);
});


実際に使用して気付いたのだが、iTunesのFeedは応答が少々遅いのか、たまにではあるが初回読み込み時にタイムアウトしてしまい、Feedを表示できないことがある。
こういう場合、やはりgetJSONを使用するよりajaxメソッド使用してタイムアウトの時間を設定した方が良いかもしれない。

0 Comments:

Sony Style(ソニースタイル)
デル株式会社

Recent Posts