一頃は、対応した UA には application/xhtml+xml で送出していたこの日記ですが、最近は text/html で送出していました。というのは、リンク元やトラックバック、ツッコミの内容などの URI に & が含まれていたりすると xml パースエラーでページが表示出来ない場合があったからです。rnote.php をサラッと見た限りではどこをいじればいいのかわからなかったので、text/html にしていたわけなんですが、ちょっと気合を入れてみてみることにしました。んで、改造しところのメモ。
rnote.php のバージョンは、0.9.7.5 です。オリジナルの436行目付近の autolink 関数のあたり。
function autolink($url){
$url = preg_replace(LINK_REP_STR,"<a href=\"\\1\\2\">\\1\\2</a>",$url);
$url = preg_replace("/&([^(amp)])/","&\\1",$url);
return $url;
}
これで、ツッコミやトラックバック回りは大丈夫ぽいですが、これだけではリンク元がうまく行きません。1201行目付近を以下のように。
while($tagstr=SkinTagChk('Ref_Data',$a,$opt)){
$rep='';
if(($bRefExist)&&(isset($opt['fmt']))) $rep=WriteBack_Ref($ref_data,$opt['fmt']);
$a=str_replace($tagstr,$rep,$a);
$a = preg_replace("/&([^(amp)])/","&\\1",$a);
}
これで、多分大丈夫な気がするけど、自信がないのでリンク元の表示は止めました。:p)
ちなみに、application/xhtml+xml で送出する方法は rNote で application/xhtml+xml に書いたとおりです。
あと、この件とは関係ないですが、オリジナルの155行目を以下のようにしています。
if(preg_match('/^(http|ftp|mailto|#|\/)/s',$tmp[1])){ // exclude
オリジナルだといわゆるページ内リンクができないようだったので。
どうもうまくいっていなかったので、考え直しました。
もじら組 wiki 検索プラグインを作ってみた
2006-01-05
もじら組 Wiki のサイト内検索をするための Firefox 用の検索プラグインを作ってみました。
JavaScript が効かない環境の方は、zip のアーカイブをダウンロードして、解凍したものをsearchplugin ディレクトリへ配置してください。
アイコンが手抜きなので、誰か何とかしてください。:p)
memo.php 用の RSS を生成する何か
2005-01-30
URL をメモる何か は、タブ区切りのテキストでログを保存しているわけですが、このログから RSS 生成する PHP スクリプト、memo_rss.php も作ったのでこれも公開しておきます。
次のお楽しみ(何)のためには、なにはともあれ RSS を出しておかないことには話にならないので。(謎)
ところで、設定部分が、memo.php とダブるので別ファイルにしてインクルードしておいたほうがよかったかな。まぁ次はそうしよう。
<?php
header("Content-Type: application/xml; charset=utf-8");
// 設定
$log = "./memo.log"; // 保存するログ
$TZD = "+09:00"; // タイムゾーン
$memo_title = "URI メモのサンプル"; // html のタイトル
$rss_discription = "簡単な説明つきで URI をメモする何かのサンプルの RSS";
// RSS の説明
$lines = file($log);
?>
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:rss="http://purl.org/rss/1.0/"
xml:lang="ja">
<channel rdf:about="<?php print($rss); ?>">
<title><?php print($memo_title); ?></title>
<link><?php print($script); ?></link>
<description><?php print($rss_discription); ?></description>
<dc:date><?php print date("Y-m-d\TH:i:s", filemtime($log)).$TZD;?></dc:date>
<items>
<rdf:Seq>
<?php
foreach($lines as $line) {
$line = rtrim($line);
$items = explode("\t", $line);
print("<rdf:li rdf:resource=\"".$items['1']."\"/>");
}
?>
</rdf:Seq>
</items>
</channel>
<?php
foreach($lines as $line) {
$line = rtrim($line);
$items = explode("\t", $line);
$categories = explode(" ", $items['4']);
print("<item rdf:about=\"".$items['1']."\">\n");
print("<title>".$items['0']."</title>\n");
print("<link>".$items['1']."</link>\n");
print("<dc:date>".$items['3']."</dc:date>\n");
foreach($categories as $category){
print("<dc:subject>".$category."</dc:subject>\n");
}
print("<description>".$items['2']."</description>\n</item>\n");
}
?>
</rdf:RDF>
メモのほうの仕様変更に伴い tag を dc:sbuject を列記する形で出力するように追加
ともさんが、RssMemo をパクった や、RssMemo あれこれ にて面白そうなことを始めて、実際にさわらせてもらったりしたらうらやましくなったので、自分でも URI を説明つきで簡単にメモできるスクリプトを作ってみた。以下、memo.php です。
<?php
// 設定
$log = "./memo.log"; // 保存するログ
$pass = "hoge"; // 投稿用パスワード
$items_num ="100"; // メモの保存件数
$script = "http://hogehoge/memo/memo.php"; // メモの uri
$TZD = "+09:00"; // タイムゾーン
$memo_title = "URI メモ"; // html のタイトル
$lines = file($log);
if ($_POST['write'] && $_POST['link'] && $_POST['title'] && $_POST['pass']== $pass ) {
$title = htmlspecialchars($_POST['title']);
$link = strip_tags($_POST['link']);
$description = strip_tags($_POST['description']);
$description = str_replace("\r\n", "<br />", $description);
$description = str_replace("\r", "<br />", $description);
$description = str_replace("\n", "<br />", $description);
$time = date("Y-m-d\TH:i:s").$TZD;
$data = "$title\t$link\t$description\t$time\n";
array_unshift($lines, $data);
}
if ($_GET['title']){
$title = mb_convert_encoding($_GET['title'],"utf-8","auto");
}
if ($_GET['link']){
$link = $_GET['link'];
}
if ($_GET['description']){
$description = mb_convert_encoding($_GET['description'],"utf-8","auto");
}
?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" href="main.css" type="text/css" media="screen,projection" />
<title><?php print($memo_title); ?></title>
</head>
<body>
<h1><?php print($memo_title); ?></h1>
<ul>
<li><a href="#form">投稿フォーム</a></li>
<li><a href="memo_rss.php"><img src="../img/rss.png" alt="RSS" /></a></li>
</ul>
<h2>メモ</h2>
<dl>
<?php
foreach($lines as $line) {
$line = rtrim($line);
$items = explode("\t", $line);
print("<dt><a href=\"{$items[1]}\">{$items[0]}</a> <span>{$items[3]}</span></dt>\n");
print("<dd>{$items[2]}</dd>\n");
}
$fp = fopen($log, 'w');
flock($fp,2);
$i = 0;
foreach($lines as $line) {
$i++;
if($i <= $items_num){
fputs($fp, $line);
}
}
flock($fp,3);
fclose($fp);
?>
</dl>
<h2 id="form">メモ投稿フォーム</h2>
<form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>">
<p><label for="title">Title</label> : <input type="text" name="title" id="title" size="80" value="<?php print($title); ?>"/></p>
<p><label for="link">Link</label> : <input type="text" name="link" id="link" size="80" value="<?php print($link); ?>" /></p>
<p><label for="description">説明</label> : <br />
<textarea name="description" cols="60" rows="4" id="description"><?php print($description); ?></textarea></p>
<p><label for="user">User</label> : <input type="text" name="useer" id="user" size="20" value="" /></p>
<p><label for="pass">Password</label> : <input type="password" name="pass" id="pass" /></p>
<p><input type="submit" name="write" value="送信" /></p>
</form>
<p><a href="javascript:if%20(navigator.appName.indexOf('Internet%20Explorer')%20!=%20-1)%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=encodeURIComponent(document.selection.createRange().text);%20}%20else%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=document.getSelection();%20}%20if%20(sL%20!=%20'')%20{%20uri%20=%20'<?php print($script); ?>?title='%20+%20sT%20+%20'&link='%20+%20sL%20+%20'&description='%20+%20sD;%20location.href%20=%20uri;%20}">投稿用ブックマークレット</a></p>
</body>
</html>
ログを保存するファイルには、パーミッション、666 など書き込み可にしておく必要があります。
とりあえず誰でも投稿できるサンプルも設置して置きます。適当にいじってみてください。最新20件のみ保存します。私が実際に使っているのは、URI メモ です。
なお投稿用のブックマークレットは、RssMemo より拝借しました。メモしたいページで適当な部分を範囲選択してブックマークレットを起動すると、ページタイトル、URI、選択範囲をコピーしてメモ投稿フォームに貼り付けてくれます。便利なものありがとうございます。> Kyo Nagashima さん
この memo.php のライセンスは Creative Commons Attribution Non-Commercial です。
バグ、ハケーンしたので微修正。スマソ
この記事へのツッコミ
1: jac (2005-12-28T02:12:19+09:00) こんにちは!いつも勉強させて頂いてます。いきなり質問なんですが,誰でも投稿できるサンプルの方はlogへの書き込みが新しいものが頭にきてますよね?上記のURLメモも同じようにするには,どうしたらいいでしょうか?
2: のり (2005-12-28T11:06:38+09:00) jac さん、こんにちは。 上記のスクリプトでも新しいメモが上に来るようになっているはずなんですが、なりませんかね? いずれにしろ、上のものを改良した Watson さんのスクリプトの方がいいかもしれません。私も現在はそっちを改造したものを使っています。:p)http://scrlab.g-7.ne.jp/diary/200502.php#D06
3: jac (2006-01-06T17:37:19+09:00) なりました。ありがとうございました。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050130a.html
先日注文していた 約束はできない が昨日届いた。向井千恵さん率いる、Che-SHIZU というバンドの CD です。音源は84年に出されたアナログ音源が元らしい。84年といえば今から20年位前のことでその頃は私も似たようなアングラな演奏をしていた頃です。聴いてみるといやぁ懐かしいですな。当時はそうは思わなかったのですが今聴いてみると、結構自分がやっていたものに似たところがあるなと思いました。当時似たようなことをやっていたバンドは同じく似たようなものだったのかもしれませんが。一応曲目を書いておこうかな。
I'm dancing in my heart ~ 祭歌
連舞
君が目
火の海
月と明り窓
約束はできない
黒い瞳の
カチューシャ
プレパダ
輪舞
三度目は武装して美しく無関心
英雄
星
くせがあるので万人にオススメというわけではないですが、オススメです。