イチローの打率が気になるので、どこかからデータを引っ張ってきてグラフ化したいなぁ、できれば毎日更新でとか思ってたんだけど、ニュースサイトをパースするのも何か面倒だしましてや手入力とか。どこかでCSV配布してるサイトとかないのかなぁとか思ったらば、なんとMLBが全選手の全データをXMLで提供していることが解って驚愕。マジか。

正確に言うと、「Gameday」っていう今日の注目試合みたいな企画のためのデータベースなのだけど。

MLB.com Gameday | MLB.com: Gameday

これがオープンになってて自由に使えるみたい。
データベースはRESTチックにアクセスできそうな階層になっててルートはここ。

http://gd2.mlb.com/components/game/mlb/

探せば色んなデータが手にはいる。すげえ。

使い方は見ればわかると思うのだけど簡単に説明します。
詳しい使い方はこちらが参考になるかと。拾ったテキストファイルだけど。

http://vizsage.com/apps/mrmxy/app/docs/DataTransformations.txt



最新打撃成績を取得する

イチロー選手の場合なら、XMLは以下のURL。

http://gd2.mlb.com/components/game/mlb/year_2011/batters/400085.xml

階層に分けてみるとこんな感じ。

  • http://gd2.mlb.com/components/game/mlb/
    • year_2011
      • batters
        • 400085.xml


「400085」というのは選手1人1人に割り振られているIDで、MLBの選手サイトなんかで取得できます。
(これを効率的に取得できる手段というのはちょっと無いかな…)


実際に取得できるデータはこんな感じ。

  • ab="1" … 打席
  • r="0" … 得点
  • h="0" … 安打
  • hr="0" … 本塁打
  • rbi="0" … 打点
  • sb="0" … 盗塁
  • avg=".268" … 打率
  • single="0" … 単打
  • double="0" … 二塁打
  • triple="0" …三塁打
  • bb="0" … 四球
  • cs="0" … 盗塁失敗
  • so="0" … 三振
  • err="0" … 失策
  • hbp="0" … 死球
  • last_at_bat="Ground Out" … 最後の打席の結果
  • s_ab="284" … シーズン打席
  • s_hr="0" … シーズン本塁打
  • s_rbi="21" … シーズン打点
  • s_sb="18" … シーズン盗塁
  • s_h="76" … シーズン安打
  • s_r="35" … シーズン得点
  • s_single="62" … シーズン単打
  • s_double="12" … シーズン二塁打
  • s_triple="2" … シーズン三塁打
  • s_bb="22" … シーズン四球
  • s_cs="4" … シーズン盗塁失敗
  • s_so="22" … シーズン三振
  • s_err="3" … シーズンエラー
  • s_hbp="0" … シーズン死球
  • game_id="2011/06/17/phimlb-seamlb-1" … 試合ID
  • game_pk="287956" … スタジアムID
  • update_AB="4" … 不明

これだけ取れれば十分だなぁ。



特定の日の成績を取得する

2011/06/15のイチロー選手の打撃成績はこれで取れます。

http://gd2.mlb.com/components/game/mlb/year_2011/month_06/day_15/batters/400085_1.xml

取得できるデータは上の場合と同じ。
URLの選手IDの後に「_1」と付いているのはダブルヘッダー対策。
同日に複数試合があった場合には、「_1」「_2」と分けてファイルが作成されます。



特定の試合に出場しているプレイヤー一覧を取得する

ゲームIDを使用すれば出来ます。
ゲームIDはさっきのイチロー選手のデータにも含まれていたこれ(2011/06/17/phimlb-seamlb-1)です。
これをURLに変換するとこんな感じになります。

http://gd2.mlb.com/components/game/mlb/year_2011/month_06/day_17/gid_2011_06_17_phimlb_seamlb_1/

プレイヤー一覧はこれで。

http://gd2.mlb.com/components/game/mlb/year_2011/month_06/day_17/gid_2011_06_17_phimlb_seamlb_1/players.xml

両チームの選手、監督、コーチ、アンパイヤ一覧が取得できます。
充実しすぎwww




データを扱うAPIは?

残念ながらMLBで提供?されているのはここまでで、実際にこれらを扱うためのAPIは提供されていませんが、
Rubyプログラマ向けには「Gameday API」と言うのがあるみたいです。

timothyf/gameday_api - GitHub

僕はあまりRubyが得意ではないので実際に使うまではしていませんが、
欲しいデータに合わせてオブジェクトを作成し、メソッドを指定することでデータが取り出せるようになってるみたい。
サンプルにあるのは「2009年のデトロイトタイガースの全先発ピッチャーの成績」とか。
これは便利。


他の言語ではきちんとしたのが見つからなかったので、欲しいなら自分で書くしかないかな。
Pythonも一応あるけど機能が限定的)



しばらく遊べそうです。わーい。