ランキングデータの準備と定期更新
今回はランキングデータの準備です。
なろう小説APIを使います。
大体技術選定が終わったんで、まずはデータを集めようかと思います。
小説家になろうには便利なAPIが用意されてますのでそこから必要なデータを取りに行きます。
なろうデベロッパーというものがあって、開発者向けツールを提供されてます。
なろうデベロッパー
https://dev.syosetu.com/
その中で今回使うのは"なろう小説API"です。
なろう小説API
https://dev.syosetu.com/man/api/
このページの説明を見てもらえれば分かりますが、小説家になろうに投稿されている小説情報を取得することができます。
最大出力は1リクエストにつき500件。
指定できる条件は『キーワード指定/除外』、『ジャンル指定/除外』、『ユーザID指定』、『登録必須キーワード指定/除外』、『文字数指定』、『会話率指定』、『挿絵数指定』、『読了時間指定』、『Nコード指定』、『小説タイプ指定(連載、完結、短編等)』、『文体指定』、『連載停止中指定』、『ピックアップ指定』、『最終掲載日指定』。
出力は『全小説出力数』、『小説名』、『Nコード』、『作者のユーザID』、『作者名』、『小説のあらすじ』、『大ジャンル』、『小ジャンル』、『キーワード』、『初回掲載日』、『最終掲載日』、『ノベルタイプ(連載、短編)』、『完結済み』、『全掲載部分数』、『小説文字数』、『読了時間』、『長期連載停止中かどうか』、『R15タグの有無』、『ボーイズラブタグの有無』、『ガールズラブタグの有無』、『残酷な描写ありタグの有無』『異世界転生タグの有無』、『異世界転移タグの有無』、『投稿媒体』、『総合得点』、『ブックマーク数』、『レビュー数』、『評価点』、『評価者数』、『感想数』、『挿絵の数』、『会話率』、『小説の更新日時』、『最終更新日時』、『各期間ポイント』。
またオプションで、『週間ユニークユーザ数』も取得可能。ofパラメータを使うと、出力情報を指定できる。
また作品の並べ替えは、『ブックマーク数の多い順』、『レビュー数の多い順』、『総合評価の高い順』、『総合評価の低い順』、『感想の多い順』、『評価者数の多い順』、『評価者数の少ない順』、『週間ユニークユーザの多い順』、『小説本文の文字数が多い順』、『小説本文の文字数が少ない順』、『Nコードが新しい順』、『古い順』、『各期間ポイント』が可能。
---
まぁ要するに小説家になろうの小説詳細情報で出てくるような情報が取得できるということです。
流石に全部は取得すると容量が大きいので、その中からデータを選別して取得します。あんまりなろうさんに負荷かけないように選別します。
必要がない項目として、
『大ジャンル』
『読了時間』
『長期連載停止中かどうか』
『R15タグの有無』
『ボーイズラブタグの有無』
『ガールズラブタグの有無』
『残酷な描写ありタグの有無』
『異世界転生タグの有無』
『異世界転移タグの有無』
『投稿媒体』
『総合得点』
『挿絵の数』
『週間ユニーク』
ですかね。大ジャンルは小ジャンルからもとめられます。読了時間は文字数から、それぞれのフラグはキーワードにあります。投稿媒体はPCかスマホなので、特に必要ないです。総合得点はブクマ数と評価ポイントで計算できます。挿絵数はあんまり気にしている人いないかなと思うので不要で。週間ユニークは結局期間ポイントと相関あるので不要かな。
ということで取得する情報は、
- 小説名
- Nコード
- 作者のユーザID
- 作者名
- 小説のあらすじ
- ジャンル
- キーワード
- 初回掲載日
- 最終掲載日
- 小説種別
- 完結フラグ
- 全掲載部分数
- 小説文字数
- 期間ポイント
- ブックマーク数
- 感想数
- レビュー数
- 評価ポイント
- 評価者数
- 会話率
出力形式としてはgzipのJSONで持ってきます。件数はランキングと同じで300件。並べ替えは期間ポイント。ひとまず日間にしておきます。
あとこれにジャンルを指定すれば各ジャンルランキングもできますが、ひとまず総合だけ抜き出します。
ということでAPIに指定するパラメータはこんな感じかな。
https://api.syosetu.com/novelapi/api/?lim=300&out=json&gzip=5&order=dailypoint&of=t-n-u-w-s-g-k-gf-gl-nt-e-ga-l-dp-wp-mp-qp-yp-f-imp-r-a-ah-ka
あとはそれをサーバーのCronに設定して定期的に実行してくれるようにします。
15 3 * * * python test.py
実行時間は3時くらいでいいかな?
期間ランキング更新が8時なのでそっちの方がいいかもだけど、ひとまずこれで。
test.pyで取得したデータを配信用のフォルダに保存するようにしています。
これでjsonがサーバーに保存するようになって、ランキングデータが用意できました。
次から取得したデータをもとに表示できるようにしていきます。
なろうデベロッパー
https://dev.syosetu.com/
APIがあると楽でいいですね。他の小説投稿サイトも実装してくれんかな?