Harukiのスマブラなどブログ

スマブラ(for)やスマブラ系Webサービスについて書いていきます

スマブラ戦績検索サイト、スマッシュレコードの仕組み

僕は現在、SMASH RECORDというWebサイトを作っています。このサイトでは、スマブラのオフ大会の結果を、プレイヤーごとに見ることができます。公開した当初はスマブラ4の結果のみでしたが、つい最近スマブラDXの大会結果も見られるようになりました。

このサイト内には、現在なんと10000試合以上の記録が保存されています(自分でもびっくりした)。これらの膨大な記録をどのように管理しているかが気になる方も居るかと思います。そこで今日は、データ収集も含め、このサイトがどのように運営されているかを簡単に説明したいと思います。

サイト運営は、大きく分けて下記の3つの段階に分けられます。

  • (手動)トーナメントを探す
  • (自動)トーナメントの試合を、challongeのAPIによって自動で収集する
  • (手動)収集したデータにあるプレイヤー名の"揺らぎ"等を手直しする

(手動)トーナメントを探す

まず当たり前ですが、どんなスマブラ大会が開かれているかを知る必要があります。僕はスマ4勢なのでスマ4の大会についてはTwitterなどから大体把握できるのですが、スマDX界隈は詳しくなかったので、スマDXの大会を集めるときにはTwitterで質問しました。

質問した時点でSMASH RECORDの名がそれなりに知られていたおかげで、情報を集めることができました。(教えてくれた方、RTしてくれた方、本当にありがとうございました)

一度トーナメントのシリーズを知ってしまえば、そのシリーズの次回大会を知るのは簡単なので、この段階はそれほど難しいものではありません。

(自動)トーナメントの試合を、challongeのAPIによって自動で収集する

次に、いよいよ試合結果を収集します。

試合結果は、challonge.com が提供しているAPIというものを通じて取得します。

challonge とはトーナメントを管理できるサイトです。主にゲーム大会で使われることが多く、国内のスマブラ大会の多くはこのサイトを使って管理しています。

API(application programming interface)とは、超カンタンに言うと、challonge内で使える機能を、プログラムから扱えるようにしたものです。通常われわれが見るトーナメントページというのは、人にとって読みやすいように出来ていますが、プログラムが処理しやすい形にはなっていません。APIを通じて取得すると、プログラムが処理しやすい形になっています。プログラムならば、10000試合以上の処理も一瞬でできます。逆に言うと、プログラムの力を借りないとこれだけの量のデータを処理するのはあまりにも大変だということです。

データの手入力はあまりにも大変な作業なので、challongeで管理されていないトーナメントは、基本的には扱っていません(例外として、闘会議2016の決勝トーナメントは、試合数が少ないことと注目度が高いという理由から、手動で入力しました)。

challongeのAPIからは、以下の様な情報が取得できます。

  • プレイヤー名
  • スコア
  • 何回戦の試合か
  • 日時
  • 予選かどうか

1つのトーナメントに対するデータ収集は、処理するプログラムを一度書いてしまえば、一瞬で終わる作業です。このような仕組みがなければ、10000試合以上の情報を集めるのは中々厳しいでしょう。

(手動)収集したデータにあるプレイヤー名の"揺らぎ"等を手直しする

上で説明したchallongeのAPIから取得できる情報からプレイヤーを特定する方法は、プレイヤー名しかありません。当たり前のことを言っているように聞こえますが、これがSMASH RECORDを運営する上で一番厄介な問題です。

それは、「名前が微妙に違うけど、実は同じプレイヤー」というケースが想像以上に多くあるからです。

具体例として、にえとのさんを参考にしてみます。(勝手に使ってごめんなさい!)

にえとのさんのページ f:id:harukisb:20160602213658p:plain

これはにえとのさんのウメブラ23とクロブラでの戦績です。「DNG|Nietono」と「DNG|にえとの」は違う文字列ですが、スマ勢からすれば同じにえとのさんだと言うことが簡単に分かります。しかし、プログラムにこれらを同一プレイヤーだと認識させるのは中々難しい問題です。

「大体一緒だったら同じプレイヤーだと判定するプログラムを書けばいいんじゃないか」と思われるかもしれません。しかしこれは想像以上に難しく、下手をすると、逆に「違うプレイヤーなのに同じプレイヤーと扱ってしまう」ということが起きてしまいます。例えば「つー」さんと「つ〜」さん、「ハヤト」さんと「ハヤト。」さんはそれぞれ別のプレイヤーですが、「大体一緒だから」という基準で判定すると同じプレイヤーとして扱われてしまいます。

そんな事情もあり、こういった名前の"揺らぎ"の処理については、基本的に手作業で行っています。ただ、一度手作業で直したものは、次回以降は自動で判定されるようになります。例えば、にえとのさんが次回以降Nietonoという名前で出ても大丈夫だということです。また、スポンサーの有無の違いも吸収します(「DNG|にえとの」と「にえとの」は同じと判定する)。

ただ、手作業でやっていると言っても、厳密にチェックしているわけではなく、気がついたら(もしくは気が向いたらw)逐次修正するというスタンスを取っています。そのため、実はこのサイトには間違った情報がそこそこ書いてあったりします。

この戦績情報がとても大事なものだったら、間違った情報が入っているのは結構大きな問題なのですが、あくまで趣味で運営しているということで、多めに見てもらえると助かります。また、間違いがあったら指摘してもらえればガンガン直します。

この作業が、サイト運営でもっとも重要かつ大変な箇所になります。ただ、データ収集自体は比較的誰でもできるので、手作業での修正がこのサイトの価値だとも言えますね。


っというわけで、ざっくりですが、このサイトの仕組みについて説明しました。データ収集はおそらくみなさんの想像以上に簡単ですが、名前の修正は想像以上に大変です/(^o^)\

これ以外にも、実は結構泥臭い手作業があったりしますが、それはまた機会があればということで。

これからも、SMASH RECORDをよろしくお願いします(^o^)/