ランバト集計のデータベースを一部公開

第一興商が展開するカラオケのコンテンツであるランキングバトルは最新の履歴50件しか取得できないのですが、それを無制限に取得するウェブサービスを実はこっそりやっています。

アクティブユーザ数が20人くらいで、ひと月でだいたい2000~3000曲くらい履歴が増えていっている感じです。
で、最近HPをJSON対応して使いやすくしていたのですが、曲情報(ランキング上位50人の点数・名前と歌手名・曲名を取得するAPI)に対して…


これはごもっともな指摘で、何故かランキング情報を取得しようとした時に歌唱人数が0人だと曲名とアーティスト名すらも取得することができないのである。
これだと月初めや、過疎曲に対してクエリを投げてもnullばっかり返ってきて意味がない。
というわけで、ランバト集計に登録されている履歴情報から歌手名と曲名のデータベースを作ることにしました。履歴は全部で20000件以上あるのでそれなりに充実したデータベースが作れると思っていたので、実際に実行してみました。

mysql> create table info select reqNo, artistName, songName, artistId, distStart from results group by reqNo;

新しいテーブルを作成するだけです。
実行してみると5061件のデータが取得できました。これだけあれば現実的にはほぼほぼ十分と言って良いでしょう。ここにないデータがクエリされた場合は逐一第一興商のサイトにアクセスして取得してこれば良いわけです。

me@raspberrypi:~ $ mysqldump -u tkgstrator -p info > info.dump

せっかくなのでダンプしたデータも置いておきます。


ライセンスは特になしということで。クレジット明記して頂けるとうれしいですが(笑)
クローラを走らせて1秒に1クエリくらい投げたとしても配信曲全て(およそ10万曲)を取得するのに30時間くらいで済むので意外とそっちも実用的なのでは?と思っています。この問題点は、曲番号がわからないとクエリが投げられないということです。

実際に存在する曲番号はどのくらいか?

そもそもDAMの曲番号は4桁+2桁の合計6桁で構成されています。
ランバト集計に保存されている記録を見ると、先頭が0,8,9の曲番号は1件もありません。
ということは残りの1,2,3,4,5,6,7に対してそれぞれ10万件ずつリクエストを飛ばせば良いことになります。となると、30時間*7で210時間かかることになります。つまり9日くらいかかるわけですね。
もちろん、最初の1回が終わってしまえば2回目からは自分のDBにアクセスすれば良いので、第一興商のサーバにかかる負荷は最小限で済みます。1秒に1回で、サーバのレスポンスを待ってから再度リクエストを送るようなシステムはクローラで言えば十分良識的範囲と言えるでしょう。
で、やってみようかと思ったのですが残念ながら本業であるスプラトゥーンがフェスの期間に入ってしまったので、誰かに委託しようと思います。

最後に

APIですが、コードをそのうち公開しようと思います(めっちゃ汚いんですけれども)

シェアする