孫氏曰く「彼を知り己を知れば百戦殆からず」
己を知る一助となれば幸いでございます。
つくったもの
リポジトリ: https://github.com/sushigadaisuki/dlsite_seiheki_analyzer/tree/master
https://play.dlsite.com/#/library に性癖分析ボタンを追加。性癖グラフを表示する。
使い方
- Tampermonkey をインストール (Tampermonkey上で動作します)
- ここからスクリプトをインストール install
- 2でインストールしたスクリプトを有効化
- https://play.dlsite.com/#/library を開く
- 性癖分析ボタンが表示されたらクリック
要件
- サーバが不要なシステム(毎月お金払いたくないし)
- DLsiteサーバに負荷をかけない
- 簡単に使える(JavaとかNodeとかインストールするの面倒だし)
技術的な解説
処理の流れ
- 作品IDから登録されているタグを引けるJSON辞書を作成し、Githubでホスティング
- 辞書をダウンロード
- 購入済み作品リストを取得
- 購入済み作品をリストに照らし合わせてタグをカウント
- 各タグをスコアリング
- ボタンを追加
- グラフ化
JSON辞書
作品IDからタグを引くための辞書。
データサイズを減らすためにKeyVal形式にした。
さらにデータ量を小さくするためにgzで圧縮してgithubでホスティングしている。
JavaScript上ではfetchしてからpakoで解凍して使っている。
スコアリング
タグのカウントをスコアにしてしまうと、単によく使われるタグが高スコアになってしまう。
タグのレアリティをスコアに反映するために辞書から各タグの合計数を算出してその逆数を係数とする。
tf-idfっぽい考え方。
たとえば、VTuberの本を100冊、コスプレの本を100冊持ってたとする。
辞書より、VTuberの本は全体で3964冊、コスプレの本は全体で10437冊存在する。
これよりスコアはVTuber 0.025227, コスプレ 0.009581 となる。
最後にスコアの合計が1になるようノーマライズする。
グラフ化
quickchart.io という便利なサービスを使う。
クエリパラメータにグラフ情報を付けるとグラフを作ってくれる。
CORS
24/12/10 追記
開発中はなぜかうまくいってたけど、どうやらtampermonkeyでfetchは普通にCORSではじかれるらしい。(なぜうまくいってたんだろうか・・・)
ということで GM_xmlhttpRequest というモジュールを利用する。
これを使えばconnectに記載されたドメインにアクセスできるようになる。