【なろう小説API】条件を指定してなろう小説の作品データを出力

## 環境
+ Microsoft Windows 10.0.22000.318（21H2）
+ Python 3.8.12.final.0

## 目的
[小説家になろう](https://syosetu.com/)で公開されている作品の中で著作権フリーのものを探す。具体的には、`'keyword': '著作権フリー'` となるものを抽出する。


## 「なろう小説API」とは
> なろう小説APIでは小説家になろうに掲載されている小説情報を取得できます。（[なろうデベロッパー](https://dev.syosetu.com/man/api/)より引用）

なろうAPIの仕様については[なろうデベロッパー](https://dev.syosetu.com/man/api/)に書かれている。


## ソースコード
<details><summary>パラメータについてはこちら</summary><div>
なろう小説APIのURLで使用できるパラメータについて、[公式](https://dev.syosetu.com/man/api/ "なろう小説API")より一部抜粋して紹介する。

### 出力GETパラメータ
出力に関するパラメータ

|パラメータ|値|説明|
|:--|:--|:--|
|`out`|string|出力形式は yaml, json, php。未指定時は YAML。|
|`of`|string|出力する項目を個別に指定できる。未指定時は全項目出力される。 転送量上限を減らすために推奨。|
|`lim`|int (1～500)|最大出力数を指定できる。未指定時は20件。|
|`order`|string|出力順序を指定できる。未指定時は新着更新順。|

### 条件抽出GETパラメータ
条件を指定して出力を絞り込むパラメータ

|パラメータ|値|説明|
|:--|:--|:--|
|`word`|string|単語を指定できる。|
|`notword`|string|含みたくない単語を指定できる。|
|`ncode`|string|Nコードで抽出。|
|`biggenre`|int, string|大ジャンルを指定できる。|
|`genre`|int, string|ジャンルを指定できる。|
|`userid`|int, string|ユーザIDで抽出。|
|`minlen`|int|抽出する小説の最小文字数を指定できる。|
|`maxlen`|int|抽出する小説の最大文字数を指定できる。|
|`length`|int, string|抽出する小説の文字数を指定できる。|
|`type`|string|小説タイプを指定できる。|
|`lastup`|string|最終掲載日(general_lastup)で抽出。|

### 抽出対象の範囲
|パラメータ|値|説明|
|:--|:--|:--|
|`title`|int|1の場合はタイトルをwordとnotwordの抽出対象にする。|
|`ex`|int|1の場合はあらすじをwordとnotwordの抽出対象にする。|
|`keyword`|int|1の場合はキーワードをwordとnotwordの抽出対象にする。|
|`wname`|int|1の場合は作者名をwordとnotwordの抽出対象にする。|

### `of`パラメータの項目
出力GETパラメータ `of` で指定できる項目

|項目|内容|説明|
|:--|:--|:--|
|`t`|title|小説名|
|`n`|ncode|Nコード|
|`u`|userid|作者のユーザID（数値）|
|`w`|writer|作者名|
|`s`|story|小説のあらすじ|
|`bg`|biggenre|大ジャンル|
|`g`|genre|ジャンル|
|`k`|keyword|キーワード|
|`l`|length|小説文字数|

</div></details>

```python:.py
import requests
import json

url = "http://api.syosetu.com/novelapi/api/"

# 小説名、作者名、Nコード、キーワードを出力
# キーワードに「著作権フリー」を含むものを出力
# json形式で出力
payload = {'of': 't-w-n-k', 'word': '著作権フリー', 'keyword': '1', 'out':'json'}

response = requests.get(url, payload).json()

# 整形して表示
print(json.dumps(response, indent=2, ensure_ascii=False))
```
最大出力数を指定していないため、20件しか出力されていない。すべて表示する場合は、パラメータに `'lim': '32'` を追加する。

```json:出力例
[
  {
    "allcount": 32
  },
  {
    "title": "アルメシア 〜神に選ばれし転移者たちの英雄譚〜",
    "ncode": "N8849FZ",
    "writer": "K.R.",
    "keyword": "R15 残酷な描写あり 異世界転移 オリジナル戦記 三人称視点 恋愛要素あるかも 不定期更新 主人公は四人 徐々に 成長 休載多め 群像劇 無双・ハーレムなし 冒険者 スキル 魔王 自作挿絵 著作権フリー 二次創作OK"
  },
  {
    "title": "異世界系なろう作家御用達！～魔物を調べるのがめんどい人向けの魔物辞典～",
    "ncode": "N9849FC",
    "writer": "加島　龍／きすみきりん",
    "keyword": "魔物辞典 著作権フリー 剣と魔法 ファンタジー 記角麒麟 魔物 種類 スライム ゴブリン ラノベ なろう作家御用達 伝説の生物 魔物の一覧 きりぺでぃあ"
  },
  {
    "title": "隠居老人の閑言～作者さん、ありがとう～",
    "ncode": "N0308FT",
    "writer": "隠居老人",
    "keyword": "著作権フリー"
  },
  {
    "title": "こねこのまち",
    "ncode": "N5534GD",
    "writer": "おぎのおさむ・りょう共著",
    "keyword": "仔猫 子猫 著作権フリー 絵本 絵本原作 童話"
  },
  {
    "title": "＞死刑は人殺しだから、それを存続させようというのは人でなしだと思う",
    "ncode": "N1228GD",
    "writer": "隠居老人",
    "keyword": "著作権フリー 死刑"
  },
  {
    "title": "異世界で今日も逃げてます！",
    "ncode": "N0306FZ",
    "writer": "(＾‿＾)&gt; イヤー、アハハハ",
    "keyword": "異世界転移 冒険 著作権フリー ギャグ 未来 魔法"
  },
  {
    "title": "隠居老人の譫言～こんな感想書いて作者さん、すみません～",
    "ncode": "N2153EP",
    "writer": "隠居老人",
    "keyword": "著作権フリー 議論歓迎 感想募集者受付中"
  },
  {
    "title": "隠居老人の建言～作者さん、騙されてませんか？～",
    "ncode": "N0845FT",
    "writer": "隠居老人",
    "keyword": "著作権フリー"
  },
  {
    "title": "殺意の居場所（続きを書くのはあなただ！！）",
    "ncode": "N2172FT",
    "writer": "35年寝太郎",
    "keyword": "ミステリー サスペンス 探偵小説 著作権フリー 続き求ム"
  },
  {
    "title": "魔法魔術リテラシー",
    "ncode": "N3570ES",
    "writer": "加島　龍／きすみきりん",
    "keyword": "魔法 魔術 魔法魔術リテラシー 四大元素 魔力 妖術 魔女術 哲学 思想 主義 宗教 教科書 厨二病向け 著作権フリ ー ノンフィクション"
  },
  {
    "title": "元号や天皇制は必要なのか？　「元号廃止論」と「近代日本＝昭和」と「現代＝令和」という【公私混同】の【権威】が創る元号",
    "ncode": "N5722FK",
    "writer": "隠居老人",
    "keyword": "史実 著作権フリー"
  },
  {
    "title": "キタマジ！？～帰宅部LV99が異世界から帰宅するってマジ！？～",
    "ncode": "N5257EH",
    "writer": "たかしクランベリー/TOKISDEO公式",
    "keyword": "R15 残酷な描写あり 異世界転移 冒険 VRMMO TS ギャグ シリアス ほのぼの 四部構成採用 たかしクランベリー キ タマジ第一部 帰宅部lv99 著作権フリー 後書き茶番 一話約1000文字 パロディ ラグナガルド"
  },
  {
    "title": "異世界系なろう作家御用達！～道具を調べるのがめんどい人向けのアイテム辞典～",
    "ncode": "N7423FF",
    "writer": "加島　龍／きすみきりん",
    "keyword": "アイテム辞典 道具辞典 きりぺでぃあ ポーション 錬金術 魔法 剣と魔法の世界 著作権フリー 資料"
  },
  {
    "title": "異世界系なろう作家御用達！～武器を調べるのがめんどい人向けの武器辞典～",
    "ncode": "N6923FF",
    "writer": "加島　龍／きすみきりん",
    "keyword": "きりぺでぃあ 武器辞典 剣と魔法の世界 異世界 ラノベ 資料 著作権フリー"
  },
  {
    "title": "ウツケの園～「休」と書いて楽園作り〜",
    "ncode": "N2766FF",
    "writer": "アッキ@瓶の蓋。",
    "keyword": "異能力バトル オリジナル バカ 異能力 文字 連載する? 著作権フリー"
  },
  {
    "title": "光のダンジョン繁盛記～ここはダンジョンです!　育て屋ではありません!～",
    "ncode": "N8762FE",
    "writer": "アッキ@瓶の蓋。",
    "keyword": "オリジナル戦記 短編 著作権フリー ダンジョン"
  },
  {
    "title": "異世界掃除騎ダンジャリオン～排除力の変わらない、ただ1人の救世主～",
    "ncode": "N5308FE",
    "writer": "アッキ@瓶の蓋。",
    "keyword": "オリジナル戦記 ヒーロー 異世界 召喚 モノだしすぎ 片付け 短編版 著作権フリー"
  },
  {
    "title": "剣に嫌われていた騎士は、魔王と共に成り上がる",
    "ncode": "N7475FD",
    "writer": "アッキ@瓶の蓋。",
    "keyword": "オリジナル戦記 異能力バトル 魔王 狐耳 魔剣 剣士 落ちこぼれ 成り上がり 著作権フリー"
  },
  {
    "title": "何を食べた？",
    "ncode": "N2905EZ",
    "writer": "Unknown_staff",
    "keyword": "R15 年の差 ミステリー サスペンス 下ネタ シリアス 現代 事件 著作権フリー"
  },
  {
    "title": "隠居老人の戯言～作者さん、すみません～",
    "ncode": "N4900ED",
    "writer": "隠居老人",
    "keyword": "R15 著作権フリー 異論反論歓迎 感想募集者受付中"
  }
]
```

## 参考
https://github.com/ta08/narou-api-handson/blob/master/src/chapter01.ipynb

https://murabitoleg.com/narou-python1/

https://qiita.com/sola_wing529/items/bad361cdd0d11373b7be