【注】本記事は旧ブログからの移植記事です。
SEGA音ゲー3機種の公式サイトの裏には、楽曲リスト等のためのJSONが流れています。
エンドポイントさえ知っていれば、それらを取得して活用することも可能です。
ただ、正規で公開されているものではありませんし、いつ仕様が変更されたり使えなくなったりしても一切文句は言えません。
この情報を利用する際は、何があっても自己責任でお願いします。
CHUNITHM
楽曲リスト
▶エンドポイント: https://chunithm.sega.jp/storage/json/music.json
以前は著作権情報もこのJSONファイル内にあったが、現在はhttps://chunithm.sega.jp/storage/json/rightsInfo.json
にまとめて全て入っている。
▼レスポンス例
[
{
"id": "2065",
"catname": "ORIGINAL",
"newflag": "0",
"title": "創世のコンツェルティーナ",
"reading": "ソウセイノコンツエルテイウナ",
"artist": "大嶋啓之",
"lev_bas": "3",
"lev_adv": "7",
"lev_exp": "10+",
"lev_mas": "13",
"lev_ult": "",
"we_kanji": "",
"we_star": "",
"image": "ec89f55fcf6e1c66.jpg"
},
{
"id": "107",
"catname": "ORIGINAL",
"newflag": "0",
"title": "We Gonna Journey",
"reading": "WEGONNAJOURNEY",
"artist": "Queen P.A.L.",
"lev_bas": "3",
"lev_adv": "6",
"lev_exp": "11",
"lev_mas": "14",
"lev_ult": "14+",
"we_kanji": "",
"we_star": "",
"image": "b43fef626f5b88cd.jpg"
},
{
"id": "8081",
"catname": "VARIETY",
"newflag": "0",
"title": "檄!帝国華撃団",
"reading": "ケキテイコクカケキタン",
"artist": "真宮寺さくら(横山智佐)&帝国歌劇団「サクラ大戦」",
"lev_bas": "",
"lev_adv": "",
"lev_exp": "",
"lev_mas": "",
"lev_ult": "",
"we_kanji": "歌",
"we_star": "3",
"image": "b5570c700e7bbf75.jpg"
}
]
実際は1つのリストの中にすべての楽曲が入っている。ここでは通常の楽曲とULTIMAの存在する楽曲、WORLD'S END楽曲1つずつを例として挙げた。
同一楽曲であっても、通常譜面とWORLD'S END譜面は別々でオブジェクトが存在する。さらに、同じ楽曲のWORLD'S END譜面が複数ある場合、その譜面の数だけオブジェクトがある。
ちなみに、クラス認定(旧コースモード)限定楽曲/譜面はここに含まれない。つまりCHUNITHM SUN時点ではクラス認定専用になっている「Trackless wilderness」「folern」「Trrricksters!!」の狂譜面(いずれもCLASS ∞コース「aWEsome!!!!」に登場)、Randomの分譜面6つ(CLASS EXTRAコース「RANDOM」に登場)は上記のJSONファイルには記載されていない。そもそも公式サイト上にクラス認定に関する項目がないので、情報を取りようがない。
▼各key/valueの説明
id
: 楽曲IDcatname
: カテゴリ名newflag
: 新曲か否かのフラグ。新曲なら1
が、そうでなければ0
が文字列として入っているtitle
: 楽曲タイトルreading
: 検索用の曲名。元のタイトルを一定のルールに従って変換したもので、濁点や小文字のないカタカナとアルファベット大文字のみで構成されるartist
: 楽曲アーティストlev_bas
~lev_mas
: それぞれBASIC~MASTERの譜面レベル。WORLD'S END譜面の場合は空欄になるlev_ult
: ULTIMAの譜面レベル。ULTIMAが存在しないか、WORLD'S END譜面の場合は空欄になるwe_kanji
: WORLD'S ENDの譜面属性。漢字1文字もしくは『!』『?』が入る。通常譜面の場合は空欄になるwe_star
: WORLD'S ENDの譜面難易度。数字「1」「3」「5」「7」「9」が文字列として入り、それぞれ☆~☆☆☆☆☆に対応する。通常譜面の場合は空欄になるimage
: ジャケット画像のファイル名。URLhttps://new.chunithm-net.com/chuni-mobile/html/mobile/img/
に付け足すと画像を取得できる。
CHUNITHM海外版
楽曲リスト
▶エンドポイント: https://chunithm.sega.com/assets/data/music.json
CHUNITHM NEWまでは日本版の古いJSONフォーマットと同一だったが、おそらくNEW PLUSになってからは現行日本版と完全に同一のフォーマットになった。
その他の差異は以下の通り。
- 著作権表示のJSONファイルは
https://chunithm.sega.com/assets/data/rightsInfo.json
にある。 - ジャケット画像のファイル名の前に付け足すURLは
https://chunithm-net-eng.com/mobile/img/
である。
なお、中国大陸版については、そもそも公式サイトが存在しないものと思われる。
WORLD'S ENDの譜面難易度に関する余談(クリック/タップして展開)
上記ファイル内において、WORLD'S ENDの難易度は5段階にもかかわらず何故か飛び飛びの奇数が設定されている。この理由については推測だが、WORLD'S END実装前はさらに細かい難易度分けをしようとしていたのではないかと推察できる。
CHUNITHM-NET上でWORLD'S ENDの楽曲が表示される画面では、譜面属性アイコンの横に難易度を表す星の画像があるが、この画像のURLにも上記と同様の数字が存在する。
例えば、「5」の画像は
https://new.chunithm-net.com/chuni-mobile/html/mobile/images/icon_we_star5.png
である。
結論から言うと、この星の画像は全部で20枚ある。URLの番号部分を0~19に入れ替えて見てみると、その画像が姿を現す。
0・2・4・6・8には星が半分だけある画像が、10~19には黄色く塗りつぶされた星の画像がある。いずれも未使用である。
maimaiでらっくす
楽曲リスト
▶エンドポイント: https://maimai.sega.jp/data/maimai_songs.json
CHUNITHMと同じく、著作権情報はhttps://maimai.sega.jp/data/RightsInfoText.json
に分けられている。
▼レスポンス例
[
{
"artist": "ツミキ feat.音楽的同位体 可不(KAFU)",
"catcode": "niconico&ボーカロイド",
"dx_lev_bas": "2",
"dx_lev_adv": "6",
"dx_lev_exp": "9+",
"dx_lev_mas": "11",
"dx_lev_remas": "13",
"image_url": "e6f1a560ee4c29d9.png",
"release": "220915",
"sort": "110",
"title": "フォニイ",
"title_kana": "フオニイ",
"version": "23000"
},
{
"artist": "ナユタン星人",
"catcode": "niconico&ボーカロイド",
"dx_lev_bas": "3",
"dx_lev_adv": "7",
"dx_lev_exp": "9",
"dx_lev_mas": "12+",
"image_url": "dfd85cc1f0611a87.png",
"release": "000000",
"lev_bas": "6",
"lev_adv": "8",
"lev_exp": "11",
"lev_mas": "13",
"sort": "213",
"title": "ダンスロボットダンス",
"title_kana": "タンスロホツトタンス",
"version": "19007"
},
{
"artist": "HiTECH NINJA",
"catcode": "オンゲキ&CHUNITHM",
"date": "NEW",
"dx_lev_bas": "5",
"dx_lev_adv": "8",
"dx_lev_exp": "12+",
"dx_lev_mas": "14",
"image_url": "74c92bac1b51a9c3.png",
"key": "○",
"release": "230120",
"sort": "996",
"title": "電光石火",
"title_kana": "テンコウセツカ",
"version": "23011"
}
]
実際は1つのリストの中にすべての楽曲が入っている。
オブジェクトの中で譜面レベル部分以外のkeyが辞書順にソートされている。
また、CHUNITHMと違ってそのデータに該当するものが存在しない場合は空欄ではなくkeyそのものが存在しないようになっている。でらっくす/通常譜面の二種があり、空欄方式を採用するとファイルの文字数が増えてしまうからだろうか?
▼各key/valueの説明
artist
: 楽曲アーティストcatname
: カテゴリ名date
: 新曲か否か。このkeyが存在する場合はNEW
という文字列のvalueが入る。そうでなければkeyそのものが存在しないdx_lev_bas
~dx_lev_mas
: それぞれでらっくす譜面のBASIC~MASTERの譜面レベル。でらっくす譜面がなければkeyそのものが存在しないdx_lev_remas
: でらっくす譜面のRe:MASTERの譜面レベル。譜面がなければkeyそのものが存在しないimage_url
: ジャケット画像のファイル名。URLhttps://maimaidx.jp/maimai-mobile/img/Music/
に付け足すと画像を取得できる。key
: 解禁が必要か否かのフラグ。このkeyが存在する場合は○
(U+25CB)という文字列のvalueが入る。そうでなければkeyそのものが存在しないrelease
: 楽曲リリース日。YYMMDD
形式の文字列。現在稼働しているバージョン以外で登場した楽曲のリリース日情報は全て000000
にされている(maimai でらっくす FESTiVAL稼働時点では稼働開始日である2022/9/15以前の数字が存在しない)。さらには、後から譜面が追加された場合、その譜面の一般解禁日がこの値になることから、楽曲自体のリリース日にはならないこともある。lev_bas
~lev_mas
: それぞれスタンダード譜面のBASIC~MASTERの譜面レベル。スタンダード譜面がなければ存在しないlev_remas
: スタンダード譜面のRe:MASTERの譜面レベル。譜面がなければkeyそのものが存在しないsort
: 楽曲ソート用の番号(文字列)だと思われる。JavaScriptソースコード上では後述のversion
が同一値だった際のソート用の値として使用されているtitle
: 楽曲タイトルtitle_kana
: 検索用の曲名。元のタイトルを一定のルールに従って変換したもので、濁点や小文字のないカタカナとアルファベット大文字のみで構成されるversion
: バージョンを表す5桁の番号(文字列)。詳細は後述
versionについて
maimaiの楽曲リストJSONに存在するversion
は、楽曲の追加されたゲームのバージョンを表す文字列である。ここで言うバージョンとは、2週間ごとにある楽曲追加ごとに変更される(内部的な)バージョンであり、名前のついたバージョンを意味しない。
この番号は上3桁・下2桁に分けることができ、それぞれ以下のような意味合いがある。
- 上3桁: その楽曲が収録された名前付きバージョン(「maimai GreeN」「maimai でらっくす Splash PLUS」など)の識別番号。
- 下2桁: その名前付きバージョンにおける更新の何回目で収録されたかを表す値。当該バージョン稼働日の
00
から始まり、1ずつ数字が増えていく。
これに従うと、例えば18015
は「maimai MURASAKiの14回目の更新」であることがわかる。
以下は上3桁とどのバージョンが紐づいているかのリストである。
100xx
: maimai110xx
: maimai PLUS120xx
: maimai GreeN130xx
: maimai GreeN PLUS140xx
: maimai ORANGE150xx
: maimai ORANGE PLUS160xx
: maimai PiNK170xx
: maimai PiNK PLUS180xx
: maimai MURASAKi185xx
: maimai MURASAKi PLUS190xx
: maimai MiLK195xx
: maimai MiLK PLUS200xx
: maimai でらっくす205xx
: maimai でらっくす PLUS210xx
: maimai でらっくす Splash215xx
: maimai でらっくす Splash PLUS220xx
: maimai でらっくす UNiVERSE225xx
: maimai でらっくす UNiVERSE PLUS230xx
: maimai でらっくす FESTiVAL
今後もこの法則に従うと仮定するなら、バージョンごとに数値は5ずつ増えていくものと思われる。
なお、ゲーム自体が2週間毎に更新されるからといって、この値からリリース日を算出することはできない。
エイプリルフールの更新や新型コロナウイルスによる2020年の更新のブランクなどが存在するためである。
maimai海外版
楽曲リスト
▶エンドポイント: https://maimai.sega.com/assets/data/maimai_songs.json
フォーマットは現行日本版と同一。ただし、情報が最新でない可能性がある旨が表示されている。
おそらく、大型アップデートの際のみ更新されるものと思われる。
その他の差異は以下の通り。
- 著作権表示のJSONファイルは
https://maimai.sega.com/assets/data/RightsInfoText.json
にある。 - ジャケット画像のファイル名の前に付け足すURLは
https://maimaidx-eng.com/maimai-mobile/img/Music/
である。
なお、中国大陸版については、CHUNITHM同様そもそも公式サイトが存在しないものと思われる。
オンゲキ
楽曲リスト
▶エンドポイント: https://ongeki.sega.jp/assets/json/music/music.json
▼レスポンス例
[
{
"new": "",
"date": "20200930",
"title": "STARTLINER -星咲 あかりソロver.-",
"title_sort": "STARTLINERホシサキアカリソロVER",
"artist": "曲:kz(livetune)/歌:星咲 あかり(CV:赤尾 ひかる)",
"id": "709200",
"chap_id": "01001",
"chapter": "目指せ! いっぱいのエール!",
"character": "星咲 あかり",
"chara_id": "1010",
"category": "オンゲキ",
"category_id": "06",
"lunatic": "",
"bonus": "1",
"copyright1": "-",
"lev_bas": "2",
"lev_adv": "5",
"lev_exc": "8+",
"lev_mas": "11",
"lev_lnt": "",
"image_url": "92bac6746c5cd534.png"
},
{
"new": "",
"date": "20201008",
"title": "ロボットプラネットユートピア",
"title_sort": "ロホツトフラネツトユトヒア",
"artist": "lumo",
"id": "913900",
"chap_id": "04099",
"chapter": "END CHAPTER(第4章)",
"character": "みどニャン",
"chara_id": "9030",
"category": "チュウマイ",
"category_id": "05",
"lunatic": "1",
"bonus": "",
"copyright1": "-",
"lev_bas": "",
"lev_adv": "",
"lev_exc": "",
"lev_mas": "",
"lev_lnt": "0",
"image_url": "59fb1dc1b106d17f.png"
}
]
実際は1つのリストの中にすべての楽曲が入っている。
ここでは通常楽曲とLUNATIC楽曲1つずつを例として挙げた。
同一楽曲であっても通常譜面とLUNATIC譜面で1つずつオブジェクトが存在する。
▼各key/valueの説明
new
: 新曲か否か。新曲ならNEW
が、そうでなければ空文字列がvalueとなるdate
: 楽曲リリース日(YYYYMMDD
形式)title
: 楽曲タイトルtitle_sort
: ソート用の曲名。元のタイトルを一定のルールに従って変換したもので、濁点や小文字のないカタカナとアルファベット大文字のみで構成される。形式自体はCHUNITHMやmaimaiと同一だが、こちらは検索には使用されていないartist
: 楽曲アーティストid
: 楽曲IDchap_id
: 楽曲が属するチャプターのIDchapter
: 楽曲が属するチャプター名character
: 楽曲での対戦相手の名前chara_id
: 楽曲での対戦相手のIDcategory
: 楽曲カテゴリ名category_id
: 楽曲カテゴリのID。名前との紐付きはhttps://ongeki.sega.jp/assets/json/music/categories.json
でも確認できるlunatic
: LUNATICか否か。LUNATIC楽曲なら1
が、そうでなければ空文字列がvalueとなるbonus
: ボーナストラックか否か。ボーナストラックなら1
が、そうでなければ空文字列がvalueとなるcopyright1
: 著作権表示。内容が無い場合は-
がvalueとなるlev_bas
~lev_mas
: それぞれBASIC~MASTERの譜面レベル。LUNATIC楽曲の場合はいずれも空欄。『EXP』が『EXC』となっていることに注意lev_lnt
: LUNATICの譜面レベル。通常楽曲の場合は空欄となるimage_url
: ジャケット画像のファイル名。URLhttps://ongeki-net.com/ongeki-mobile/img/music/
に付け足すとジャケット画像を取得できる。
まとめ
ゲームによって結構仕様がバラバラになっている。さらに仕様やファイル名すらちょこちょこ変わるので定期的な確認が必要である。