RubyMotion の Diablo 3 Web API ライブラリ

「やったーDiablo3のiPhoneアプリできたよー(^o^)ノ」

この週末知人とハッカソンに行ってきました。何を作ろうかなと思っていところ、そういえば先日 Blizzard が Diablo3 の Web API をリリースしていたのを思い出しまして、RubyMotion で Diablo3 の API を叩くライブラリ(の基本的な部分)を作りました。

Diablo 3 の Web API

Web API は素直な JSON over HTTP で Restful なそれになっていて、この辺やっぱり Blizzard はセンスが良いなと感じました。

API で取得できるのは今のところ、Battle.net に保存されたアカウントプロフィール、例えばプレイ時間やアチーブメントの状態、それからキャラクタ情報・・・レベル、装備中のアイテムなどなどに限られていて若干物足りない感はあります。認証がないのでゲーム内でのフレンドグラフが取れません。それが取れれば、もっといろんな夢がひろがりんぐな気もします。

とはいえ、遊んだゲームの情報が Web API でアクセスできる、というだけでもほかに比べて十分先を行っているので贅沢言うのもあれかもしれませんね。

RubyMotion用ライブラリ

作ったのはこの API を RubyMotion で叩くためのライブラリ。

Diablo3::Career.fetch(BattleTag.new('Espo', '1977')) do |career|
  career.heroes.first.fetch_detail do |hero|
    puts hero.name      # => Espomax
    puts hero.classname # => Monk
    puts hero.level     # => 60

    puts hero.items['offHand'].name      # => StormShield
    puts hero.items['offHand'].image_url # => http://us.battle.net/.../....png
  end
end

fetch() で Plain Old なオブジェクトが返却されるのであとはそれに聞いてよしなに操作すれば ok。HTTP 通信は BubbleWrap を使って、非同期で扱うようにしています。gem 化は手つかず。

ライブラリだけではつまらないので、簡単なデモもこさえました。(どっちかっていうとこっちの方が時間かかったわけですが・・・) RubyMotion なので当然、iOS アプリです。

こんな感じで、自分のアカウントに紐づくキャラクタ一覧とアイテム一覧が見られる。今回時間がなくて作り込んでませんが、API ではアイテムの詳細も取れます。どんな属性がついているかとか含め。その辺は結構 API 的に楽しいところ。あと、Career Profile の応答には Paragon Levels のデータなんかも含まれていました。パッチ 1.0.4 以降追加されたあれです。Paragon Levels 100 とかまじ廃・・・おっと Diablo 3 に踏み込んだ話はここまでだ、あやうくDT馬場の解説をするところだったぜ。

自分は RubyMotion のそれを作りましたが、.NET や PHP のライブラリそのほかをちらほら見かけますね。

拙作ライブラリは、ハッカソンのデモに必要な部分だけラップしているので API の機能をすべて網羅するにはもう少しちゃんと作らなきゃいけない。が、最近はすっかりドラクエ10のほうでして実は Diablo 3 はご無沙汰しておりましてですね。

というわけで、ドラクエ10 API はよ!フレンドの旅のあしあとアプリとか作りたいぞ。