小説家になろう(以下「なろう」)に小説をのっけていて、例えば自分のサイトにも本文を載せたいと思っている方いますでしょうか?
一々コピペするのはクソ面倒くさいですよね。PHPを使えば楽になります。
手順を大きく分けると3つです。
1.PHPを使える環境を用意
2.なろうの本文をPHPで取得
3.WordPressで「2.」のPHPを使用
1は省略。レンタルサーバとか借りると大体PHPを実行する環境がついてきます。(最近は無料でPHPを使える環境を提供してくれるサービスもあるようですね)
2についてはphpQueryを使用。
phpQueryのダウンロードページから最新の「phpQuery-…-onefile.zip」をダウンロード。
https://code.google.com/archive/p/phpquery/downloads
サーバ内の好きなフォルダに格納してください。
phpQueryを呼び出す際、絶対パスで指定するため、格納したフォルダのパスを確認します。
PHPでパスを確認したい場合は、phpQueryを格納しているフォルダで下記のようなPHPを実行するとパスが分かります。
<?php echo dirname(__FILE__); ?>
さて、なろうでDOMを実施するためになろうのURL構造を把握しておく必要があります。
連載小説の場合、なろうのURL構造は下記のようになっています。
http://ncode.syosetu.com/Nコード/話数(例えば第一話だと「1」)
Nコードとは作品ごとに振られるユニークなコードです。
例えば拙作『機動生命体』のNコードは「n4254dm」です。
機動生命体、10話のURLは下記のようになります。
http://ncode.syosetu.com/n4254dm/10/
まずはなろうの本文を取得するPHPを作成します。
下記はNコードと話数を指定すると本文を取得してくるファンクションです。
なろうの本文はHTMLの
<div id="novel_honbun"~>
で記述されているので、その部分を抽出します。
<?php
// $ncode=Nコード $numが話数
function shownovel($ncode,$num){
$path= "phpQueryを格納しているフォルダのパス";
set_include_path($path);
//phpQueryを呼び出し
include($path .'/phpQuery-onefile.php');
//なろうのページを取得
$data = file_get_contents('http://ncode.syosetu.com/'.$ncode .'/' .$num);
$html = phpQuery::newDocumentHTML($data);
// 記事取得(HTML内のnovel_honbunの部分を抽出)
$content = $html["#novel_honbun"];
echo $content->html();
}
?>
このPHPをphpQueryを格納しているのと同じフォルダに格納します。
ファイル名は「shownovel.php」としておきましょう。
これでshownovel.phpを呼び出して、Nコードと話数を指定すると小説の本文を取得してきます。
shownovelを呼び出すPHPのサンプルプログラムは下記です。
『機動生命体』のNコード「n4254dm」と呼び出したい話数を指定します。
今回はためしに10話を呼び出します。
<?php
set_include_path("phpQueryとshownovel.phpを格納しているフォルダのパス");
$call_path = get_include_path();
//shownovel.phpを呼び出し。
include($call_path.'/shownovel.php');
//Nコードと話数を指定して本文を取得。
$value = shownovel("n4254dm","10");
?>
結果はこのようになります。
http://shigokiru.com/archives/1056/
HTMLをそのまま取り出しているので、ルビもそのまま出力されます。
ではこれをWordPressで使用してみましょう。
WordPressでPHPを使用するには主にショートコードを使用します。
ショートコードを使用する際はfunctions.phpに記載する方法もありますが、色々と大変なので、Post Snippetsプラグインを使います。
Post Snippets – HTMLやPHPコードを登録してショートコードで呼び出せるWordPressプラグイン
Post Snippetsで変数を使いたい場合は、『Variables』の欄に変数名を記入します。
複数の変数を使いたい場合は「,」で区切ります。
ncode,num
ショートコード内で上記の変数を使いたい場合は{}でくくります。
Post Snippetsで作ったショートコードのサンプルは下記です。
$ncode={ncode};
$num={num};
set_include_path("phpQueryとshownovel.phpを格納しているフォルダのパス");
$call_path = get_include_path();
include($call_path.'/shownovel.php');
$value = shownovel($ncode,$num);
WordPressの記事内でショートコードを呼び出したい時は、記事作成画面で、Post Snippetsのボタンが追加されていますので、
登録したショートコードを呼び出します。
ちなみに、shownovel.phpとショートコードを分けているのは、連載小説などで毎回Nコードを指定するのが面倒だからです。
連載小説を連続して貼り付けていく場合は一々Nコードを記述せず、ショートコードを書き直した方が効率的です。
$ncode="n4254dm";//ここでNコードを固定
$num={num};
set_include_path("phpQueryとshownovel.phpを格納しているフォルダのパス");
$call_path = get_include_path();
include($call_path.'/shownovel.php');
$value = shownovel($ncode,$num);
2016年10月12日時点のなろうの仕様に基づいて作成していますので、今後なろうの仕様改変により動作しない場合があります。