へ?

iTunes StoreってWeb APIもってたの?

持ってましたよ。しかもJSONPが使える。

というわけで、検索できるようにしてみました。

Demo

JS Source

いたってシンプルです。

(function(d){

var $ = function(id){ return d.getElementById(id) };

var json2list = function(json){
    var ul = d.createElement('ul');
    ul.style.listStyleType = 'none';
    if (json['artworkUrl100']){
        var a = d.createElement('a');
        a.href = json['itemLinkUrl'];
        a.target = '_blank';
        var img = d.createElement('img');
        img.setAttribute('style', 'float:right; margin-right:0.5em');
        img.src = json['artworkUrl100'];
        a.appendChild(img);
        ul.appendChild(a);
    }
    var keys = [];
    for (var p in json) keys[keys.length] = p;
    keys.sort();
    for (var i = 0, l = keys.length; i < l ; i++){
        var p = keys[i];
        if (p.match(/Url/)) continue;
        var li = d.createElement('li');
        li.appendChild(d.createTextNode(p + ': '));
        if (json[p]) li.appendChild(
            typeof(json[p]) === 'object' ? arguments.callee(json[p])
                                         : d.createTextNode(json[p])
        );
        ul.appendChild(li);
   }
   return ul;
};

JSONP = {
  get:function(term){
    var u = 'http://ax.phobos.apple.com.edgesuite.net'
          + '/WebObjects/MZStoreServices.woa/wa/itmsSearch?'
          + ['output='   + 'json',
             'callback=' + 'JSONP.run',
             'country='  + 'JP',
             'lang='     + 'ja_jp',
             'term='     + encodeURIComponent(term)
          ].join('&');
    var s = d.createElement('script');
    s.charset = 'UTF-8';
    s.id = s.src = u;
    d.body.appendChild(s);
  },
  run:function(json){
    $('its.attr').innerHTML = '';
    if (json.errorMessage){
         $('its.attr').appendChild(json.errorMessage);
    }else{
        var ol = d.createElement('ol');
        for (var i = 0, l = json.resultCount; i < l; i++){
            if (!json.results[i]) continue;
            var li = d.createElement('li');
            li.appendChild(json2list(json.results[i]));
            ol.appendChild(li);
        }
        $('its.attr').appendChild(ol);
    }
  }
};

})(document);

Enjoy!

Dan the Ajax Monger