RSS始めました

ブログ系のコンテンツ管理ツールは使っていないのだが、HTMLから力業でRSS(RDF Site Summary)を生成する。

html2rss1.awkというawkスクリプトを作ってみた

#!/usr/local/bin/gawk -f
# html2rss1.awk:
BEGIN  {
  reg_date="[ 0-9]*月[ 0-9]*日";
  y = 2005;
  base_url="http://www.bravotouring.com/~yano/";
  link_url=base_url;
}
END  { print "</rdf:RDF>"; }
/<!--/,/-->/			{
  next
}
$0 ~ reg_date {
  pos = match($0, reg_date);
  str_hiduke = substr($0, pos, RLENGTH);
  pos = match(str_hiduke, /[0-9]*月/);
  m = substr(str_hiduke, pos, RLENGTH-2);
  pos = match(str_hiduke, /[0-9]*日/);
  d = substr(str_hiduke, pos, RLENGTH-2);
  str_date = sprintf("%04d-%02d-%02d", y, m, d);
}
/SubTitle/  {
  pos = match($0, "<SPAN CLASS=\"SubTitle\">.*<BR>");
  str_title = substr($0, pos, RLENGTH);
  gsub(/<[^>]*>/, "", str_title);
  pos = match($0, "<BR>");
  str_desc = substr($0, pos+4);
  gsub(/<[^>]*>/, "", str_desc);
  printf "\t<item rdf:about=\"%s\">\n", base_url;
  printf "\t\t<dc:date>%s</dc:date>\n", str_date;
  printf "\t\t<title>%s %s</title>\n", str_hiduke, str_title;
  printf "\t\t<link>%s</link>\n", link_url;
  printf "\t\t<description>%s</description>\n", str_desc;
  print  "\t</item>";
}

個別記事に直接ジャンプさせる事はできないが、結構イイ感じ。

makerss.cronで毎日生成しなおすように。

#!/bin/sh
#
cd ~yano
TARGET_HTML=public_html/index.html
RSS_HEAD=public_html/info/rss.head
RDF_FILE=public_html/info/rss.rdf
if [ ! -f $RDF_FILE ] || [ $TARGET_HTML -nt $RDF_FILE ];
then
 (cat $RSS_HEAD;\
  nkf -w $TARGET_HTML | awk -f ./bin/html2rss1.awk \
  ) > $RDF_FILE
  chown yano:owner $RDF_FILE
fi