作品簡易一覧(PHP)はなろう小説APIを利用して作品のタイトル、あらすじ、URLを表示するシンプルなPHPスクリプトです。
ソースコード(PHP5.6以降で動作)
<?php
// なろう小説APIサンプルプログラム「作品簡易一覧(PHP)」
// APIのオプションパラメータを連想配列で指定
$params["out"] = "json";
$params["lim"] = 100;
$params["gzip"] = 5;
// APIのエンドポイント(URL)を指定
$url = "https://api.syosetu.com/novelapi/api/?" . http_build_query($params, null, "&");
// ユーザエージェントが設定されていないクライアントからのアクセスは403エラーを返す
// そのため、未設定の場合はPHPを名乗る
if(empty(ini_get("user_agent"))){
$options["http"]["header"][] = "User-Agent: PHP";
$context = stream_context_create($options);
}else{
$context = null;
}
// APIを利用してデータを取得
$file = file_get_contents($url, false, $context);
// 取得した圧縮データを解凍
$file = gzdecode($file);
// JSON形式のデータをデコード
$listarray = json_decode($file, true);
echo "▼抽出した作品の一覧<br /><br /><br />" . PHP_EOL;
// 要素0には対象作品の総数が入るので破棄
unset($listarray[0]);
// 作品毎に表示
foreach($listarray as $key => $value){
// タイトルを表示
echo "<b>" . $value["title"] . "</b><br />" . PHP_EOL;
// あらすじを表示
echo nl2br($value["story"]) . "<br />" . PHP_EOL;
// 作品のURLを指定
$novelurl = "https://ncode.syosetu.com/" . strtolower($value["ncode"]) . "/";
// 作品のリンクを表示
echo "<a href=\"" . $novelurl . "\">" . $novelurl . "</a>" . PHP_EOL;
echo "<hr />" . PHP_EOL;
}
?>
説明
タイトルを太字で、あらすじを改行付きで表示するシンプルな作品一覧ページです。
APIのオプションパラメータを編集することで、思い通りの作品一覧を作ることができます。
最大出力数、limは100になっています。lim=50にすると作品一覧を50件出力します。
詳しくはなろう小説APIの仕様をご覧ください。
改変は営利・非営利問わず自由です。自由にご利用ください。
動作環境注意
- 利用するPHP及びサンプルプログラムは内部文字エンコーディングがUTF-8である前提で記述されています。
正常な結果が得られない場合はPHPの設定をご確認ください。 - file_get_contents関数の引数にURLを渡しています。
php.iniの設定でallow_url_fopenが有効になっていることをご確認ください。
一部レンタルサーバなどではセキュリティ上の理由により無効になっている場合があります。 - gzip圧縮された文字列をデコードするためにgzdecode関数を使用しています。
PHPでzlib拡張モジュールが利用できることをご確認ください。
API取得の仕組み
APIのオプションパラメータで出力形式outをjson形式に指定しています。
また、gzipに5を指定しgzip圧縮ファイルとして受け取ることで、転送量を削減しています。
基本的な流れは下記のとおりです。
file_get_contents関数を使用し、APIのURLをオープンし$file変数に代入します。
オプションパラメータでgzipに5が指定されているので、この段階ではgzip圧縮されています。
gzipファイルの解凍にはgzdecode関数を使用し、解凍します。
解凍された文字列は$file変数に上書きされ、json_decode関数で連想配列に変換し、$listarray変数に代入しています。
免責事項
- 個人・法人に限らず自由に使用することができます。
- 自己の責任の上でご利用ください。
- 本プログラムを使用することによって生じるいかなる問題についても、当社はその責務を負いません。
- 本プログラムに関する個別サポートは行っておりません。