データを取得する
なろうAPIの仕様については、
https://dev.syosetu.com/man/api/
に記述されています。
なろうAPIを利用してデータを取得する、ということで検索を掛けてみると、まず既存でpythonのスクリプトが出てきます。実績はあるスクリプトだと思いますが、普通の人にはpythonの環境を整えるのはちょっと敷居が高いだろうと。
ということで、windowsで標準で用意されているPowerShellのスクリプトでAPIデータを取得できるようにしてみました。
まあ、PowerShellでも敷居が高いことは高いのですが、pythonよりはましかな…… と。
スクリプト自体は、
https://mypage.syosetu.com/mypageblog/view/userid/1633544/blogkey/3024577/
の活動報告に載せてあります。この、線で区切られた部分をコピペしてファイルに保存します。ここでは、「narouSample.ps1」と名前を付けることとします。無駄に空行が入っていますが、動作には支障は無いでしょう。
このスクリプトを使うには、データの保存場所とデータの取得開始日時をカスタマイズします。ファイルの先頭部分に記載されている値を修正することになります。Jsonファイルで1GB、さらに日ごとにzipしたファイルが作られるので、それなりに余裕のあるディレクトリを指定してください。
コメントに書いてありますが、現状でJsonファイルが1GB、zipファイルが各日190KBぐらいになります。もし、大きすぎる場合は、APIのオプションで取得内容を制限したり、取得する時間範囲を狭めたりすることになるかと思います。
スクリプトが保存出来たら、PowerShellを起動します。画面左下のサーチboxにpowershellと入力すると、
結果が表示されますので、これを起動します。すると、コマンドプロンプトと同様なウィンドウが立ち上がりますので、ここで先に保存したファイル名をフルパスで指定すると、プログラムが起動されます。
なお、PowerShellではカレントディレクトリにあるスクリプトでも、ファイル名だけでの実行はできません。相対パス指定するなら、./narouSample.ps1などと、カレントからの相対パスで指定します。
また、実行ポリシーがデフォルトだとスクリプトの実行を許容していないため、例えば
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
などとして、スクリプトの実行を許可します。なお、これは多少セキュリティレベルを下げる話で、PowerShellのコマンドラインの起動オプションでExecutionPolicyを指定したり、ハードルは高いですが署名をつけたりする方法もある事はありますので、適当な手段を選んでください。
スクリプトを実行すると、データ取得時に上の方でちらちらと進捗が出たりしますが、後はいつのデータを取得しているかが順に表示され、最後にJsonファイルが出力され、それをzipに固めてプログラムは終了します。
現状の設定で、通信データ量は220MB程度だと思いました。適用は停止されているようですが、もともとなろうAPIには一日当たりの利用量制限があるようです。それは400MBとなっているので、一日一回ならデータを取得しても許容範囲かな、と考えています。
なお、APIの呼び出しですが、特段のインターバルは取っていません。これで、70万件ほどのデータを取得するのに、約3-40分かかっています。
これで、Jsonファイルが取得出来たら、次のこれをExcelに読み込むことになります。