なろう小説APIでは小説家になろうに掲載されている作品情報を取得できます。
このAPIではR18作品は取得できません。R18取得APIはコチラ
なろうAPIはHTTPでのリクエストに対してJSON形式、JSONP形式又はYAML形式、PHPのserializeで応答します。
実際に作品のデータが修正されてからなろうAPIに反映されるまで平均5分程度(最大2時間)の誤差があります。
出力形式
JSON形式、JSONP形式またはYAML形式、PHPのserialize
標準はYAML形式となっていますが、outパラメータで変更できます。
文字コードはUTF-8です。
APIのURL
https://api.syosetu.com/novelapi/api/
GETで送信。POSTでは受信できません。
日本語などマルチバイト文字送信時は文字コードをUTF-8にし、URLエンコードしてください。
出力GETパラメータ
パラメータ | 値 | 説明 |
---|---|---|
gzip | int(1~5) |
gzip圧縮してgzipファイルとして返します。 |
out | string |
出力形式をyamlまたはjsonまたはphpを指定。 |
of | string |
出力する項目を個別に指定できます。未指定時は全項目出力されます。 |
lim | int(1~500) |
最大出力数を指定できます。最低1、最高500です。 |
st | int(1~2000) |
表示開始位置の指定です。半角数字で指定してください。 |
order | string |
出力順序を指定できます。
|
outパラメータの詳細
出力形式を指定できます。
jsonまたはyamlまたはphpで指定してください。
-
yamlYAML形式(デフォルト)
-
jsonJSON形式
-
phpPHPのserialize()
-
atomAtomフィード
-
jsonpJSONP形式
JSONPの使い方
JSONPを利用することでJavaScriptから直接、APIを利用できるようになります。
-
callbackコールバック関数名。コールバック関数名には半角英数字など/^$?[a-zA-Z0-9\[\]\.\_]+$/ (perl) の正規表現に一致する関数名を指定してください。
https://api.syosetu.com/novelapi/api/?out=jsonp&callback=call
JSONP形式でコールバック関数名をcallにしたい場合のURLです。
YAML形式の出力に関する動作について
出力形式にYAMLを指定した場合、パラメータを指定する事で利用するライブラリを変更できます。
パラメータ | 値 | 説明 |
---|---|---|
libtype | int |
利用するライブラリを指定できます。
|
https://api.syosetu.com/novelapi/api/?libtype=1
従来通りのライブラリで出力を行ないます。
作品名や作者名等、文字列が格納される部分が数値で構成されている場合でも、数値はダブルクォートで囲まれません。
https://api.syosetu.com/novelapi/api/?libtype=2
新ライブラリで出力を行ないます。
作品名や作者名等、文字列が格納される部分が数値で構成されている場合、数値がダブルクォートで囲まれます。
Atomフィード形式の出力に関する動作について
Atomフィードの出力内容をパラメータを指定することで変更できます。
パラメータ | 値 | 説明 |
---|---|---|
updatetype | int |
日付として出力する項目を指定できます。 |
https://api.syosetu.com/novelapi/api/?out=atom
作品の更新日時novelupdated_atを日付として出力します。
https://api.syosetu.com/novelapi/api/?out=atom&updatetype=2
最終掲載日general_lastupを日付として出力します。
条件抽出GETパラメータ
検索単語指定
パラメータ | 値 | 説明 |
---|---|---|
word | string |
単語を指定できます。文字コードはUTF-8でURLエンコードしてください。 |
notword | string |
含みたくない単語を指定できます。文字コードはUTF-8でURLエンコードしてください。 |
抽出対象の範囲
パラメータ | 値 | 説明 |
---|---|---|
title | int |
1の場合はタイトルをwordとnotwordの抽出対象にします。 |
ex | int |
1の場合はあらすじをwordとnotwordの抽出対象にします。 |
keyword | int |
1の場合はキーワードをwordとnotwordの抽出対象にします。 |
wname | int |
1の場合は作者名をwordとnotwordの抽出対象にします。 |
上記4項目すべて指定しない場合は全項目抽出対象と扱います。
wordがNコードと判断される文字列の場合、抽出対象はすべて無視され、Nコードから作品を探します。
大ジャンル指定
パラメータ | 値 | 説明 |
---|---|---|
biggenre | int string |
大ジャンルを指定できます。ハイフン(-)記号で区切れば複数大ジャンルを一括抽出できます。
|
https://api.syosetu.com/novelapi/api/?biggenre=2
大ジャンルがファンタジーとなっている作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?biggenre=1-3
大ジャンルが恋愛または文芸となっている作品の作品情報を取得するURLです。
大ジャンル除外指定
パラメータ | 値 | 説明 |
---|---|---|
notbiggenre | int string |
大ジャンルを除外検索できます。ハイフン(-)記号で区切れば含ませたくない大ジャンルを増やせます。
|
https://api.syosetu.com/novelapi/api/?notbiggenre=4
大ジャンルがSFとなっている作品以外の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?notbiggenre=1-2
大ジャンルが恋愛あるいはファンタジーとなっている作品以外の作品情報を取得するURLです。
ジャンル指定
パラメータ | 値 | 説明 |
---|---|---|
genre | string |
ジャンルを指定できます。ハイフン(-)記号で区切れば複数ジャンルを一括抽出できます。
|
https://api.syosetu.com/novelapi/api/?genre=102
ジャンルが現実世界〔恋愛〕となっている作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?genre=201-303
ジャンルがハイファンタジー〔ファンタジー〕または歴史〔文芸〕となっている作品の作品情報を取得するURLです。
ジャンル除外指定
パラメータ | 値 | 説明 |
---|---|---|
notgenre | int string |
ジャンルを除外検索できます。ハイフン(-)記号で区切れば含ませたくないジャンルを増やせます。
|
https://api.syosetu.com/novelapi/api/?notgenre=302
ジャンルがヒューマンドラマ〔文芸〕となっている作品以外の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?notgenre=303-401
ジャンルが歴史〔文芸〕あるいはVRゲーム〔SF〕となっている作品以外の作品情報を取得するURLです。
ユーザID指定
パラメータ | 値 | 説明 |
---|---|---|
userid | int string |
ユーザIDで抽出可能。ハイフン(-)記号で区切ればユーザIDのOR検索ができます。 |
作品に含まれる要素指定
パラメータ | 値 | 説明 |
---|---|---|
isr15 | int |
1を指定した場合、作品に含まれる要素に「R15」が含まれている作品のみを抽出します。 |
isbl | int |
1を指定した場合、作品に含まれる要素に「ボーイズラブ」が含まれている作品のみを抽出します。 |
isgl | int |
1を指定した場合、作品に含まれる要素に「ガールズラブ」が含まれている作品のみを抽出します。 |
iszankoku | int |
1を指定した場合、作品に含まれる要素に「残酷な描写あり」が含まれている作品のみを抽出します。 |
istensei | int |
1を指定した場合、作品に含まれる要素に「異世界転生」が含まれている作品のみを抽出します。 |
istenni | int |
1を指定した場合、作品に含まれる要素に「異世界転移」が含まれている作品のみを抽出します。 |
istt | int |
1を指定した場合、作品に含まれる要素に「異世界転生」または「異世界転移」が含まれている作品のみを抽出します。 |
作品に含まれる要素除外指定
パラメータ | 値 | 説明 |
---|---|---|
notr15 | int |
1を指定した場合、作品に含まれる要素に「R15」が含まれている作品を除外し抽出します。 |
notbl | int |
1を指定した場合、作品に含まれる要素に「ボーイズラブ」が含まれている作品を除外し抽出します。 |
notgl | int |
1を指定した場合、作品に含まれる要素に「ガールズラブ」が含まれている作品を除外し抽出します。 |
notzankoku | int |
1を指定した場合、作品に含まれる要素に「残酷な描写あり」が含まれている作品を除外し抽出します。 |
nottensei | int |
1を指定した場合、作品に含まれる要素に「異世界転生」が含まれている作品を除外し抽出します。 |
nottenni | int |
1を指定した場合、作品に含まれる要素に「異世界転移」が含まれている作品を除外し抽出します。 |
文字数指定
パラメータ | 値 | 説明 |
---|---|---|
minlen | int |
抽出する作品の最小文字数を指定できます。 |
maxlen | int |
抽出する作品の最大文字数を指定できます。 |
length | int string |
抽出する作品の文字数を指定できます。minlenまたはmaxlenと併用はできません。 |
https://api.syosetu.com/novelapi/api/?length=10000
文字数が1万文字ちょうどの作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?length=2000-3000
文字数が2000文字から3000文字の作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?length=10000-
文字数が10000文字以上の作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?length=-15000
文字数が15000文字以下の作品の作品情報を取得するURLです。
会話率指定
パラメータ | 値 | 説明 |
---|---|---|
kaiwaritu | int string |
抽出する作品の会話率を%単位で指定できます。 |
https://api.syosetu.com/novelapi/api/?kaiwaritu=10-50
会話率が10%~50%までの作品を抽出します。
https://api.syosetu.com/novelapi/api/?kaiwaritu=0-50
会話率が0%~50%までの作品つまり50%以下の作品を抽出します。
https://api.syosetu.com/novelapi/api/?kaiwaritu=50-
会話率が50%以上の作品を抽出します。
https://api.syosetu.com/novelapi/api/?kaiwaritu=30
会話率が30%ちょうどの作品を抽出します。
挿絵数指定
パラメータ | 値 | 説明 |
---|---|---|
sasie | int string |
抽出する作品の挿絵の数を指定できます。 |
https://api.syosetu.com/novelapi/api/?sasie=1-
挿絵が1以上存在する作品を抽出します。
https://api.syosetu.com/novelapi/api/?sasie=1-5
挿絵が1つから5つまでの作品を抽出します。
https://api.syosetu.com/novelapi/api/?sasie=3
挿絵が3つの作品を抽出します。
読了時間指定
パラメータ | 値 | 説明 |
---|---|---|
mintime | int |
抽出する作品の最低読了時間を分単位で指定できます。 |
maxtime | int |
抽出する作品の最大読了時間を分単位で指定できます。 |
time | int string |
抽出する作品の読了時間を指定できます。mintimeまたはmaxtimeと併用はできません。 |
https://api.syosetu.com/novelapi/api/?time=10
読了時間が10分ちょうどの作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?time=30-100
読了時間が30分~100分の作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?time=10-
読了時間が10分以上の作品の作品情報を取得するURLです。
https://api.syosetu.com/novelapi/api/?time=-10
読了時間が10分以内の作品の作品情報を取得するURLです。
Nコード指定
パラメータ | 値 | 説明 |
---|---|---|
ncode | string |
Nコードで抽出可能。ハイフン(-)記号で区切ればNコードのOR検索ができます。 |
https://api.syosetu.com/novelapi/api/?ncode=n0001a-n1111b-n9999d
N0001A,N1111B,N9999Dを取得するURLです。
作品タイプ指定
パラメータ | 値 | 説明 |
---|---|---|
type | string |
作品タイプを指定できます。
|
文体指定
パラメータ | 値 | 説明 |
---|---|---|
buntai | int string |
文体を指定できます。ハイフン(-)記号で区切ればOR検索できます。
|
https://api.syosetu.com/novelapi/api/?buntai=4-6
字下げが適切に行われている作品
連載停止中指定
パラメータ | 値 | 説明 |
---|---|---|
stop | int |
連載停止中作品に関する指定ができます。
|
未完結の連載中作品で最終掲載日から63日以上経過しているものをさします。
検索結果に反映されるまで約15分~2時間の遅れがあります。
https://api.syosetu.com/novelapi/api/?stop=1
長期連載停止中を除外するURLです。
最終掲載日指定
パラメータ | 値 | 説明 |
---|---|---|
lastup | string |
最終掲載日general_lastupで抽出できます。以下の文字列を指定できます。
|
https://api.syosetu.com/novelapi/api/?lastup=thisweek
今週新規投稿または次話投稿された作品の一覧です。
https://api.syosetu.com/novelapi/api/?lastup=1262271600-1264949999
2010年1月1日0時0分0秒から2010年1月31日23時59分59秒までに新規投稿または次話投稿された作品を抽出できます。UNIXタイムスタンプで指定しています。
最終更新日指定
パラメータ | 値 | 説明 |
---|---|---|
lastupdate | string |
最終更新日novelupdated_atで抽出できます。以下の文字列を指定できます。
|
https://api.syosetu.com/novelapi/api/?lastupdate=thisweek
今週中に内容が更新された作品の一覧です。
https://api.syosetu.com/novelapi/api/?lastupdate=1262271600-1264949999
2010年1月1日0時0分0秒から2010年1月31日23時59分59秒までに内容が更新された作品を抽出できます。UNIXタイムスタンプで指定しています。
ピックアップ指定
パラメータ | 値 | 説明 |
---|---|---|
ispickup | int |
1を指定した場合、小説ピックアップの対象となっている作品のみを抽出します。 |
出力
APIサーバが出力する文字コードはUTF-8です。デフォルトはYAML形式です。
outパラメータでJSON形式などにも変更できます。(注:atomフィードのみ出力制限あり)
最初の要素には全作品出力数が入り、以降、一作品ずつ情報が入っています。
要素 | 説明 |
---|---|
allcount |
全作品出力数です。 |
title |
作品名 |
ncode |
Nコード |
userid |
作者のユーザID(数値) |
writer |
作者名 |
story |
作品のあらすじ |
biggenre |
大ジャンル
|
genre |
ジャンル
|
gensaku |
現在未使用項目(常に空文字列が返ります) |
keyword |
キーワード |
general_firstup |
初回掲載日 |
general_lastup |
最終掲載日 |
novel_type |
連載の場合は1、短編の場合は2 |
end |
短編作品と完結済作品は0となっています。連載中は1です。 |
general_all_no |
全掲載エピソード数です。短編の場合は1です。 |
length |
作品文字数です。スペースや改行は文字数としてカウントしません。 |
time |
読了時間(分単位)です。読了時間は作品文字数÷500を切り上げした数値です。 |
isstop |
長期連載停止中なら1、それ以外は0です。 |
isr15 |
作品に含まれる要素に「R15」が含まれる場合は1、それ以外は0です。 |
isbl |
作品に含まれる要素に「ボーイズラブ」が含まれる場合は1、それ以外は0です。 |
isgl |
作品に含まれる要素に「ガールズラブ」が含まれる場合は1、それ以外は0です。 |
iszankoku |
作品に含まれる要素に「残酷な描写あり」が含まれる場合は1、それ以外は0です。 |
istensei |
作品に含まれる要素に「異世界転生」が含まれる場合は1、それ以外は0です。 |
istenni |
作品に含まれる要素に「異世界転移」が含まれる場合は1、それ以外は0です。 |
global_point |
総合評価ポイント |
daily_point |
日間ポイント |
weekly_point |
週間ポイント |
monthly_point |
月間ポイント |
quarter_point |
四半期ポイント |
yearly_point |
年間ポイント |
fav_novel_cnt |
ブックマーク数 |
impression_cnt |
感想数 |
review_cnt |
レビュー数 |
all_point |
評価ポイント |
all_hyoka_cnt |
評価者数 |
sasie_cnt |
挿絵の数 |
kaiwaritu | |
novelupdated_at |
作品の更新日時 |
updated_at |
最終更新日時 |
ofパラメータ
出力する項目を個別に指定できます。未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
複数項目を出力する場合はハイフン(-)記号で区切ってください。
-
ttitle
-
nncode
-
uuserid
-
wwriter
-
sstory
-
bgbiggenre
-
ggenre
-
kkeyword
-
gfgeneral_firstup
-
glgeneral_lastup
-
ntnoveltype
※novel_typeではございません -
eend
-
gageneral_all_no
-
llength
-
titime
-
iisstop
-
irisr15
-
iblisbl
-
iglisgl
-
izkiszankoku
-
itsistensei
-
itiistenni
-
gpglobal_point
-
dpdaily_point
-
wpweekly_point
-
mpmonthly_point
-
qpquarter_point
-
ypyearly_point
-
ffav_novel_cnt
-
impimpression_cnt
-
rreview_cnt
-
aall_point
-
ahall_hyoka_cnt
-
sasasie_cnt
-
kakaiwaritu
-
nunovelupdated_at
-
uaupdated_at
https://api.syosetu.com/novelapi/api/?of=t-w&ncode=n0001a
N0001Aのタイトルと作者名を取得するURLです。tとnを指定しています。
https://api.syosetu.com/novelapi/api/?of=ga&ncode=n0001a
N0001Aの全掲載エピソード数を取得するURLです。
オプション項目
optパラメータに以下の文字列を指定するとオプション項目を取得できます。
-
weekly週間ユニークユーザ[項目名:weekly_unique]が追加されます。
週間ユニークユーザは前週の日曜日から土曜日分のユニークの合計です。
毎週火曜日早朝に更新されます。
https://api.syosetu.com/novelapi/api/?opt=weekly
週間ユニークユーザを含めて出力します。
https://api.syosetu.com/novelapi/api/?sasie=1-&opt=weekly
挿絵が1枚以上存在する作品を、週間ユニークユーザを含めて出力します。
out=atomを選択された場合のみ、出力制限があります。
タイトルとURL、あらすじ、最終掲載日、コメントの中に作者ID/作者名のみが出力されています。その他の項目(評価ポイントやキーワードなど)は出力しません。
時刻の注意
なろう小説APIにはさまざまな時刻項目があります。
項目 | 説明 |
---|---|
general_firstup |
初回掲載日です。最初に作品を掲載した日時となっております。原則として初回掲載日が変わることはありません。 |
general_lastup |
作品最終掲載日です。作品を公開した時点で反映されます。 |
novelupdated_at |
作品の更新時刻 |
updated_at |
データ更新時刻 |
利用制限
負荷状況により今後、導入されることがあるためキャッシュの導入など、利用制限を想定したシステム設計をお願いします。ただし、古い情報を誤って掲載しないよう一定期間(長くても2週間)でキャッシュの更新・削除をお願いします。
IPアドレスごとに利用制限を行います。
1日の利用上限は80,000または転送量上限400MByteです。
利用制限は初回アクセスから24時間が適用範囲です。
初回のアクセスから24時間後に回数と転送量を記録していたカウンタと初回アクセス時刻をリセットします。
なお、1日の利用上限を超えた場合、エラーの発生確率が増します。
混雑状況にもよりますが、リクエスト回数または転送量が利用上限の120%を超えるとほとんど接続できなくなります。
備考:利用制限カウンタは厳密ではなく多少のマージンを設けてあります。
転送量は圧縮することで減らせます。
- gzip=5を指定し、gzipファイルで受信する。
デメリットとして受け取り側で解凍する手間は発生するが、かなりの転送量を削減できる。 - YAML形式を使う。一番容量が小さいため。
- ofパラメータを使い、必要な項目のみを出力する。
遅延について
データベースサーバは日本国内の複数拠点に分散されていることがあります。
APIから小説データベースに接続した場合、原則としてスレーブサーバにつながります。
マスタサーバとスレーブサーバ間は10秒以内にデータを同期しています。
しかし、何らかのネットワーク障害が発生した場合、遅延が発生し、サーバによってデータにばらつきが生じることがあります。
また、実際に作品のデータが修正されてからなろうAPIに反映されるまで平均5分程度(最大2時間)の誤差があります。
stopパラメータ、global_point、fav_novel_cnt、review_cnt、all_point、all_hyoka_cnt項目に関してはキャッシュの都合上、さらに15分から2時間の遅れがあります。
allcount出力については作品数計算による負荷削減防止のため、1000作品以上の出力に限り最長で4時間前の結果が表示されることがあります。
サンプルプログラム
サンプルプログラムを用意しております。
おまけ
条件抽出GETパラメータは「小説を読もう!」でも利用することができます。
たとえば、https://yomou.syosetu.com/search.php?genre=101とすればジャンルが異世界〔恋愛〕の作品だけの検索結果が得られます。
ただし、一部で処理方法を変えており、完全な互換性は維持していません。