LR2 BP減らし周回用のカスタムフォルダを作る

はじめに

こんな感じのフォルダを作る記事です。LR2にはBPソートがないので自分で作ることにしました。

作業

BeMusicSeekerの導入が前提です。

対象とする難易度表のplaylist_idを確認する

BeMusicSeekerのプレイリスト出力フォルダのうちの対象としたい難易度表のフォルダを開き、拡張子が.lr2folderのファイルをなんでもいいので開く。

#COMMANDplaylist_id = xxxxxを探してIDをメモ。

カスタムフォルダを作る

どこでもいいのでフォルダを作って中に移動。フォルダ名は難易度表名 (order by BP)などにしておくとわかりやすい?

以下のような内容の拡張子が.lr2folderのファイルを好きなだけ作る。

SQLがわかる方は#COMMANDは好みに合わせて改変してください。対象の難易度表を複数にしたりなど

#COMMAND song.hash in (SELECT md5 FROM playlist_entry WHERE playlist_id = 前の作業で確認したIDをここに AND is_removed = 0) AND (minbp BETWEEN 120 AND 130) ORDER BY minbp ASC
#MAXTRACKS 0
#TITLE 120 <= BP <= 130

ただ手作業だと面倒なのでカスタムフォルダを自動生成するPythonスクリプトを用意しました。BPを1から10ごとに最大300まで分けたカスタムフォルダを作成します。

(追記)環境構築不要のバッチファイルの方がよかったかも やりたいことはもう実現できているので気が向いたら書く 誰か代わりに書いて(追記おわり)

.lr2folderを生成する場所に下記のコードをgeneratelr2folder.pyなどとして保存してください。

playlist_id = 1 # 前の作業で確認したIDをここに

lr2folder_template = lambda lower_limit, upper_limit :f"""#COMMAND song.hash in (SELECT md5 FROM playlist_entry WHERE playlist_id = {playlist_id} AND is_removed = 0) AND (minbp BETWEEN {lower_limit} AND {upper_limit}) ORDER BY minbp ASC
#MAXTRACKS 0
#TITLE {lower_limit} <= BP <= {upper_limit}
"""

for i in range(30):
    lower_limit = i * 10 + 1
    upper_limit = (i + 1) * 10
    # print(lr2folder_template(lower_limit, upper_limit))
    with open(f"{str(i).zfill(4)}.lr2folder", mode="w") as f:
        f.write(lr2folder_template(lower_limit, upper_limit))

実行方法の例は以下の通りです。詳しくは各自で調べて

Windows

py generatelr2folder.py

Mac/Linux/WSL

python3 generatelr2folder.py

LR2のJUKEBOXでプレイリストを追加

フォルダをD&Dしておわり。

Google ドライブの仕様変更でBMSが落とせなくなった話の対処とBMSユーザーへのお願い

まとめ

support.google.com

workspaceupdates.googleblog.com

2021年9月13日以降、一度も開いたことのないhttps://drive.google.com/open?id={ファイルID}https://drive.google.com/file/d/{ファイルID}/形式のURLからファイルを落とすことができなくなりました。

誰でもファイルにアクセスできるようにするためにはリソースキーが必要になります。過去にファイルに一度でもアクセスしたことのあるアカウントの場合、URLの末尾が自動でhttps://drive.google.com/file/d/{ファイルID}/edit?resourcekey={リソースキー}のようになります。リソースキーが含まれたURLならば、アカウントさえあれば誰でもファイルにアクセスすることができます。

この仕様変更の厄介な点は、過去にファイルに一度でもアクセスしたことのあるアカウントからは仕様変更に全く気付かないということです。

イベント会場やLR2IRなどでアクセス権が必要と表示され作者の意向に反してダウンロードできないBMSを発見した際は、作者に連絡する or 自身に権限がある場合はURLをリソースキーを含むものに変更することをお願いいたします。

BOFU2017のDayBreak / DusKを例に出します。 manbow.nothing.sh

本体のURLはhttps://drive.google.com/open?id=0B5sLPIyox3GENUhiUFFBSmZSbzgとなっています。このファイルに一度でもアクセスしたことのあるGoogleアカウントでは何の問題もなくダウンロードすることができる一方、そうでないアカウントではアクセス権が必要と表示されてしまいます。

リソースキーを追加したhttps://drive.google.com/file/d/0B5sLPIyox3GENUhiUFFBSmZSbzg/view?usp=sharing&resourcekey=0-YVbIj6LLHkeF7NfsRqhC8QのURLならば、今後も誰でもアクセスすることができます。(別のGoogleアカウントやシークレットウィンドウなどから確認できると思います)

bmsidをmd5に変換する

結論

@rib_2_bit様のBMS Search Alternativeを使わせて頂く。

www.ribbit.xyz

自分オリジナルのBMS難易度表を作って公開しよう【無料・Webブラウザ上で完結】

はじめに

自分の好きな譜面や自作譜面をまとめた難易度表を作成・公開したいと思ったことはありませんか?この記事ではGoogle スプレッドシートGitHub Pagesを利用したBMS難易度表の簡単な作成・公開方法を紹介します。

当記事作成にあたりHex様の記事を参考にさせて頂きました。

bms.hexlataia.xyz

Google スプレッドシートの作業

難易度表の作成

Google スプレッドシートで新しいスプレッドシートを作成し、以下の表を1行目にコピペしてください。このような形式で譜面を記述し難易度表を作成します。

lr2irの列は必須ではありませんが、=HYPERLINK("http://www.dream-pro.info/~lavalse/LR2IR/search.cgi?mode=ranking&bmsmd5="&D2)などのように入力しておくとスプレッドシートからLR2IRに簡単に飛べて便利です。

docs.google.com

level title artist md5 comment lr2ir
12 G e n g a o z o _ G O D 455 / rio / black train 5110b92d997eabc3d2322556617632ad 拷問
20 Air -GOD- SHIKI / black train 751738dea1169c5c39db935adfc9e85f 180 乱打
24 Love & Justice [GOD] フロン / ラズベリル / obj: black train 39d0732ef7fee9ad0c8b044ccbe8a396 أحد مؤسسي نهضة اليابان الحديثة، فقد كان
危険!! 運命論 ルゼ ☆ えみゅう。 ☆ 石王マサト ★ UnK-now/37X 188a99f74ab71804f2e360dcf484545c levelは文字列なので数字じゃなくてもOK
論外!!!! 戦歌「オルグラリヤ」 ルゼ / Unk-now / 37E ec1598e752ce393aa8dced158bf6e39c The judgement day is coming...

フィルタの作成や書式設定などで体裁を整えておきましょう。levelのソートは必ず行ってください。

譜面の入力が終わったら、スプレッドシートのID(URLのhttps://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxの部分)を記録しておきます。

Apps Scriptの作成

ツールタブからスクリプト エディタを選択しApps Scriptの編集画面を開きます。

以下のソースコードをコピペし、xxxxxxxxxxxxxxxxxxxxxの部分を先ほど記録したスプレッドシートのIDに書き換えて保存します。

function getSheetAsObj(id, sheet_name) {
  var sheet = SpreadsheetApp.openById(id).getSheetByName(sheet_name);
  var rows = sheet.getDataRange().getValues();
  var keys = rows.splice(0, 1)[0];
  return rows.map(function(row) {
    var obj = {}
    row.map(function(item, index) {
      if (keys[index] != "lr2ir") {
        obj[keys[index]] = String(item);
      }
    });
    return obj;
  });
}

function doGet() {
  var obj = getSheetAsObj('xxxxxxxxxxxxxxxxxxxxx', 'シート1');  // ここにスプレッドシートのID
  return ContentService.createTextOutput(JSON.stringify(obj, null, 2)).setMimeType(ContentService.MimeType.JSON);
}

画面右上のデプロイから新しいデプロイを選択し、種類の選択ウェブアプリに、次のユーザーとして実行自分に、アクセスできるユーザー全員にしてデプロイします。データへのアクセスを許可を求められた場合はアクセスを承認してください。

デプロイが完了したらURLを記録しておきます。URLを踏んだ際に次期難易度表フォーマットのJSONが表示されればデプロイは成功です。(Stellaの例 このようなテキストが表示されれば正常です。)

スプレッドシートを更新した場合はJSONも勝手に最新の状態になります。(ただしソースコードを更新した場合は再びデプロイする必要があるため注意してください。)

GitHub Pagesの作業

Fork

GitHub Pagesを利用するためにGitHubのアカウントが必要です。持っていない方は作成してください。

HTMLを書きたくない方向けにテンプレートを用意しました。以下のリポジトリを開き、画面右上のForkを選択してください。リポジトリが自分のアカウントにコピーされ自由に編集できるようになります。

github.com

header.jsonの編集

header.jsonを選択すると以下のようなJSONファイルがプレビューされます。

{
"name" : "ここに難易度表の名前",
"symbol" : "ここにシンボル",
"data_url" : "ここにJSONのURL"
}

鉛筆のようなアイコン(マウスカーソルをかざすとEdit this fileと出てきます。)を選択し、header.jsonに難易度表の名前、シンボル(★とか★★とか◆とかstみたいなやつ)、先ほどデプロイしたURLを記述します。

index.htmlの編集

index.htmlheader.jsonと同様に編集します。ここに難易度表の名前の部分とここに難易度表の説明文の部分を書き換えてください。

GitHub Pagesの設定

まずリポジトリの名前がBMS-Table-Templateのままなので変更しましょう。リポジトリの名前はSettingsタブのRepository nameで変更することができ、難易度表のURLはhttps://{あなたのID}.github.io/{変更したリポジトリの名前}/になります。

SettingsタブからPagesを選択しSourceNonemasterに変更し保存します。

Your site is ready to be published at https://{あなたのID}.github.io/{変更したリポジトリの名前}/と出てくるので、このURLを記録しておきます。これが公開された難易度表のURLになります。

LR2の場合はBeMusicSeekerなどで難易度表を読み込むことができます。

これ以降難易度表に譜面を追加したり削除する場合はスプレッドシートを更新するだけで作業が完了します。(Apps ScriptやGitHubは触る必要ありません。)

おわりに

Google スプレッドシートGitHub Pagesを利用したBMS難易度表の作成・公開の方法を紹介しました。皆さんも是非オリジナルの難易度表を作成してみてください。

テンプレートを改変する場合は次期難易度表フォーマットの詳細が以下のリンク先に載っているので参考にしてください。

github.com