概要
BEMANI の音ゲーの一つである SDVX や弐寺、Jubeat なんかは非公式でもスコアデータを取得するアプリなりライブラリがある。そのどれもが根強い人気を誇っているのは多分音ゲーをやっている/やっていた人ならばわかるはず。
Groove Coaster (グルコス) は BEMANI とかチュウニズムに比べてあんまり人気がない…。(自分は BEMANI より好きです)
当然ノバでも同じで、グルコスで並んだことは恐らく 3 回くらいしかない。
ということはもちろんアプリもライブラリもないので、作るしかないと思ってライブラリを書いた。
グルコスのマイページの通信を見てる感じだと、XHR でデータを取得している感じで、通常のページ表示に必要な XHR リクエストの数からして、API をふつうに利用する限りではまったく負荷はかからない。
使い方は README.md
か GoDoc を見れば大体わかるはず。
サンプル
例えばすべての楽曲のサマリを取得する MusicSummary()
を利用すると、
package main import ( "fmt" "github.com/lycoris0731/go-groovecoaster/groovecoaster" ) func main() { client := groovecoaster.New() summary, err := client.MusicSummary() if err != nil { fmt.Println(err) return } for _, music := range summary { fmt.Printf("%#v\n", music) } }
総楽曲数は結構多いので、先頭から幾つかを見ると、
&groovecoaster.MusicSummary{ID:161, Title:"東方不死鳥", PlayCount:40, LastPlayTime:"2016-11-24 21:14:14"} &groovecoaster.MusicSummary{ID:365, Title:"東方地神律", PlayCount:4, LastPlayTime:"2016-11-24 21:14:14"} &groovecoaster.MusicSummary{ID:298, Title:"FUJIN Rumble", PlayCount:52, LastPlayTime:"2016-11-24 21:02:02"} &groovecoaster.MusicSummary{ID:43, Title:"グルーヴ・リボルバー", PlayCount:19, LastPlayTime:"2016-11-24 21:02:02"} &groovecoaster.MusicSummary{ID:192, Title:"OMAKENO Stroke", PlayCount:17, LastPlayTime:"2016-11-24 21:02:02"} &groovecoaster.MusicSummary{ID:49, Title:"Got a pain cover?", PlayCount:53, LastPlayTime:"2016-11-24 20:49:04"} &groovecoaster.MusicSummary{ID:508, Title:"ハレ晴レユカイ", PlayCount:1, LastPlayTime:"2016-11-24 20:49:04"}
こんな感じに取得できる。
所感
しんどい
このライブラリを作る以前にも良くグルコスのマイページのリクエストやソースは見ていたけども、タイトー or 受注している下請けはエンジニアが足りてないんじゃないかと思ってくる… 。
使われる場所はまとまってはいるけど、JSON と XML の 2 つが使われていたり、JSON のキーに flag
とあったのに、別のリクエストでは flg
といった表記をしていたり、真偽値を返すべきところが 0
と 1
で表現されていたり、あと個人的には店舗名を tenpo_name
とするのはどうしても受け付けがたい…。
あとは、v2.0 で既に廃止されたレベルが JSON に残っていたり。結構挙げるときりがない。
そのあたりのバラバラな要素をできるだけ吸収して統一するようにがんばった。
なんだかんだで Go を書くいい練習になった (気がする)
とにかくグルコスにかぎらずタイトーの Web サイトは色々おかしい部分があるので探してみるのも良いかもしれない。