色々といじくりました

少し更新中で、色々見苦しい点ありましたが、現状これで一段落です。(気になるところは多少あるので少しずつ直していきます)
目立つ変更点は、まあ見た目ですが、以前からやりたかったコンテンツを追加しました。

小説家になろう との連携です。

前々から、思ってたのですが、「なろう」はブログをはじめ、SNS等との連携が悪すぎます。
例をあげると……って、あー、めんど。つまり言いたい事はなろうの更新情報をブログで通知するには一々手動で記事を書かなきゃいけないって事です。めんどくせぇ、めんどくせぇ……やってられないかったるい。
色々しらべると「なろう」はAtomフィードをサポートしてるのでRSSフィードで更新情報が通知できるようだったのでブログのウィジェットに表示してみました。当たり前ですが、これだと更新情報だけがずらずら出てくるので、連載小説とかやってると同じ小説のタイトルだけ延々と表示されるわけです。なんかやだよね。
っていうか、気づいたらこのブログに小説一覧が表示しているページが一切ない事に気づく。やべぇ。
でも、手動で一覧は作りたくない、作りたくない、めんどくさい、一回手動で作ったら、更新する度にリスト直さないといけないじゃん……
なんかお手軽プログラムとかないかなぁー、と思ったら、なかった。
でもなろうデベロッパー見てたらなんかPHPで作れそうな気がしてきた。

「なろうデベロッパー」

なろうデベロッパーでは、なろうから情報をとれる「なろう小説API(webapi)」を提供している。
つってもこのAPI、たいした機能はない。致命的なのが本文を取得する事ができない点だ。小説周辺のメタ情報しか拾ってこれない。
まあ、一覧作るくらいだったら別にいいかぁ、と思ってPHP組んだ。PHPはシンタックスが独特で構文チェック大変なんだけど、まあ、今は便利なツールが色々あるからね。

というわけで、なろうの小説一覧を表示するPHP作った。

一番最初のコメント行見ながらパラメータ変えれば誰の小説一覧でも作れます。

<?php
header('Content-Type: text/html; charset=UTF-8');

//------------------------ここに注目------------------------
//APIのURL
//lim=***の数値を変えると最大表示件数が変えられます。
//userid=***に作者のユーザID(半角数字6桁)を入力すると作者の作品一覧が表示されます。
$url='http://api.syosetu.com/novelapi/api/?out=json&lim=20&gzip=5&userid=521903';

//APIを取得
$file = file_get_contents($url);

//解凍する
$file=gzdecode($file);

//JSONデコード
$listarray=json_decode($file,true);

//展開する
foreach($listarray as $key=>$value){

    //要素0はcontinueで飛ばす
    if($key==0){continue;}

    //小説のURLを代入
    $novelurl='http://ncode.syosetu.com/'.strtolower($value['ncode']).'/';

    //タイトルの表示
    print '<big><b><a href="'.$novelurl.'">'.$value['title']."</a></big></b><br>";

    //URL表示リンク print '<a href="'.$novelurl.'">'.$novelurl.'</a>';

    //ジャンル表示Func_genre_strでジャンル(数値)を文字列に変換
    print "ジャンル:".Func_genre_str($value['genre'])."<br>";

    //最終更新日の表示
    print '<small>'."最終更新日:".$value['general_lastup']."<br>";

    //文字数の表示
    print "文字数:".$value['length']."字<br>";
    
    //読了時間(目安)の表示
    print "読了時間:".$value['time']."分(目安)</small><br><br>";

    //あらすじの表示
    print "あらすじ:<br>";
    print '<font size=1>'.nl2br($value['story'])."<br></font>";

    print '<hr>';

}

//ファンクション
//ジャンル(数値)を文字列に変換
function Func_genre_str($genre_str){
    $genre1=$genre_str;
    
    if($genre1==101){
        $genre_re = "異世界〔恋愛〕";
    } 
    if($genre1==102){
        $genre_re = "現実世界〔恋愛〕";
    }
    if($genre1==201){
        $genre_re = "ハイファンタジー〔ファンタジー〕";
    }
    if($genre1==202){
        $genre_re = "ローファンタジー〔ファンタジー〕";
    }
    if($genre1==301){
        $genre_re = "純文学〔文芸〕";
    }
    if($genre1==302){
        $genre_re = "ヒューマンドラマ〔文芸〕";
    }
    if($genre1==303){
        $genre_re = "歴史〔文芸〕";
    }
    if($genre1==304){
        $genre_re = "推理〔文芸〕";
    }
    if($genre1==305){
        $genre_re = "ホラー〔文芸〕";
    }
    if($genre1==306){
        $genre_re = "アクション〔文芸〕";
    }
    if($genre1==307){
        $genre_re = "コメディー〔文芸〕";
    }
    if($genre1==401){
        $genre_re = "VRゲーム〔SF〕";
    }
    if($genre1==402){
        $genre_re = "宇宙〔SF〕";
    }
    if($genre1==403){
        $genre_re = "空想科学〔SF〕";
    }
    if($genre1==404){
        $genre_re = "パニック〔SF〕";
    }
    if($genre1==9901){
        $genre_re = "童話〔その他〕";
    }
    if($genre1==9902){
        $genre_re = "詩〔その他〕";
    }
    if($genre1==9903){
        $genre_re = "エッセイ〔その他〕";
    }
    if($genre1==9904){
        $genre_re = "リプレイ〔その他〕";
    }
    if($genre1==9801){
        $genre_re = "ノンジャンル〔ノンジャンル〕";
    }
    if($genre1==9999){
        $genre_re = "その他〔その他〕";
    }
    return $genre_re;
}

?>

んで、上記のコードを実装して作ったページがこちら。
「作品一覧」

これで小説の一覧が自動更新されるようになったね、めでたしめでたし。

“色々といじくりました” への2件のフィードバック

  1. おつかれさまです。
    正直ソース見ただけで謎の目眩がしたわ……よく組み込めたなあ。
    しかしこれで小説更新が逐一わかるようになってよかった。

    1. 電気ウナギは蒲焼きの夢を見るか? さん

      コメントありがとうございます。
      名前が戻りましたね。前の方がコピペしやすくてありがたかったのですが。

      基本は公式のサンプルプログラムからの改変です。コードの半分以上は取得したジャンルコードを文字列(SFとかファンタジー)に変換してるだけで大したことはしてません。
      それよりPHPをあつかうためにはwebサーバが必要なわけで、なろう投稿者でwebサーバ持ってる人がどれだけいるのだろうかと考えるとソースを公開した意味もあんまりないのかなぁ、とか思ったりします。

コメントを残す

メールアドレスが公開されることはありません。

Protected with IP Blacklist CloudIP Blacklist Cloud