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;吐き出すhtmlはかなりカスタマイズされているので、全然汎用性ありません。と思うので、説明ははぶきます。
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/&/&/g;
$title =~ s/>/>/g;
$title =~ s/</</g;
# 登録カテゴリ。(第一カテゴリの未)
$catlink= $jump_url;
# 紹介文。
$desc = $Slog[6];
$desc =~ s/&/&/g;
$desc =~ s/>/>/g;
$desc =~ s/</</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] 様</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/&/&/g;
$search_name =~ s/>/>/g;
$search_name =~ s/</</g;
$admin_name = $EST{admin_name};
$admin_name =~ s/&/&/g;
$admin_name =~ s/>/>/g;
$admin_name =~ s/</</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のrenew.htmlができました。
あとはindex.phpに、
[更新情報] <br />
<?php
include("./ys/html/renew.html"); // HTMLファイル読み込み
?>
と書き足すだけです。
新しく更新データが発生するか、定期更新の時間になると書き換えられます。たぶん。