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);

?>