iTunes + YouTubeで「iTube」

iTunesのToday's Ranking Feedを取得して、曲名やアーチスト名をキーワードにYouTubeの動画を検索して閲覧できる「iTube」を作ってみました。

iTunesのFeedはGoogle Ajax Feed APIを使えば簡単に取得できる。
自分でごにょごにょしたいなら、こんなものも作ってみたので気が向いたらどぞ。



YouTubeのAPIも使っていますが難しいことは何もしておらず、keywordを投げて動画を検索して、返ってきたものを表示する、それだけです。
参考程度にjQueryで簡単な関数にして使用したものを貼っときます。


実際に動画を見るために使用しているのが、AJAX Libraries APIからホスティングされている、SWFObjectです。
これを使用しなくても動画を見ることは可能なのかもしれませんが、私の場合、Firefox3では問題ないのですが、IEだと動画を再生できないことに悩んでいたので、これを使用して解決しました。


一々"HQ"ボタンを押すのが面倒なので、最初からHigh Quality Mode("HQ"ボタンを押した状態)にならないかといろいろ触ってみたのですが、結局分かりませんでした。
よくある「fmt=18」などはダメでしたが、"HQ"ではなく、"HD"なら「hd=1」でいけました。
"HD"が「hd=1」なら"HQ"は「hq=1」でイケんじゃね~、とか思って試したがこれももちろんダメ。 ...orz


これを作ってる最中に Lady GaGa の曲を聞いてるうちにだんだん好きになったり、 Taylor Swift や Jonas Brothers なんかを知ったりなど、いろいろ発見があった。まあ、それが目的で作ったんだけどね。



参考:

Javascript Regular Expressions Pattern Check をリニューアル

Google Page Creatorからの移動も兼ねて、Javascript Regular Expressions Pattern Checkをリニューアルしました。

GAEのサイトから公開しています。

その他にも color and font style testerString Replace もリニューアルしています。

とりあえず、スタティックなファイルとしてアップロードしているだけですが、これから徐々にGAEを触りながら機能を増やしていけたらと考えています。


公開しているページ(ツール)の説明

Javascript Regular Expressions Pattern Check
JavaScriptの正規表現パターンのチェックを行うツールです。 正規表現に関する簡単な説明と正規表現のパターンを入力して実際に動作を試すことが出来ます。 基本的なパターンの他、郵便番号や携帯電話などの実際に使用可能な正規表現パターンも掲載しています。
確認可能な動作:
  • match
  • replace
  • test
  • search
  • exec
color and font style tester
HTMLのフォントカラーやフォントスタイルをテストするツールです。 実際にHTML上でどのように見えるのか、色やフォントの種類、スタイルなどを簡単に切り替えて確認することが出来たら便利だと思い作ってみました。切り替えられるものは、color、background-color、font-family、font-style、font-weight、font-size、そして実際に表示する文字を書き換えることができます。
String Replace
例えばブログにコードなどの特殊文字が含まれたテキストを投稿するとき、それらの文字を変換する必要がある場合がありますが、一々そんなことを自力で行うのは面倒なので、このツールで特殊文字を一発で変換します。
その他にも、prettify や Syntax Highlighter を使用している場合、タグで囲んだり class 属性や name 属性を書き込む必要がありますが、それもこのツールによって簡単に行うことができます。

Google ReaderのAPIを使ってFeedを取得する

ワザワザこんなことをしなくてもGoogle Feed APIを使えばいいのだが、こんなことも出来るよ、程度の話で。

基本的なURLは以下の通り

http://www.google.com/reader/public/javascript/feed/[url]

これをjQueryのメソッドにしてみる。

Code

(function($){
$.gReaderFeed = function(url, options, fn){
  var opt = $.extend({
    n:10
  }, options);
  
  $.getJSON('http://www.google.com/reader/public/javascript/feed/' + url + '?callback=?', opt, fn);
}
})(jQuery);

Usage

気まぐれでjQueryを使わずに書いてみた。
$.gReaderFeed('http://googleblog.blogspot.com/feeds/posts/default',
  {'alt':'json'}, 
  function ( data ){    
    var list = document.createElement('ul');
    
    for (i in data.items) {
      var item = data.items[i];
      var post = document.createElement('li');
      
      var link = document.createElement('a');
      link.appendChild(document.createTextNode(item.title));
      link.href = item.alternate.href;
      post.appendChild(link);
      
      var timestamp = document.createElement('span');
      timestamp.appendChild(document.createTextNode(' - ' + 
        (function( date ){
          return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
        })(new Date(item.published * 1000))));
      post.appendChild(timestamp);
      
      list.appendChild(post);
    }
    
    document.body.appendChild(list);
});
どんな引数があるか調べてみないと分からないが、多分資料は出てこないだろう。

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メソッド使用してタイムアウトの時間を設定した方が良いかもしれない。

Google Web Elementsで唯一目新しいのはYouTube News Elementだけだ

Google Web Elements なるものを見かけチェックしたのだが、実際に目新しいのは「YouTube News Element」だけで、他は既に存在していたものを集めてきたにすぎない。

例えば、Custom Search ElementはCustomSearchControlを使用しているが、これは以前から存在し、既にネタとしては古い部類と言える。何ならGoogle AJAX Search API - Google Codeに行けば他にも色々あるので試してみるとイイ。

Google NewsのNews Elementはガジェットとしては新しい部類だが、Google AJAX Search API - AJAX News Barに行けばあるものであって、特に目新しくもない。

Conversation ElementはGoogle Friend Connectに行けば他にも様々なガジェットがあるので、そちらで選んだほうが良いだろう。

その他に関しても、ソースを見れば分かるが、APIで情報を取得してiframe内に表示しているだけで、それらのAPIは既に多くで使われているモノであり、何ら難しいことはしていない。Calendar Element, Spreadsheets Element, Presentations Elementは、あまりネタの古さを気にしない私でさえネタにするには躊躇するほど以前からあるもので、決してAPI自体目新しいものではない。

唯一、目新しい「YouTube News Element」に関しては、YoutubeのAPIは既にかなり前からあったのだが、このようなガジェットとして公開するのはGoogle Web Elementsがお初のはず。

よって、「Googleが"YouTube News Element"など言うYoutubeの指定したチャンネルの動画を表示、スライドさせるガジェットを公開した。」が正しい反応である。

何処かで「...パワーアップさせてかなりすごい!」などと言っているのを目にしたら突っ込んであげて下さい。

今ホントに目新しいものと言えば Google Wave だろうね。

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

Recent Posts