見出し画像

[BMS] 今更解説するBeMusicSeekerで忍者ホームページで公開されている難易度表が読み込めない理由 [LR2]

背景

正確にいつ頃からなのかは忘れましたが、数年前からBeMusicSeekerでは忍者ホームページで公開されている難易度表が取り込めません。
正確には、header.json(ヘッダ部)が忍者ホームページに置かれている難易度表が取り込めない状態です。難易度表のHTML部分は忍者ホームページに置かれていても問題ありません。
今回はなぜこのような現象が起きているのか調べてみました。

結論

まず、結論から言うと忍者ホームページでは、ユーザーエージェント(User Agent:UA)の状態によって、403(拒否)が返されるという仕様が存在するようです。
BeMusicSeekerではheader.jsonをGETする際のHTTPリクエストヘッダに"User-Agent:"が設定されていません。

詳細

以下のように、ChromeのデベロッパーツールでUAを「あ」という異常な文字列にして忍者ホームページのコンテンツにアクセスしてみると403エラーになってしまいました。

UAを「あ」に変更した際の挙動

つぎに、BeMusicSeekerで難易度表をインポートする際のパケットをWiresharkを用いて調べてみました。
以下のように、難易度表ページのHTMLをGETする際はUAが設定されており、ステータスコードは成功を表す200が返ってきています。

表ページのHTMLをGETする際のリクエスト

しかし、header.jsonをGETする際はUAの項目が存在せず、ステータスコードは拒否を表す403が返ってきています。

header.jsonをGETする際のリクエスト

以上のことから、忍者ホームページではHTTPのUser-Agentヘッダの状態に応じて応答を拒否することがあるという仕様が存在することが分かりました。

対策

一番良いのは、難易度表のヘッダ部とデータ部が、UA未設定のリクエストに対して403を返さないサーバーに置かれることですが、これはBeMusicSeekerユーザーの都合によるものです。beatorajaでは現状でも問題なく難易度表読み込みができます。

ユーザーでできる対策としては、以下のような難易度表をアーカイブしているサイトを利用するという方法があります。

いかがでしたか?

今回は、忍者ホームページで公開されている難易度表をBeMusicSeekerでインポートできない理由を調べてみたところ原因が分かりました。
原因が分かったところでどうしようもないのですが、個人的には謎に思っていたことなのでスッキリしました。



この記事が気に入ったらサポートをしてみませんか?