yomi-search(cgi 版)のトップページをphpに変更し、html化した更新データをトップページに直接include表示するメモ

yomi-search改造:備忘録。

Yomi-Searchのphp版があるのは分かってるんですけど、ずっと昔から一つのサーチを運営してる身としては今更php版に移行するわけにはゆかんのです。
よって、CGI版のヨミサーチを改造して、トップページのみをphpにして、
でもって、更新をhtmlとして吐き出したものをトップページに直接includeする、という方法をとることにしました。

http://nnr3.dojin.com/ ネット小説ランキング「女性向け恋愛」部門。
恋する女子向けの、ちょっぴりうふふでせくすぃーでいちゃいちゃなえっち小説を検索するサイトです。男子禁制。読みに来てね♪ 宣伝宣伝♪

以下キャプチャ画像。「更新情報」となっている部分が、そのまま別html化したものを読み込んだ部分となります。


そもそもhtmlとして吐き出しているのはカテゴリだけで、新着や更新データはhtml化されてないわけで、本当に困りました。

で、仕方なく、temp.cgiの内容をいじって、新着・更新のときに、html出力用のCGIを読み込ませることにします。

sub go_TASK{
##定期処理


の内部、うちのCGIでは1705行目あたり、


   # 新着処理の場合、RSSフィードを更新する。
   if (($FORM{mode} eq "new") || ($FORM{mode} eq "renew")) {
    # RSSフィードの出力。
require "pl/rss.cgi";  
&OutputRSS;  
require "pl/sintyaku.cgi";  
&Outputrenew; 
   }

ここでrssフィードと更新htmlを吐き出す処理を追加。rssについては説明を省きます。名前はsintyakuですが、内容は更新データのみ吐き出しになります。
use Jcode;
sub Outputrenew {
 my ($Ekt, $Eend, $i, $logf, $subj);
 my ($title, $catlink, $items, $item, $desc, $search_name, $admin_name);
 my (@Slog, @kt, @time);
 my ($sec,$min,$hour,$day,$mon,$year);
 # CGI/HTMLリンク先表示の設定
 if(!$EST{html}) {
  $Ekt="$EST{cgi_path_url}$EST{script}?mode=kt&sort=time_new&kt=";
  $Eend="";
 } else {
  $Ekt="$EST{html_path_url}";
  $Eend=".html";
 }
$items ="";
 # items の整形。新着・更新全サイトを列挙。
 for ($i = 0; $i < 1; $i++) {
   $logf = "renew_ys.cgi";
  # ひとまず、新着のみ読むことにする。
  open(IN,"$EST{log_path}$logf");
  while($line=<IN>) {
   @Slog=split(/<>/,$line);
   # items.

   # item. --------------------------------------------------
   # タイトル。
   $title = $Slog[1];
   $title =~ s/&/&amp;/g;
   $title =~ s/>/&gt;/g;
   $title =~ s/</&lt;/g;
   # 登録カテゴリ。(第一カテゴリの未)
   $catlink= $jump_url;
   # 紹介文。
   $desc = $Slog[6];
   $desc =~ s/&/&amp;/g;
   $desc =~ s/>/&gt;/g;
   $desc =~ s/</&lt;/g;
   $bana = $Slog[12];
   if ($bana <= ""){
    $bana = "http://nnr2.netnovel.org/ys/html/nobana.gif";
   }

   @time=split(/_/,$Slog[11]);
   ($sec,$min,$hour,$day,$mon,$year)=(localtime($time[0]))[0 .. 5];
   $year+=1900;
   ++$mon;
   $logtime=sprintf("$year-%02d-%02dT%02d:%02d:%02d+09:00",$mon,$day,$hour,$min,$sec);
my($out_pt,$out_pt_rui,$in_pt,$in_pt_rui)=split(/_/,$Slog[13]);
$items .=<<"EOM";

<div id="all">
<div id="response">
<a href="$EST{cgi_path_url}search.cgi?mode=search&page=1&sort=id_old&word=$Slog[8]">$Slog[8]&nbsp;様</a>
</div>
<div id="a1">
<a href=$Slog[2] target="_blank">$title</a>
</div>
<div id="photo_keyword">
<div id="photo">
<a href=$Slog[2] target=_blank><img src="$bana" width=200 height=40 alt=$title></a>
</div>
<div id="keyword">
<table cellpadding="0" cellspacing="0">
<tr>
<th>更新日</th>
<td>$Slog[4]</td>
</tr>
<tr>
<th>キーワード</th>
<td><input name=word type=text value="$Slog[15]"></td>
</tr>
<tr>
<th>カウント</th>
<td><input name=word type=text value="IN: $in_pt / $in_pt_rui | OUT:  $out_pt  / $out_pt_rui "></td>
</tr>
</table>

</div>
</div>
<div id="URL">
<div id="comment">
$desc<br>
</div>
</div>
<div id="renew">
</div>
<br />
EOM
  }
  close(IN);
 }
 # RSSファイルを書き込み
 $search_name = $EST{search_name};
 $search_name =~ s/&/&amp;/g;
 $search_name =~ s/>/&gt;/g;
 $search_name =~ s/</&lt;/g;
 $admin_name = $EST{admin_name};
 $admin_name =~ s/&/&amp;/g;
 $admin_name =~ s/>/&gt;/g;
 $admin_name =~ s/</&lt;/g;
 $title = jcode($search_name)->utf8;
 $rights = jcode($admin_name)->utf8;
 ($sec,$min,$hour,$day,$mon,$year)=(localtime(time()))[0 .. 5];
 $year+=1900;
 ++$mon;
 $curtime=sprintf("$year-%02d-%02dT%02d:%02d:%02d+09:00",$mon,$day,$hour,$min,$sec);
 open(OUT,">$EST{html_path}renew.html");
 # 定型ヘッダの出力。
print OUT<<"EOM";
<a name=top></a>
    $items
   

EOM
 close(OUT);
}
1;

吐き出すhtmlはかなりカスタマイズされているので、全然汎用性ありません。と思うので、説明ははぶきます。
とりあえずこれで更新のたびに新しく書き出される静的htmlのrenew.htmlができました。

あとはindex.phpに、

[更新情報] <br />
<?php
    include("./ys/html/renew.html");        // HTMLファイル読み込み
?>

と書き足すだけです。
新しく更新データが発生するか、定期更新の時間になると書き換えられます。たぶん。