RSSを視野に入れる?
もし、RSSを公開しようと考えているのであれば、更新履歴はタイトルとリンク、内容をHTMLに記述するようにすると良いかもしれません。
RSS1.0のitemには、title、link、descriptionを記述します。これにあわせてHTMLを作成することでRSSの生成を簡単なスクリプトで行うことができます。
当サイトでは、タイトルとリンクをdt要素で、内容をdd要素に記述するよう変更しました。
私が使用しているPHPのスクリプトを紹介します。PHPとSmartyを使用してRSSファイルを出力しています。
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://【アドレス】/【RSSファイル】">
<title>【タイトル】</title>
<link>http://【アドレス】/</link>
<description>【Channelの説明】</description>
<items>
<rdf:Seq>
{$ITEMS_SEQ}
</rdf:Seq>
</items>
</channel>
{foreach item=ITEM from=$ITEMS}
<item rdf:about="{$HOST}{$ITEM.link}">
<title>{$ITEM.title}</title>
<link>{$HOST}{$ITEM.link}</link>
<description>{$ITEM.desc}</description>
</item>
{/foreach}
</rdf:RDF>
<?php
require_once('ExSmarty.class.php');
//----------- 初期設定 ---------------
$file_name = "../index.rdf"; //出力ファイル名
$title_element = "dt"; //更新タイトルとリンクの要素
$desc_element = "dd"; //更新内容の要素
$lines = file('../index.shtml'); //抽出元ファイル
$host = 'http://【アドレス】/'; //ホストアドレス
//テンプレートオブジェクトのインスタンス化
$objTpl = new B3Tpl(); //Smartyの派生クラス
//---------- 更新履歴の抽出 ----------
foreach($lines as $line){
//タイトルとリンクにマッチ
if(ereg("<${title_element}.*>.*<a href=\"(.*)\">(.*)</a>",$line,$history)){
$items_seq .= " <rdf:li rdf:resource=\"$host$history[1]\"/>\n";
$items[++$idx]['link'] = $history[1];
$items[$idx]['title'] = $history[2];
$nIsItem = 1;
}else if(ereg("<${desc_element}.*>(.*)</${desc_element}>",$line,$desc) and $nIsItem == 1){
//内容を1要素分だけ取得(dd要素の子に要素が含まれる場合、replace処理が必要かな。)
$items[$idx]['desc'] = $desc[1];
$nIsItem = 0;
}
}
$objTpl->assign('ITEMS_SEQ',$items_seq);
$objTpl->assign('HOST',$host);
$objTpl->assign('ITEMS',$items);
//UTF-8へ変換
$output = mb_convert_encoding($objTpl->fetch("index.tpl"),"UTF-8");
//ファイル出力
$file = fopen($file_name, "a") or die("OPEN ERR $file_name");
flock($file, LOCK_EX);
fputs($file, $output);
flock($file, LOCK_UN);
fclose($file);
?>