なろう小説ランキングAPI

なろう小説ランキングAPIでは「小説を読もう!で公開しているランキング」を取得できます。取得できるランキングは2013年5月1日以降の日間、週間、月間、四半期ランキングです。
現在、R18ランキングを取得するAPIは提供しておりません。

なろう小説ランキングAPIはHTTPでのリクエストに対してJSON形式、JSONP形式又はYAML形式で応答します。
すべてのランキング結果を抽出できるわけではありません。

APIを使うためにはJavaScriptあるいはPerl/PHP/Ruby/Java/C言語などでプログラミングが必要です。

出力形式

JSON形式、JSONP形式またはYAML形式となっています。
標準はYAML形式となっていますが、outパラメータで変更できます。
文字コードはUTF-8です。

APIのURL

https://api.syosetu.com/rank/rankget/

GETで送信。POSTでは受信できません。
rtypeは必須です。指定しない場合Error: Invalid date.になります。

GETパラメータ

パラメータ 説明
gzip int(1~5)

gzip圧縮してgzipファイルとして返します。
gzip圧縮レベルを1~5で指定できます。
転送量上限を減らすためにも推奨

out string

出力形式をyamlまたはjsonまたはphpを指定。
未指定時はYAMLになる。outパラメータの詳細

rtype string

ランキングタイプです。蓄積されているランキングを取得できます。
ランキングタイプの形式は日付-種類の形式です。20130501-mのように日付と種類の間に-(ハイフン)をはさみます。
日付は20130501のように西暦(4桁)、月(2桁)、日(2桁)で入力します。
種類には日間の場合はd、週間の場合はw、月間の場合はmが、四半期の場合はqが入ります。

  • 2013年5月1日以降の日付を指定してください。
  • 週間を取得する場合、日付は火曜日の日付を指定してください。
  • 月間、四半期を取得する場合、日付は1日を指定してください。
    詳しくは制約についてをご覧ください。

https://api.syosetu.com/rank/rankget/?rtype=20130501-m

2013年5月1日の月間ランキングを取得するURLです。

https://api.syosetu.com/rank/rankget/?rtype=20130502-d

2013年5月2日の日間ランキングを取得するURLです。

https://api.syosetu.com/rank/rankget/?rtype=20140401-q

2014年4月1日の四半期ランキングを取得するURLです。

https://api.syosetu.com/rank/rankget/?rtype=20140408-w

2014年4月8日(火曜日)の週間ランキングを取得するURLです。

https://api.syosetu.com/rank/rankget/?rtype=20140501-w

【×指定できません】
週間は火曜日分以外提供していないため、2014年5月1日(木曜日)を指定するURLはエラーになります。

https://api.syosetu.com/rank/rankget/?rtype=20140402-m

【×指定できません】
月間は毎月1日分以外提供していないため、4月2日を指定するURLはエラーになります。

https://api.syosetu.com/rank/rankget/?rtype=20140403-q

【×指定できません】
四半期は毎月1日分以外提供していないため、4月3日を指定するURLはエラーになります。

outパラメータの詳細

出力形式を指定できます。
jsonまたはyamlまたはphpで指定してください。

  • yaml
    YAML形式(デフォルト)
  • json
    JSON形式
  • php
    PHPのserialize()
  • jsonp
    JSONP形式

JSONPの使い方

JSONPを利用することでJavaScriptから直接、APIを利用できるようになります。

  • callback
    コールバック関数名。コールバック関数名には半角英数字など/^$?[a-zA-Z0-9\[\]\.\_]+$/ (perl) の正規表現に一致する関数名を指定してください。

https://api.syosetu.com/rank/rankget/?out=jsonp&callback=call&rtype=20130501-m

JSONP形式でコールバック関数名をcallにしたい場合のURLです。2013年5月1日の月間ランキングを取得します。

YAML形式の出力に関する動作について

出力形式にYAMLを指定した場合、パラメータを指定する事で利用するライブラリを変更できます。

パラメータ 説明
libtype int

利用するライブラリを指定できます。
未指定もしくは1以下の値を指定した場合、従来通りのライブラリを利用します。
2以上の値を指定すると、新ライブラリを利用します。
新ライブラリでは以下の点が従来のライブラリと異なります。

  • 文字列と数値の型指定が厳格化します。
  • マルチバイト文字や一部の制御文字がエスケープ処理されます。

https://api.syosetu.com/rank/rankget/?rtype=20130501-m&libtype=1

従来通りのライブラリで出力を行ないます。
文字列が格納される部分が数値で構成されている場合でも、数値はダブルクォートで囲まれません。

https://api.syosetu.com/rank/rankget/?rtype=20130501-m&libtype=2

新ライブラリで出力を行ないます。
文字列が格納される部分が数値で構成されている場合、数値がダブルクォートで囲まれます。

出力

APIサーバが出力する文字コードはUTF-8です。デフォルトはYAML形式です。
outパラメータでJSON形式などにも変更できます。

要素 説明
ncode

Nコード

pt

ポイント

rank

順位1~300

Nコードから作品情報の取得

なろう小説APIを利用することでNコードから作品情報を取得できます。

https://api.syosetu.com/novelapi/api/?ncode=n0001a-n1111b-n9999d

N0001A,N1111B,N9999Dを取得するなろう小説APIのURLです。

制約について

このAPIで出力するランキングのデータは2013年5月1日以降の「小説を読もう!で公開しているランキング」を蓄積(バックアップ)したものですが、すべてのランキングの蓄積/提供はサーバリソースの制約上、不可能です。週間は毎週火曜日のみ、月間、四半期は毎月1日のランキングを蓄積しAPIで提供しています。

そのため、週間の場合は火曜日以外の日付を指定するとDATE ERROR[2]が、月間と四半期の場合は1日以外を指定するとDATE ERROR[1]がエラーとして表示されます。

また、「小説を読もう!で公開しているランキング」の日間ランキングは1日3回更新されていますが、このAPIでは午前4時~午前7時に作成した日間ランキングのみを蓄積しAPIで提供しています。
予めご了承願います。

利用制限

利用制限は現在、休止しています。
負荷状況により今後、導入されることがあるためキャッシュの導入など、利用制限を想定したシステム設計をお願いします。ただし、古い情報を誤って掲載しないよう一定期間(長くても2週間)でキャッシュの更新・削除をお願いします。

IPアドレスごとに利用制限を行います。
1日の利用上限は80,000または転送量上限400MByteです。
利用制限は初回アクセスから24時間が適用範囲です。
初回のアクセスから24時間後に回数と転送量を記録していたカウンタと初回アクセス時刻をリセットします。
なお、1日の利用上限を超えた場合、エラーの発生確率が増します。
混雑状況にもよりますが、リクエスト回数または転送量が利用上限の120%を超えるとほとんど接続できなくなります。

備考:利用制限カウンタは厳密ではなく多少のマージンを設けてあります。
転送量は圧縮することで減らせます。

転送量制限の回避方法
  • gzip=5を指定し、gzipファイルで受信する。
    デメリットとして受け取り側で解凍する手間は発生するが、かなりの転送量を削減できる。
  • YAML形式を使う。一番容量が小さいため。

遅延について

データベースサーバは日本国内の複数拠点に分散されていることがあります。
APIから小説データベースに接続した場合、原則としてスレーブサーバにつながります。
マスタサーバとスレーブサーバ間は10秒以内にデータを同期しています。

しかし、何らかのネットワーク障害が発生した場合、遅延が発生し、サーバによってデータにばらつきが生じることがあります。
また、実際にランキングのデータが修正されてからAPIに反映されるまで遅れがあります。