RSS と見出し一覧の生成
2004-04-06
手作業で、この日記の RSS やら 見出し一覧やらを作るのはダルいので、またなんとかコンピタにやってもらうことにします。
以前は、神崎さんとこで配布されている perl スクリプト を改造して RSS を生成していたのですが、見出しアンカーをやめたために、このスクリプトを改造するのはかなり大変なので、xslt を使って生成することにしました。捏造した xslt は以下のとおり。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns="http://purl.org/rss/1.0/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:x="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="x" >
<xsl:output method="xml" version="1.0" encoding="utf-8"
media-type="application/xhtml+xml"
indent="yes"
omit-xml-declaration="no"/>
<xsl:template match="/">
<xsl:processing-instruction name="xml-stylesheet">type="text/xsl" href="rss2html.xsl"</xsl:processing-instruction>
<xsl:call-template name="channel"/>
</xsl:template>
<xsl:template name="channel">
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xml:lang="ja">
<channel rdf:about="http://diary.noasobi.net/rss.rdf">
<title>朝顔日記</title>
<link>http://diary.noasobi.net/</link>
<description>のりの日々のあれこれを綴った朝顔日記の最近の記事の一覧</description>
<image rdf:resource="http://diary.noasobi.net/img/asagao-p.png"/>
<xsl:call-template name="items"/>
</channel>
<xsl:call-template name="item"/>
</rdf:RDF>
</xsl:template>
<xsl:template name="items">
<items>
<rdf:Seq>
<xsl:for-each select="x:html/x:body/x:div/x:div/x:div/x:p[attribute::class='topic-info']/x:a">
<rdf:li rdf:resource="{.}"/>
</xsl:for-each>
</rdf:Seq>
</items>
</xsl:template>
<xsl:template name="item">
<xsl:for-each select="x:html/x:body/x:div/x:div/x:div[attribute::class='section']">
<item rdf:about="{x:p[attribute::class='topic-info']/x:a}">
<title><xsl:value-of select="x:h3"/></title>
<link><xsl:value-of select="x:p[attribute::class='topic-info']/x:a"/></link>
<description><xsl:value-of select="x:p"/></description>
</item>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
xslt プロセッサは msxslで、msxsl -xe latest.html html2rss.xsl > rss.rdf
のようにしてコマンドプロンプトで使用します。
見出し一覧の生成も、前は自作しょぼしょぼ perl スクリプトで作っていたのですが、これも見出しアンカーでなくなったので使えず、xslt で生成するようにしました。以下、月別のまとめファイルに適用する heading.xsl です。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:x="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="x" >
<xsl:output method="xml" version="1.0" encoding="Shift_JIS"
media-type="html"
indent="yes"
omit-xml-declaration="yes"/>
<xsl:template match="/">
<ul>
<xsl:apply-templates select="x:html/x:body/x:div/x:div/x:div[attribute::class='section']"/>
</ul>
</xsl:template>
<xsl:template match="x:html/x:body/x:div/x:div/x:div[attribute::class='section']">
<li class="{x:h3/@class}"><xsl:value-of select="preceding::x:h2[position()=1]"/><a href="{x:p[attribute::class='topic-info']/x:a/@href}"><xsl:value-of select="x:h3"/></a></li>
</xsl:template>
</xsl:stylesheet>
これで、これまでのややこしシステム(何)の復活です。しかし、日記書き用の xyzzy の 定型句挿入 lisp を書き換えなくては、やっぱり面倒でやっていられない。ここが一番苦手です。xslt も苦手なんですが。:p)
「RSS と見出し一覧の生成」へコメントをつける
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2004/04/diary_040406a.html