読者です 読者をやめる 読者になる 読者になる

GeekFactory

int128.hatenablog.com

App StoreのレビューをXSLTで取り出す

App Storeに公開されているアプリのレビューを取り出すXSL(XML Stylesheet)を書きました。

github.com

以下の手順で使います。

  1. App StoreからXMLをダウンロードします。ここではApp Store XMLと呼びます。
  2. App Store XMLXSLTで変換します。
  3. 結果結果をプログラムで利用します。

XSLTは特定のプログラミング言語に依存しない仕組みなので、将来的にApp Store XMLスキーマが変わってしまった場合でもXSLを修正するだけで済みます。中間言語が間に入っている感じですね。まあ、AppleAPIを提供してくれればいいのですけど。

使用例

ここでは、Google Inboxアプリのレビューを取得してみましょう。

まず、curl コマンドでApp Store XMLをダウンロードします。905060486Google InboxアプリのIDです。143462 は日本のApp StoreのIDで、末尾に -1 を使えると英語でレスポンスが返ります。詳細は Scraping AppStore Reviews が参考になります。

# Google Inbox
app_id='905060486'

# App Store in Japan, language in English
app_zone='143462-1'

# Download App Store XML
curl -o appstore.xml \
  -L \
  -H "X-Apple-Store-Front: $app_zone" \
  -A "iTunes" \
  "https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=$app_id&pageNumber=0&sortOrdering=4&onlyLatestVersion=false&type=Purple+Software"

xsltprocコマンドでApp Store XMLを変換します。xsltprocコマンドはOS Xに標準で入っています。

xsltproc appstore.xslt appstore.xml

変換結果の例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<app xmlns:i="http://www.apple.com/itms/" name="Inbox by Gmail - a new email app that works for you" category="Category: Productivity" updated="Updated Jul 15, 2015" version="Current Version: 1.3.4" size="70.0 MB">
  <review title="..." stars="2" author="..." version="Version 1.3.4" date="Jul 26, 2015" id="viewVote12345678">...</review>
</app>

変換結果には以下が含まれます。

  • アプリのメタデータ
    • 名前
    • カテゴリ
    • 更新日
    • 最新バージョン
    • サイズ
  • レビュー
    • タイトル
    • 本文
    • 投稿者
    • 対象バージョン
    • 投稿日
    • ユニークなID

プログラムから使う

多くのプログラミング言語XSLTを呼び出す仕組みが用意されています。また、適当なライブラリが見当たらない場合でもxsltprocコマンドを実行すれば変換結果を得ることができます。

とりあえずNode.jsでは適当なライブラリが見当たらなかった(あったけどネイティブビルドで失敗した)ので、xsltprocコマンドを実行する形で実装してみました。JavaRubyPythonとかならもっと簡単にできるはず。XSLだけでなくいろんな言語の実装例も同梱したら便利になりそうです。もし、このXSLを活用したという方がいたらPull Requestをいただければと思います!