Another 朝顔日記見出し一覧の作り方
2003-12-25
さっき作ったAnother 朝顔日記見出し一覧の作り方を忘れないうちに書いておきます。
初めは、月ごとの html ファイルを落としてきてそれに xslt かまして、見出し一覧を作れば一発だろうと考えましたが、考えてみたらはてなダイアリーは xhtml ではないので、そのままでは使えないということに気が付きました。のちのち自動生成できるようにしたいので、エディタでちまちま編集するのは避けたかったので、perl を使うことにします。
以下が、私のはてな日記から、日記の見出し行(h2 および h3 )を抽出して多少加工する perl スクリプトです。このサイトの文字コードはメインが Shift_JIS なので、euc なはてな日記 の見出し行を Shift_JIS でするようにしています。名付けて、hatena_midasi.pl
#!/usr/bin/perl
require "jcode.pl";
print
<<__HTML__;
<?xml version="1.0" encoding="Shift_JIS"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>見出し一覧</title>
</head>
<body>
__HTML__
while(<>){
@midasi = /<h[23]><a href=.+/g;
foreach $midasi (@midasi){
&jcode'convert(\$midasi,'sjis');
$midasi =~ s/href=".\//href="http:\/\/d\.hatena\.ne\.jp\/nyama\//g;
$midasi =~ s/■//g;
$midasi =~ s/<a href=[^>]+>編集<\/a>//g;
print "$midasi\n";
}
}
print "</body>\n</html>\n";
例えば、2003年2月の日記のファイルは、200302 というファイルなので、コマンドプロンプトで以下のようにスクリプトを走らせます。
perl hatena_midasi.pl 200302 > 200302.xml
これで、こんな感じの日記の見出し行だけが得られます。
<h2><a href="http://d.hatena.ne.jp/nyama/20030228"><span class="date">2003-02-28</span></a> <span class="title">(fri)</span> </h2>
<h3><a href="http://d.hatena.ne.jp/nyama/20030228#1046413439" name="1046413439"><span class="sanchor"></span></a> [<a href="http://d.hatena.ne.jp/nyama/searchdiary?word=%2a%5b%c6%fc%b5%ad%5d" class="sectioncategory">日記</a>]続・髭剃り <span class="timestamp">15:23</span></h3>
<h3><a href="http://d.hatena.ne.jp/nyama/20030228#1046404750" name="1046404750"><span class="sanchor"></span></a> [<a href="http://d.hatena.ne.jp/nyama/searchdiary?word=%2a%5b%c6%fc%b5%ad%5d" class="sectioncategory">日記</a>]髭剃り <span class="timestamp">12:59</span></h3>
(後略)
これに、midasi.xsl という以下の xslt をかませます。
<?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="html" version="1.0" encoding="Shift_JIS"
indent="yes"
omit-xml-declaration="no"/>
<xsl:template match="/">
<ul>
<xsl:apply-templates select="x:html/x:body/x:h3"/>
</ul>
</xsl:template>
<xsl:template match="x:html/x:body/x:h3">
<li><xsl:value-of select="preceding::x:h2[position()=1]"/> <a href="{child::x:a/@href}"><xsl:value-of select="self::node()"/></a></li>
</xsl:template>
</xsl:stylesheet>
コマンドラインで、以下のようにして実行します。
msxsl 200302 midasi.xsl -o h200302
これにより、こんな感じの見出しのリストが得られます。
<ul xmlns="http://www.w3.org/1999/xhtml">
<li>2003-02-28 (fri) <a href="http://d.hatena.ne.jp/nyama/20030228#1046413439"> [日記]続・髭剃り 15:23</a></li>
<li>2003-02-28 (fri) <a href="http://d.hatena.ne.jp/nyama/20030228#1046404750"> [日記]髭剃り 12:59</a></li>
(後略)
これを各月ごとに行い、得られたリストを、見出し一覧ページで SSI を使ってインクルードして出来上がりです。
ul要素になんかくっついていますが、気にしない方向で。:p)
つか、インクルードしないで、各月の見出しを連結して見出し一覧のページ全体を生成させればいいのか。と今気が付きました。ま、また今度ね。:p)
「Another 朝顔日記見出し一覧の作り方」へコメントをつける
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2003/12/diary_031225b.html