blog.syfm

徒然なるままに考えていることなどを書いていくブログ

 なかったのでグルコスのマイページの情報を取得するライブラリを書いた

概要

BEMANI音ゲーの一つである SDVX や弐寺Jubeat なんかは非公式でもスコアデータを取得するアプリなりライブラリがある。そのどれもが根強い人気を誇っているのは多分音ゲーをやっている/やっていた人ならばわかるはず。
Groove Coaster (グルコス) は BEMANI とかチュウニズムに比べてあんまり人気がない…。(自分は BEMANI より好きです)
当然ノバでも同じで、グルコスで並んだことは恐らく 3 回くらいしかない。
ということはもちろんアプリもライブラリもないので、作るしかないと思ってライブラリを書いた。

github.com

グルコスのマイページの通信を見てる感じだと、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 受注している下請けはエンジニアが足りてないんじゃないかと思ってくる… 。
使われる場所はまとまってはいるけど、JSONXML の 2 つが使われていたり、JSON のキーに flag とあったのに、別のリクエストでは flg といった表記をしていたり、真偽値を返すべきところが 01 で表現されていたり、あと個人的には店舗名を tenpo_name とするのはどうしても受け付けがたい…。
あとは、v2.0 で既に廃止されたレベルが JSON に残っていたり。結構挙げるときりがない。
そのあたりのバラバラな要素をできるだけ吸収して統一するようにがんばった。
なんだかんだで Go を書くいい練習になった (気がする)

とにかくグルコスにかぎらずタイトーの Web サイトは色々おかしい部分があるので探してみるのも良いかもしれない。