link 要素を追加したりアレコレ(何)
2005-01-16
rNote に移行した際に、head 要素が地味に(?)になっていたので、多少賑やかにしたりしました。あと、profile.html (何)がアクセスできないようになっていた辺りも修正しました。
とまぁ色々こまごました事をした関係上、キャッシュの再構築の必要に迫られたというわけでぶっちゃけ修正 age です。(ぉ
続 rNote 用の xml をローカルで閲覧
2005-01-12
前回の ローカルで書いた rNote 用の xml をどうやって閲覧しよう? では、xml ファイルの始めのほうに以下のような記述をすることで、ローカルの xml な日記ファイルを閲覧できるようにしました。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../../xml2html.xsl" type="text/xsl"?>
しかし、xml ファイルの方にスタイルシートの指定があるのはどうも美しくない気がして、違う方法を考えてみました。んで、考えたのが以下の php を間にかませる方式です。
<?php
header("Content-Type: application/xhtml+xml; charset=utf-8");
$xml_file = "file://".$_REQUEST["url"];
$xsl_file = "file://d:/web/noasobi/diary/entries/xml2html.xsl";
$xslt = xslt_create();
$data = xslt_process($xslt, $xml_file, $xsl_file);
xslt_free($xslt);
print($data);
?>
これを、ローカルなサーバ経由で見るようにすれば、xml にスタイルシートを指定する必要は無くなります。しかし、これを編集中のエディタからどうやってブラウザに渡したらいいでしょう?
悩むことしばし。なんかどっかで似たようなことしていたなぁと気がつきました。xyzzy から ローカルの cgi 版の htmllint に渡す lisp があるではありませんか。OKUBO Hiroshi さんとこの、browserex のおまけ(?)の lisp です。以下のように書き換えました。
(defvar *preview-url* "http://127.0.0.1/noasobi/diary/preview.php?url=")
(defun preview-diary ()
(interactive)
(let ((file (get-buffer-file-name)))
(when file
(shell-execute (concat *preview-url* file) t))))
(define-key ed::*html+-mode-map* '(#\C-c #\C-l) 'preview-diary)
preview.phpは、rnote.php と同じ階層にあるので、前回やった css やイメージのパスを変換する必要はなくなったので、変換用の xml2html.xsl もシンプルになりました。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.w3.org/1999/xhtml"
xmlns:rn="http://rinn.e-site.jp/rnote/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml"
encoding="UTF-8"
omit-xml-declaration="no"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
indent="yes"
media-type="application/xml"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style/base.css" type="text/css" />
<link rel="stylesheet" href="style/firefox.css" type="text/css" media="screen,projection" title="Firefox" />
<link rel="alternate stylesheet" href="style/pink.css" type="text/css" title="ピンク" />
<title>朝顔日記 - <xsl:value-of select="child::rn:rNote/child::rn:Title"/></title>
</head>
<body>
<div class="content">
<h1>朝顔日記</h1>
<div class="section">
<h2><xsl:value-of select="child::rn:rNote/child::rn:Title" /></h2>
<p class="date"><xsl:value-of select="child::rn:rNote/child::rn:Date" /></p>
<div class="section">
<xsl:copy-of select="child::rn:rNote/child::x:Text/self::node()" />
</div>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
これで、無事 xyzzy から ローカルな rNote 用の xml が閲覧できるようになりました。なお、これをするには、ローカルで Sablotron が動く必要があります。
ローカルで書いた rNote 用の xml をどうやって閲覧しよう?
2005-01-06
rNote 用に書いた xml もサーバにアップする前になんとなく見ておきたいので、ローカルで手軽に見てみれるといいなというのが、今回の指令(何)。
xml をそのままブラウザで見てもちっとも面白くないので、XSLT を使って html に変換したものを閲覧することにしました。ただ、rNote の仕様上、画像ファイルなどのパスが変わるのでそこらをどうしたものかと困っていたんですが、哀さんに相談したら、画像のパスを変換する技(?)を伝授していただきました。ありがとうございます。>哀さん
うまくいったと思ったら、実は勘違いだったことが判明。とりあえずいったん XSLT は削除して出直します。
書き直しました。今度は大丈夫。多分。:p)
というわけで、以下がその XSLT です。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.w3.org/1999/xhtml"
xmlns:rn="http://rinn.e-site.jp/rnote/"
xmlns="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="rn">
<xsl:output method="xml"
encoding="UTF-8"
omit-xml-declaration="no"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
indent="yes"
media-type="application/xml"/>
<xsl:variable name="localroot" select="'file:///d:/web/noasobi/diary/'"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="{$localroot}style/base.css" type="text/css" />
<link rel="stylesheet" href="{$localroot}style/firefox.css" type="text/css" media="screen,projection" title="Firefox" />
<link rel="alternate stylesheet" href="{$localroot}style/pink.css" type="text/css" title="ピンク" />
<title>朝顔日記 - <xsl:value-of select="child::rn:rNote/child::rn:Title"/></title>
</head>
<body>
<div class="content">
<h1>朝顔日記</h1>
<div class="section">
<h2><xsl:value-of select="child::rn:rNote/child::rn:Title" /></h2>
<p class="date"><xsl:value-of select="child::rn:rNote/child::rn:Date" /></p>
<div class="section">
<xsl:apply-templates select="child::rn:rNote/child::x:Text/child::node()" />
</div>
</div>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="child::rn:rNote/child::x:Text/child::node()[boolean(child::x:img)!=true()]">
<xsl:copy-of select="self::node()"/>
</xsl:template>
<xsl:template match="child::rn:rNote/child::x:Text/child::x:div/child::x:img">
<div class="photo">
<img>
<xsl:attribute name="src">
<xsl:if test="not(contains(attribute::src, ':'))">
<xsl:value-of select="$localroot"/>
</xsl:if>
<xsl:value-of select="attribute::src"/>
</xsl:attribute>
</img>
</div>
</xsl:template>
</xsl:stylesheet>
これを、rNote の 記事ファイルの xml 宣言の次の行あたりに入れておくと、対応したブラウザを使うことでそれなりの表示すすることが出来ました。
ちなみに、私は バッファから送る を使って、xyzzy 上から手軽にブラウザに渡しています。
dc:date に時間を入れたい
2005-01-06
rNote 用の記事をアップロードするタイミングで dc:date に時間が入るようにしたいという、dc:date をどうしたものか をどうにかしてみました。
とりあえず、記事を書き出すときは適当な日付を入れておきます。時間は入れません。入れてもいいんですが、後で書き換わるので無駄です。で、記事をアップロードするときにファイルの中から <Date>
の行を検索して、その時の日付+時間に置換してやることにしました。その置換のためのスクリプトが、以下の date.php です。
<?php
$file = $_SERVER["argv"][1];
$date = "<Date>".date("Y-m-d\TG:i:s")."</Date>";
$lines = file($file);
$fp = fopen($file,"w");
foreach ($lines as $l){
$l = preg_replace("#<Date>.*?</Date>#",$date,$l);
fwrite($fp,$l);
}
fclose($fp);
?>
php -q date.php hoge.xml
といった感じで使います。
しかし、毎度 date.php の引数に該当の xml ファイルを手で渡すとかいう面倒なことはやってられないので、これを行うバッチファイルもスクリプトで生成することにします。というわけで、rNote の記事作成用の何か と、WinSCP は便利 で書いたスクリプトやバッチは以下のものに変わりました。
<?php
// 設定
$entries = "d:\\web\\noasobi\\diary\\entries\\";
$openbat = "d:\\web\\noasobi\\diary\\scp\\open.bat";
$updatebat = "d:\\web\\noasobi\\diary\\scp\\rnote.bat";
$downscr = "d:\\web\\noasobi\\diary\\scp\\scpdown.scr";
$upscr = "d:\\web\\noasobi\\diary\\scp\\scpup.scr";
$datescript = "d:\\web\\noasobi\\diary\\scp\\date.php";
$session = "セッション名";
$adminurl = "http://diary.noasobi.net/rnoteadmin.php";
$editor = "c:\\bin\\xyzzy\\xyzzycli.exe";
// 設定終わり
$year = date("Y");
$month = date("m");
$day = date("d");
$entry = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$dh = @opendir($entries.$year."\\".$month."\\");
if($dh==0){
mkdir($entries.$year."\\".$month."\\");
$dh = opendir($entries.$year."\\".$month."\\");
}
closedir($dh);
for($i=0; $i<25; $i++){
$file = $entries.$year."\\".$month."\\diary_".date("y").date("m").$day.$entry[$i].".xml";
if(!file_exists($file)){
break;
}
}
$fp = fopen($openbat,"w");
fwrite($fp,"$editor $file\n");
fclose($fp);
$fp = fopen($updatebat,"w");
fwrite($fp,"@echo off\n");
fwrite($fp,"php -q $datescript $file\n");
fwrite($fp,"d:\n");
fwrite($fp,"cd $entries$year\n");
fwrite($fp,"winscp3 $session /script=$upscr\n");
fwrite($fp,"start $adminurl\n");
fclose($fp);
?>
日記を書くときに起動する、diary.bat は以下
@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 yamato@noasobi.net /script=d:\web\noasobi\diary\scp\scpdown.scr
php -q d:\web\noasobi\diary\scp\diary.php
call d:\web\noasobi\diary\scp\open.bat
これを起動すると、適当な名前のファイルを xyzzy が開いてくれます。で、日記を書き終わったら、diary.php が生成する、rnote.bat を起動すれば、あとは自動的になんとかなるはずです。多分。:p)
この日記の更新取得用ファイル
2005-01-05
どうも一部のアンテナで日記を更新していなくても順位(何)上がっているようで、なんか心苦しいわけですが、もしかすると、http://diary.noasobi.net/rss.rdf を更新時刻取得に使うといい按配かもしれません。今回の更新時に、トップページのみ更新時間を表示するようにしておくので、もしかするとそこらを狙い撃ち(何)してもいいかもしれません。