messagepackを使ってみよう。 その1〜はじめに〜

messagepackを利用する機会に巡りあったので、勉強の成果を備忘録としてまとめてみます。

スタート地点

JSONよりもいけてるプロトコルあるよ、というのを小耳に挟んだレベル。
正直何がどういけてるのか全然わかってません。

目標

というわけで、どのレベルまで頑張るのか決めてみました。

  1. messagepackの原理を大まかに理解する。
  2. messagepackの用途を理解する。
  3. messagepack-rpcを使って、サーバ・クライアント間通信を実現する。Javaで。

目標を更に細かく

もう少し目標を細かく設定してみます。

  1. messagepackの原理を大まかに理解する。
    1. messagepackとは?
    2. どんな特徴?
    3. どんな仕様?
  2. messagepackの用途を理解する。
    1. 何に利用されている?
    2. 何に利用できそうか?
  3. messagepack-rpcを使って、サーバ・クライアント間通信を実現する。Javaで。
    1. eclipseでmessagepack-rpcが利用できる環境を作ろう。
    2. サンプルアプリを作ってみよう。
    3. Seasarと連携してサーバーアプリを作ろう。
    4. Androidと連携してクライアントアプリを作ろう。

ん、これくらい細かいとやりやすいかな。
では、今回は目標1の1番「messagepackとは?」まとめてみます。

messagepackとは?

まずは、messagepackって一言でいうとなんでしょう。
中の人曰く、

Introducing the MessagePack

The Messagepack Project

  • MessagePack is a binary-based efficient object serialization library.

なるほど、なるほど。
MessagePackはシリアライズのための機能をまとめたライブラリなのですね。
で、バイナリにシリアライズするから効率的だと。


あれ?シリアライズってなんだっけ?
それにバイナリにすると、何に比べてどう効率的なんだっけ?

シリアライズってなんだっけ?

wikiの説明だと、

  1. ある一つの資源を、複数の主体が利用しようとするときに、それを調整して、一つの時点では一つの主体だけがそれを利用するようにすること。この意味では逐次化という訳語が用いられる。対義語は並列化である。
  2. ある環境に存在しているオブジェクトをバイト列やXMLフォーマットに変換すること。この意味では直列化という訳語が用いられる。同義語にMarshallingがある。対義語は直列化復元ないしデシリアライズである。

また、Javaだと、

オブジェクト直列化は、オブジェクトとそこから参照されているオブジェクトをバイトストリームにコード化します。

とあります。
ああ、ファイルを保存する前や通信する前にデータを変換するあれですね。理解理解。

バイナリにすると、何に比べてどう効率的なんだっけ?

同じシリアライズライブラリでかつ公式での比較対象として、JSONがあげられています。
まず、「シリアライズとデシリアライズの速度」について比較し、messagepackの方が優れた結果を出していることを取り上げています。
そして、その理由として「データ形式」の違いを言及しています。
JSONがテキスト形式に対して、前述したようにmessagepackはバイナリ形式。
そのため、messagepackの方がデータ量が小さくなり、その結果として高速なシリアライズとデシリアライズを可能にしているようです。

今回のまとめ

messagepackとは?

  1. messagepackは、オブジェクトをバイナリ形式に変換してくれるシリアライズライブラリである。
  2. messagepackは、オブジェクトをバイナリ形式に変換することで変換後のデータが小さくなる。そのため、帯域を消費を抑制したり、CPUの負荷を低減したりと効率的な側面を持つ。

といった感じかな?
今回は、これくらいで。時間を見つけてまた続きを書きたいと思います。

参考リンク

この記事、そしてこれからの記事を書くにあたり、中の人の記事を参考にさせてもらいました。
私のを読むよりも、ずっと参考になるのでどうぞ。

The Messagepack Project
公式サイトです。
ここのLearn Moreに基礎的な話が書いてあります。一回は読んだ方がいいです。
Introducing the MessagePack
MessagePackの概要をまとめてくれています。
MessagePack for Java 作りかけリリース!
MessagePackのJava版についてまとめてくれています。
MessagePack-RPCのプロトコル仕様(ドラフト)と実装例
MessagePack-RPCの仕様についてまとめてくれています。
高速メッセージングシステムMessagePack - 楽天テクノロジーカンファレンス2010
楽天テクノロジーカンファレンスで発表してきた際の資料を公開してくれています。
MessagePackの全体像を知るためにとっても役立ちました。
発表の録画もあるのでぜひ見てください。

スマートフォンのWebSocket対応状況

iphoneandroidなどのスマートフォンでもWebSocket通信できるか疑問に思って調べてみました。現状だとiphoneは対応済み、androidは未対応のようです。


WebSockets supported in iOS 4.2

  • 正確には、ios4.2インストール済み端末でのWebSocket通信が可能です。つまり、iphoneだけではなく、iPadipod touchでもいけるはず。

Android 2.3 ‘Gingerbread’ WebSocket support

  • タイトルだけ見ると、Android 2.3でWebSocket通信できるように見えますが、未対応であることが記されています。


ただ、iphoneandroidも同じopen-source WebKit browserを利用しているので、ゆくゆくは両者ともに対応するでしょう。

node.js + socket.ioでweb socket実装の備忘録

久しぶりです。
今回は、とある理由によりweb socketの勉強をしているので、その備忘録です。
環境はサーバがcentos、クライアントはmacです。

まず、node.jsのインストールです。
既に方法を公開している方がいますので、そこを参考にしました。
http://d.hatena.ne.jp/sy-2010/20101016/1287189160

次に、socket.ioのインストールです。
これも同様に既に公開されている方のページを参考にしました。
http://blog.livedoor.jp/kotesaki/archives/1545394.html
http://d.hatena.ne.jp/sy-2010/20101107/1289144327

上記の手順で、web socketを利用したリアルタイム通信が可能になります。


情報が氾濫しているため、この情報に辿り着くまでが大変でしたが、そこから先は割と簡単でした。

Web Socketで参考になったページのまとめ

Web Socketについて色々と調べ回って参考になったページをまとめてみます。よかったら参考にしてください。

WebSocketでリアルタイムWeb

  • WebSocketの通信方式について、他の方式と比較しながら説明してくれています。概要を理解するのに役立ちました。

The WebSocket API

  • 言わずと知れたW3Cが作成中の仕様書です。まだまだ改訂が進んでいるようです。

WebSocket.org|Demos

  • Web Socketを利用したデモサービスが提供されているサイトです。ほんとにブラウザでリアルタイム通信なんてできるの?と思っている人は是非覗いてみてください。KAAZINGという企業が提供してくれています。

node.js

  • javascriptで動作するサーバプログラムです。多分。インストールも簡単で、お手軽に利用できました。とりあえず、Web Socketの環境を用意したい方にオススメです。

Socket.io

  • クライアント毎に最適な通信方式を選定してくれるLibraryです。上のnode.jsと会わせて使います。chromesafariだとweb socket通信が可能になります。


今のところこんな感じです。
まだまだ勉強途中なので、随時更新しようと思います。

itunesStoreのWebAPI利用方法 ( jsonデータ構造)

今回はjsonデータのパース方法を紹介する前に、itunesStoreから返ってくるjsonデータの構造について話をしたいと思います。

前々回の最後にも書きましたが、返ってくるjsonデータは以下の通りです。

{
 "resultCount":5,
 "results": [
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908897, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Ben", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Ben", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/ben/id14908862?i=14908897&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/ben/id14908862?i=14908897&uo=4", "previewUrl":"http://a1410.phobos.apple.com/us/r30/Music/b7/f8/a5/mzi.jsdjptmz.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":11, "trackTimeMillis":167333, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908915, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"One Day In Your Life", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"One Day In Your Life", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/one-day-in-your-life/id14908862?i=14908915&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/one-day-in-your-life/id14908862?i=14908915&uo=4", "previewUrl":"http://a71.phobos.apple.com/us/r30/Music/bf/ab/78/mzi.tsgagpbx.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":17, "trackTimeMillis":257427, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908883, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Got to Be There", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Got to Be There", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/got-to-be-there/id14908862?i=14908883&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/got-to-be-there/id14908862?i=14908883&uo=4", "previewUrl":"http://a946.phobos.apple.com/us/r30/Music/af/93/28/mzi.iuqjwwgq.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":7, "trackTimeMillis":204867, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908889, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Ain't No Sunshine", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Ain't No Sunshine", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/aint-no-sunshine/id14908862?i=14908889&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/aint-no-sunshine/id14908862?i=14908889&uo=4", "previewUrl":"http://a1221.phobos.apple.com/us/r30/Music/77/cc/4e/mzi.wmtnxrdl.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":9, "trackTimeMillis":252800, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908886, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Rockin' Robin", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Rockin' Robin", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/rockin-robin/id14908862?i=14908886&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/rockin-robin/id14908862?i=14908886&uo=4", "previewUrl":"http://a448.phobos.apple.com/us/r30/Music/e7/f4/12/mzi.otyhktrs.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":8, "trackTimeMillis":154107, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}]
}

最初の二行に、"resultCount"と"results"という記述があります。
言葉から想像できるように、

"resultCount":取得したデータの数
"results":実際のデータ

となります。

json-framworkでデータをパースする際には、"results"が主な対象です。
"results"の中身を分かる範囲で説明するとこんな感じです。

"results"の範囲:[]
各データの範囲:{}
各データの要素:,区切り
要素:"key:value"で表現

各要素の説明(わかる範囲で)
"wrapperType":オブジェクトの名前(track, collection, artist) 
"kind":コンテンツの種類(book, album, coached-audio, feature-movie, interactive-booklet, music-video, pdfpodcast, podcast-episode, software-package, song, tv-episode, artist), 
"artistId":アーティストid, 
"collectionId":コレクションid,
"trackId":曲id, 
"artistName":アーティスト名,
"collectionName":アルバム名など, 
"trackName":曲名, 
"collectionCensoredName":アルバム名?, 
"trackCensoredName":曲名?, 
"artistViewUrl":アーティスト紹介ページのURL, 
"collectionViewUrl":アルバムのURL, 
"trackViewUrl":アルバムのURL, 
"previewUrl":試聴用ファイルのURL, 
"artworkUrl60":サムネイル(60x60)のURL, 
"artworkUrl100":サムネイル(100x100)のURL, 
"collectionPrice":価格(アルバム), 
"trackPrice":価格(1曲), 
"collectionExplicitness":ペアレンタルコントロール(explicit, cleaned, notExplicit),
"trackExplicitness":ペアレンタルコントロール(explicit, cleaned, notExplicit), 
"discCount":ディスク数, 
"discNumber":ディスク番号, 
"trackCount":トラック数, 
"trackNumber":トラック番号, 
"trackTimeMillis":曲の長さ(ミリ秒), 
"country":国, 
"currency":貨幣, 
"primaryGenreName":ジャンル

日本のitunesStoreからデータを受け取るのであれば、構造はほぼ変わらないはずなので、上記の内容を把握しておけば欲しいデータを取ることができます。
ちなみに、アメリカからデータを取得した場合とは若干内容が異なっていたので、国によって内容が異なる可能性があります。

itunesStoreのWebAPI利用方法 ( json-frameworkの導入)

前回の続きで、JSONデータをパースするために必要なjson-frameworkの導入方法を紹介したいと思います。
(なお、JSONデータのパースするframeworkやlibraryは他にもあるようです。各人の環境に合わせて吟味してください。)



json-frameworkは、Google Codeで開発されており、以下のURLがProject Homeです。
http://code.google.com/p/json-framework/

ここから、dmgファイルをダウンロードします。
現在の最新版は、JSON_2.2.2.dmgのようです。
http://code.google.com/p/json-framework/downloads/list


json-frameworkの導入方法には複数ありますが、ここでは一番簡単なソースファイルをプロジェクトにコピーする方法を紹介します。(その他の方法については、展開されたdmgファイルのInstall.rtfを参照してください。)

1.json-frameworkを導入したいプロジェクトを起動します。
2.'グループとファイル'メニューの'Classes'フォルダを右クリックし、'追加 -> 既存のファイル'を選択します。
3.展開されたdmgファイルの中の'JSON'フォルダを選択し、追加ボタンをクリックします。
4.ディスティネーショングループのフォルダに項目を再帰的にコピーする(必要な場合)にチェックを入れ、追加ボタンをクリックします。

これで導入は完了です。
実際にコードで利用する場合は、

#import "JSON.h"

と記述するだけです。

itunesStoreのWebAPIの利用方法

WebAPIなので使い方は単純です。
リクエストを投げて返ってくるJSONをパースするだけです。

今回はリクエストに関して書きたいと思います。
リクエストの仕様については、
http://www.apple.com/itunesaffiliates/API/AffiliatesSearch2.1.pdf
を参照してください。
仕様を読み進めた結果おおよそ以下のパラメータを利用すればよいことが分かりました。

term:検索キー。
country:カントリーコード。(これによって、どの国のituneStoreを利用するかが決まるようです。)
lang:言語。
media:検索対象とするメディア。(movie, podcast, musicなど。)
limit:検索結果表示数。

これらを組み合わせると、以下のようなURLになります。

例:マイケル・ジャクソンの曲を日本のitunesStoreで検索。表示数は5件。
http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsSearch?term=Michael+Jackson&country=JP&lang=ja_jp&media=music&limit=5

term = Michael+Jackson
country = JP
lang = ja_jp
media = music
limit = 5


webブラウザでリクエストを投げると、以下のようなレスポンスがあるはずです。

{
 "resultCount":5,
 "results": [
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908897, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Ben", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Ben", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/ben/id14908862?i=14908897&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/ben/id14908862?i=14908897&uo=4", "previewUrl":"http://a1410.phobos.apple.com/us/r30/Music/b7/f8/a5/mzi.jsdjptmz.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":11, "trackTimeMillis":167333, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908915, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"One Day In Your Life", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"One Day In Your Life", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/one-day-in-your-life/id14908862?i=14908915&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/one-day-in-your-life/id14908862?i=14908915&uo=4", "previewUrl":"http://a71.phobos.apple.com/us/r30/Music/bf/ab/78/mzi.tsgagpbx.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":17, "trackTimeMillis":257427, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908883, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Got to Be There", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Got to Be There", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/got-to-be-there/id14908862?i=14908883&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/got-to-be-there/id14908862?i=14908883&uo=4", "previewUrl":"http://a946.phobos.apple.com/us/r30/Music/af/93/28/mzi.iuqjwwgq.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":7, "trackTimeMillis":204867, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908889, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Ain't No Sunshine", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Ain't No Sunshine", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/aint-no-sunshine/id14908862?i=14908889&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/aint-no-sunshine/id14908862?i=14908889&uo=4", "previewUrl":"http://a1221.phobos.apple.com/us/r30/Music/77/cc/4e/mzi.wmtnxrdl.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":9, "trackTimeMillis":252800, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}, 
{"wrapperType":"track", "kind":"song", "artistId":32940, "collectionId":14908862, "trackId":14908886, "artistName":"Michael Jackson", "collectionName":"The Very Best of Michael Jackson With the Jackson 5", "trackName":"Rockin' Robin", "collectionCensoredName":"The Very Best of Michael Jackson With the Jackson 5", "trackCensoredName":"Rockin' Robin", "artistViewUrl":"http://itunes.apple.com/jp/artist/michael-jackson/id32940?uo=4", "collectionViewUrl":"http://itunes.apple.com/jp/album/rockin-robin/id14908862?i=14908886&uo=4", "trackViewUrl":"http://itunes.apple.com/jp/album/rockin-robin/id14908862?i=14908886&uo=4", "previewUrl":"http://a448.phobos.apple.com/us/r30/Music/e7/f4/12/mzi.otyhktrs.aac.p.m4p", "artworkUrl60":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.60x60-50.jpg", "artworkUrl100":"http://a1.phobos.apple.com/us/r2000/013/Features/ab/4b/d8/dj.dmlvbjtv.100x100-75.jpg", "collectionPrice":1050.00000, "trackPrice":150.00000, "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":21, "trackNumber":8, "trackTimeMillis":154107, "country":"JPN", "currency":"JPY", "primaryGenreName":"R&B/Soul"}]
}

これが検索結果のJSONデータになります。
iphoneなどで利用する場合は、このJSONデータをパースする必要があります。
JSONデータのパースは、iphoneであればそこまで難しくはありませんが、今回はここまで。

まだまだ手探り状態なので、間違っている所があればアドバイスいただけると助かります。