どうもこんばんわ。
初夢は悪夢でした。いや普段は起きたら忘れちゃうんですけどなんか覚えてた(?)
本題
持ってるエロゲソング、いつもアルバムか歌手のプレイリストなので、もっとなんかいい感じのプレイリストを作りたい!!
メーカー別とか、年代別とか、OP / 挿入歌 / ED 別とかのプレイリストが欲しい!!!
しかし
手動で一つずつ入れていくのは確実に無理。
数が多すぎる。。。
ErogameScape
https://erogamescape.dyndns.org/
えろすけとか、批評空間とか呼ばれているこのサイト、エロゲの情報が集まってるサイトなんですが、
ありがたいことに!、SQL
を書くことでサイトのデータベースに問い合わせることが出来ます。
https://erogamescape.dyndns.org/~ap2/ero/toukei_kaiseki/sql_for_erogamer_form.php
コレを使って、エロゲソング名からゲーム情報やメーカー情報をとって、プレイリストを作ろうと思います!!!
SQL フォーム
一部のテーブルは文書化されています。
https://erogamescape.dyndns.org/~ap2/ero/toukei_kaiseki/sql_for_erogamer_tablelist.php
が、全て文書化されているわけではないので、どうするのが正攻法かは知りませんが、PostgreSQL
のテーブル一覧を吐き出すSQL
を叩いて、それっぽいテーブルを適当にSELECT * FROM hogehoge LIMIT 10
とかで見て、探す必要が多分あります?
今回のエロゲソング関連のテーブルはこんな感じになってます。
- musiclist
- gamelist
- エロゲソングがどのエロゲで使わたかの情報が格納されています
- 中間テーブルですね
- gamelist
中間テーブルがあるので、一つのエロゲソングが複数のエロゲに使われてもちゃんと表現できるわけなんですね。
データベース設計難しそう
https://erogamescape.dyndns.org/~ap2/ero/toukei_kaiseki/music.php?music=1331
環境
スクレイピングができればなんでも良いはず。
私はKotlin(Java)
でいきます
入ってる曲一覧が欲しい
さて、問題が。
パソコンに入ってる曲から曲一覧が無いと始まらないのですが、どうやって取ろうかなあ...
音楽ファイルを音楽フォルダから探す
音楽の入ってるフォルダを渡して、ファイル一覧を出すやつ。
ただ、これだとファイル名
が曲名として使えるかは微妙なんですよね。
なんかインデックスがファイル名に入っちゃってるのと、なんか_
で置換されちゃってるファイルもある。
やっぱ正規ルートはID3 タグ?
を解析する...?
FFmpeg
についてくるffprobe
がもしかするとID3 タグ
のパースに対応しているかも。
Music Center から取り出す
私はMusic Center for PC
という音楽プレイヤーを使ってるのですが、
tracks.db
ファイルがこのアプリが認識している曲一覧を持っているファイルであることが分かりました。
パスはここで、拡張子こそSQLite
ぽく見えますが、テキストファイルとして開くことが出来ます。
C:\Users\{ユーザー名}\AppData\Roaming\Sony\Music Center\db
テキストの構造ですが、1行ごとがJSON
になっているみたいなので、1行取り出して、JSON
パーサーにかけると良いと思います。
kotlinx.serialization
だとこんな感じ?
いいかんじ!!に出力されています!
Android から取り出す
Android
端末が音楽プレイヤーでAndroid
の開発環境があれば、曲一覧の取得は多分コレが一番早いかもしれない。
要らなそうなのを消す
カラオケ版(Instrumental
、Karaoke
、off volcal
)を消します。
それから、明らかにエロゲソングじゃないやつも手動で弾きます、ほとんどがエロゲソングなので手動で何とかなってそう。
あとはエロゲソングじゃないBGMとかも残っちゃうんだけどこれはもうSQL
に書いちゃおうかな...
あんまり参考にならんと思うけどこんな感じにしてみた
SQL を書く
複数の文字一致はWHERE カラム名 in ('文字', '文字')
みたいな感じでできるらしい。
カラム名 = '文字' or カラム名 = '文字'
と同じらしい。
というわけで試してみる。
ちゃんと複数でも動いていそう。
あとはこれをもとにSQL
を組み立てて(今回は面倒なので文字列連結しますが、プレースホルダー等を使いましょうね)、
POST
リクエストしてスクレイピングすれば良さそう!
というわけでこんな感じ(かなり端折ってるので雰囲気つかんで)
OkHttp
を使ってます。
これでJSON
形式でいい感じに批評空間でSQL叩いた結果が保存されるようになりました。
これを煮るなり焼くなりすればプレイリスト作れそう。
プレイリストをつくる
作ります!
手始めに年代別出してみます!
21 番目なのはSQL
実行結果の表の列のことですね。
ほい!
あとはプレイリストを作るだけですね!
m3u8 ファイル
.m3u
とか、.m3u8
言われてるこれ、音楽ファイルのパスを列挙すればいいらしい?
.m3u8
といえばHLS
ですが(一筋縄でダウンロードさせてくれないやつで有名)、音楽のプレイリスト作るのにも使うんですね。
こんな感じでしょうか。
どうやらMusic Center
は.m3u8
にしないとダメだった、.m3u
だとなんか私の作り方が悪いのかダメでした。
というわけでコレを目指して作ってみます。
年代別でm3u8
ファイルを作って
出来てる出来てる
Music Center
のここから、生成した.m3u8
を取り込めば良いはず!
はい!できたああああ
いろいろ作ってみた
ブランド別
OP / ED / 挿入歌
別
挿入歌、地味にすごい
いい感じ!!
もっと頑張らないとダメそう
次やるならこの点にも気をつけたい
- コンシューマー版(家庭用ゲーム機版)の発売日が紛れ込んでいる
- もうクエリ叩き直すのめんどかったので、
Music Center
側のリリース年と批評空間側の発売日を突き合わせて、リリース年が一致するか、リリース年がそもそも無ければそれも無条件で入れる。ようにしました
- 同じ曲が2個はいってる場合
- 例えば
原曲ver
とヒロインが歌ったver
みたいなのには対応していない
- タイトル被り
- 大変そう
- タイトル被ったら被ったものだけ集めて、追加情報を渡してふるいにかけるような
SQL
を書くと良いかもしれない。
- カラオケ版以外にもアレンジ版とかがあれば弾くべき?
おわりに
つかったコード置いておきます、断片的でまともに使えないと思いますが...
https://github.com/takusan23/ErogePlaylistMaker/blob/master/src/main/kotlin/Main.kt
そして批評空間にエロゲソング情報を残してくれた方、ありがとうございます。大変助かりました;;