iTunes Search API を利用しアプリのカスタマーレビューを表示する

iTunes Store Web Service Search API

  • iTunes Store Web Service Search API という API が Apple から公開されています。これを使うと、iTunes Store で取り扱われているすべてのアイテム(ミュージック、映画、Podcast、アプリ)を検索することができます。またドキュメント化されていない隠しAPIとして、カスタマーレビューを取得するインターフェースも存在します。

    先日 Nike+ Running アプリが改悪になった記事で、このアプリのカスタマーレビューを表示したく調査してみました。
    このiTunes カスタマーレビューのインターフェースですが、RSSフィードとして取得できます。ただし最大取得件数が50件までという制約がありますが、通常は新着50件を表示できれば問題はないですよね!

    [cc] XML形式
    https://itunes.apple.com/jp/rss/customerreviews/id=/xml

    JSON形式
    https://itunes.apple.com/jp/rss/customerreviews/id=/json
    [/cc]

iTunes Search API と Google Feed API のカスタマーレビュー取得方式

  • ご存じのようにJavaScriptのクロスドメイン制約上、JavaScriptのみで他のサイトのWebサービスから情報を取得する場合、XmlHttpRequestオブジェクトはクロスドメインを許可しないため、JSON形式であればJSONPを使用するのが基本ですね。XML形式(RSS)の場合は、Googleが提供するGoogle Feed APIを使用するか、別途XMLを取得するサーバサイドスクリプトやプロキシサーバが必要になるかと思います。取得形式を含め、たすき掛けしますと全部で4パターンになります!
  • No. 取得方式 形式 処理
    1 iTunes Search API JSON JSONPを使用し、JSON形式のデータを直接取得し表示できる。ただしデータに登録日時(updated)項目が含まれていない。
    2 iTunes Search API XML XML形式はiTunes Search APIが提供する全項目データが取得できる。ただしクロスドメインの制約上、XmlHttpRequestだけではXML形式のデータは取得できない。別途XMLファイルを取得するサーバサイドスクリプトが必要となる。JavaScriptは取得したXMLファイルを表示する処理のみとなる。またプロキシサーバという方法もある。
    3 iTunes Search API + Google Feed API JSON Google Feed APIを使用しiTunes Search APIへはXML形式でロード後、JSON形式のデータを取得できる。ただしJSON形式の場合、Google Feed APIのJSONフォーマットに丸められるため、星5段階評価(im:rating)項目が削られてしまい取得できない。
    4 iTunes Search API + Google Feed API XML Google Feed APIを使用しXML形式(RSS)のデータを取得できる。iTunes Search APIが提供する全項目データを取得できる。

取得方式別データ抜粋

  • ○No.1 iTunes Search API – JSON形式
    [cc] “entry”:[
    {
    “author”:{
    “uri”:{
    “label”:”https://itunes.apple.com/jp/reviews/id123456789″
    },
    “name”:{
    “label”:”内木 蘭”
    },
    “label”:””
    },
    “im:version”:{
    “label”:”4.6.2″
    },
    “im:rating”:{
    “label”:”1″
    },
    “id”:{
    “label”:”1234567890″
    },
    “title”:{
    “label”:”アップデートで改悪”
    },
    “content”:{
    “label”:”音楽停止でワークアウトが停止しません。”,
    “attributes”:{
    “type”:”text”
    }
    },
    “link”:{
    “attributes”:{
    “rel”:”related”,
    “href”:”https://itunes.apple.com/jp/review?id=387771637&type=Purple%20Software”
    }
    },
    “im:voteSum”:{
    “label”:”0″
    },
    “im:contentType”:{
    “attributes”:{
    “term”:”Application”,
    “label”:”アプリケーション”
    }
    },
    “im:voteCount”:{
    “label”:”0″
    }
    },
    [/cc]
  • ○No.2 iTunes Search API – XML形式
    [cc]
    2014-11-11T11:11:00-07:00
    1234567890
    アップデートで改悪
    音楽停止でワークアウトが停止しません。

    0
    0
    1
    4.6.2
    内木 蘭https://itunes.apple.com/jp/reviews/id123456789
    <table border="0" width="100%">
    <tr>
    <td>
    <table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr valign="top" align="left">
    <td width="100%">
    <b><a href="https://itunes.apple.com/jp/app/nike+-running/id387771637?mt=8&uo=2">アップデートで改悪</a></b><br/>
    <font size="2" face="Helvetica,Arial,Geneva,Swiss,SunSans-Regular">
    </font>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td>
    <font size="2" face="Helvetica,Arial,Geneva,Swiss,SunSans-Regular"><br/>音楽停止でワークアウトが停止しません。</font><br/>
    </td>
    </tr>
    </table>


    [/cc]
  • ○No.3 iTunes Search API + Google Feed API – JSON形式
    [cc] “entries”: [
    {
    “author”: “内木 蘭”,
    “categories”: [],
    “content”: ”

    アップデートで改悪

    音楽停止でワークアウトが停止しません。

    “,
    “contentSnippet”: ”
    …”,
    “link”: “”,
    “publishedDate”: “Tue, 11 Nov 2014 11:11:00 -0800”,
    “title”: “アップデートで改悪”
    },
    [/cc]

  • ○No.4 iTunes Search API + Google Feed API – XML形式
    [cc]
    アップデートで改悪
    内木 蘭
    https://itunes.apple.com/jp/reviews/id123456789
    内木 蘭

    1234567890

    <table border=”0″ width=”100%”>
    <tr>
    <td>
    <table border=”0″ width=”100%” cellspacing=”0″ cellpadding=”0″>
    <tr valign=”top” align=”left”>
    <td width=”100%”>
    <b><a href=”https://itunes.apple.com/jp/app/nike+-running/id387771637?mt=8&uo=2″>アップデートで改悪</a></b><br/>
    <font size=”2″ face=”Helvetica,Arial,Geneva,Swiss,SunSans-Regular”>
    </font>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td>
    <font size=”2″ face=”Helvetica,Arial,Geneva,Swiss,SunSans-Regular”><br/>音楽停止でワークアウトが停止しません。</font><br/>
    </td>
    </tr>
    </table>


    0
    0
    1
    4.6.2
    内木 蘭
    2014-11-11T11:11:00-07:00

    [/cc]

No.4 iTunes Search API + Google Feed API XML形式

  • 方式No.1, 3は実装中にJSONデータの項目が足りないことに気づき断念。結局、No.4での実装となりました。WordPressで本文中にPHPが書けるなら、No.2のPHPでXMLを取得してきて、どこかにXMLファイルを置くでもよいのですが、ファイルを置くというのも美しくないので、No.4となりました。
    本当はGoogle Feed APIを噛ませないで直接取得できるほうが、速度的にもベターなのですが、iTunes Search APIのJSON形式ですと、なぜか登録日時(updated)項目が削られてしまうんですよね。この項目さえ入ってくればJSONPで取得でき、方式的にも実装的にも美しいのですが。「登録日時ぐらい削ってしまえっ!」という乱暴な選択肢もあるのですが、技術屋的にそれはちょっと・・・ですね(笑)

  • WordPressの仕様上、jQueryの$()省略構文は書けないため、jQueryとしています。
    また23,24行目も、記事本文にblock系のHTMLタグを記述すると自動改行されてしまうため、JavaScriptが正常に動作しません。そのため、エスケープしたHTMLを戻す処理を加えていますが、WordPressでなければそのままHTMLタグを記述してよいと思います。まあそのうち自動改行や改行が<p>タグに変換されない施策も考えたいですね。

No.2 iTunes Search API XML形式

  • しばらく運用していますと、iTunes Search API カスタマーレビューサービス(RSS)がよく落ちることが判明。落ちると言ってもサーバが落ちるわけではなく、応答はするのですが、正常にデータが送信されてこないiTunes側のサービス中断です。RSSだけに主に10:00、12:00頃の中断が多く中断時間も数十分にのぼり、このままですとお詫びのエラーメッセージの出現頻度が過多になりそうでしたので、方式を再検討することにしました。
    iTunesカスタマーサービス中断中は、直前まで正常に受信できていたデータを提供するようにする。すなわち、No.2のPHPでXMLを取得してきて、WordPressの適当なディレクトリにXMLファイルを保存し、そのXMLファイルでカスタマーサービスを表示するというものです。この方式であればサービス中断中は、その直前まで保存していたXMLファイルもといカスタマーレビューが表示され、エラーメッセージはまず表示されません。ファイルを保存するというあまり美しくない方式ですが、カスタマーレビューが表示されないほうが、100倍まずいですので、ここは基本のサービス提供を優先しました。どこかのアプリと違って(笑)当然ですね。
    逆にGoogle Feed APIを噛ませず、iTunes Search APIから直接取得できるので、Google Feed APIのオーバーヘッド分、カスタマーレビューの表示は速くなると思います。但しPHPでXMLファイルを取得しますので、その分オーバーヘッドは若干増えますが、トータルでは改善されると思います。

    • PHPにてXMLファイル取得し適当なディレクトリに保存します。これにはWordPress記事内でPHPコードが動作するようにしておく必要があります。
    • 取得したXMLファイルをAjaxで取得し表示します。表示処理はNo.4と変わりません。

このところ野球やサッカーの海外観戦記事ばかりでしたが、たまにはIT技術屋的な記事もですかね(笑)
でもメイン言語はPHPでもjQuery(JavaScript)でもなくJavaなんですよね。