Diary--/*isaji*/MIDI Lab.

<< 2010/09 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>

Serene Bachを2.04Rに 2006-02-10 [permalink] [?B] はてなブックマーク

ついこの前2.03Rにバージョンアップしたばかりのような気がするんですが、sb開発研究所を覗いてみたら2.04Rが公開されていたのでバージョンアップしました。

lib/,doc/の中身とsbTextFormat.pmを差し替えて、いつも修正する./lib/sb/Data/Trackback.pmと./lib/sb/Data/Message.pmを。target属性を削除、それとtrackbackの方はアンカーにrel属性を付加。

今日の更新はバージョンアップに伴う投稿テストです。あとメモ書き。

sbTextFormat.pmって何?

今まで存在すら気付かなかったんですが、今回のバージョンアップで差し替えになっていたので、どんな物だろうと思って試しに使ってみました。

これってアレですね。Wiki記法っぽい記述が可能になるプラグインだったようで。便利と言えば便利なんだけど、普段はマークアップを記述しながら日記書いてるし。p要素を書いておいて行間空けるとp要素が二重になったりするので慣れるまでは混乱しそうだなーと言うことで使用は止めました。

リストマークアップのネストなんかは楽になるだろうけど、それだって今でもやたらネストして面倒な時はwikiで書いておいてソースを修正して持ってきたりやってるし。今のところあまり使うメリットはないかなーと。

コメントのフォーム 微妙に修正

投稿者名の部分は強調した方が見易いかもーと思ってstrong要素で括ってみた。けど、よくよく考えたら名前のない人がいた場合strong要素の中身が空になっちゃうんだよな。あんまり美しくない。どーしよう。

はてブのコメントを表示させてみたくなった

普段はあまりクリップされることもないんだけど、何となくやってみたくなったのでローカルでテスト中。フィードの解釈まで自分でやるのは能力的に無理があるのでMagpie RSSで。dc:subjectが複数あると個別に解釈出来ないような感じなのでタグの表示とそのリンクまでは無理かも。つかボクには出来ません。

Magpie RSS

以前書いたメモ書き、Magpie RSSの覚え書き参照。

  • dc:subject要素の表示は諦めた。表示されるのは日時、ユーザ、コメントのみ。
    • タグが表示出来ません。
  • description要素内はhtmlspecialcharsでHTMLエンティティ変換。
  • 表示件数は"&n=20"みたいな感じで。
  • RSSがない時はエラー表示。
  • はてブの場合、クリップされていなくてもRSSのヘッダーだけは用意されているので、channelのtitleが空だった場合に「このエントリはまだクリップされてないかも。」表示。
    • かなりヘタレっぽいことしてる。$site_title == ""
<?php
require_once 'rss_fetch.inc';
include_once 'rss_utils.inc';
$url = $_GET['u'];
$rss = fetch_rss($url);
$num = $_GET['n'];

if ( $rss and !$rss->ERROR) {

$site_title = $rss->channel['title'];
$site_title = mb_convert_encoding($site_title, "UTF-8", "auto");
$site_link = $rss->channel['link'];

if ($site_title == "") {
    echo "<p>このエントリはまだクリップされてないかも。</p>";
    exit;
}
else {
echo "<h2><a href=\"$site_link\" title=\"$site_title\">$site_title</a></h2>\n";
echo "<ul>\n";
}

$rss->items = array_slice($rss->items, 0, $num);
foreach ($rss->items as $item) {
    $title = $item['title'];
    $url   = $item['link'];
    $date = date('Y-m-d H:i', parse_w3cdtf($item['dc']['date']));
    $desc = $item['description'];
    $desc = htmlspecialchars("$desc");
    $desc = mb_convert_encoding($desc, "UTF-8", "auto");
echo "<li>$date <a href=\"$url\" title=\"$title\">$title</a> $desc</li>\n";

}
echo "</ul>\n";

}

else {
    echo "<p>エラー</p>" . $rss->ERROR;
}

?>

.htaccess

  • 拡張子がhtmlのファイルでもSSI解析させる。
  • 全体で行うと無駄にサーバ資源を消費するので過去ログファイルがあるディレクトリに対してのみ。
AddHandler server-parsed html

自前のサーバならためらいなくやっちゃうんだけど、共用レンタルサーバだからなぁ。あんまりやりたくない。

Serene Bachのテンプレート

  • sequelブロックで個別ページでのみ表示。
  • {permalink}タグを使用しているのでentryブロック内に含める必要有り。
<!-- BEGIN sequel -->
<div class="article">
    <!--#include virtual="../../rss/rss.php?u=http://b.hatena.ne.jp/entry/rss/{permalink}&n=20" -->
</div>
<!-- END sequel -->

まだ自鯖でお試し中

自鯖でテスト中

認証掛けてあるディレクトリだからtitle要素が取得出来なかったみたいだけど、自分でブクマして試したらだいたいこんな感じ。あ、しまった。ブクマを削除しても残滓が残るんだ。

もっとスマートで簡単な方法ってないでしょうか。

web - | comments (0) | trackbacks (0)

Serene Bachをバージョンアップ 2005-12-28 [permalink] [?B] はてなブックマーク

今更ですが、Serene Bachを2.01Rから2.03Rへバージョンアップしました。設置してから一度もバージョンアップをしていなかったので、ちょっと不安でしたが./libと./doc、それから./pluginをごっそり入れ替えることでどうにか移行完了したっぽい。ただ以前も書きましたが、このBlogツールは標準のテンプレートがXHTML 1.0 Transitionalで書かれているせいか、受信したTrackbackのアンカーにtarget属性が付加されているので、それを削除する為にlib/sb/Data/Trackback.pmをちょっと修正。

28行目。

LINK_TARGET (){ '' }

ついでに、Trackback Spam対策のためrel="nofollow"を付加。どのくらい効果があるのか分かりませんが、Googleはrel="nofollow"の付加されたa要素をクロール対象から外すので、検索Trackback等のspamを送信してくる方がそれに気付けば今後送ってこなくなるでしょう。ってちょっと待て。spammerは記事すら見ないで検索トラバを送りつけてくるのにソースなんて見るわけ無いか。まぁいいや。実際に効果があるとして、Google等の検索エンジンにとってはランク付けがTrackback Spamに影響されては困るだろうし、利用者からしても検索時のノイズになるのだから、こんな細かいことでもしておいた方が良いんだろうな。きっと。

62行目をこんなカンジ。

return '<a href="' . $self->url . '"' . $target . ' rel="nofollow">' . $self->subj . '</a>';

つか、今までもrel属性を付けてたから同じようにしたいってだけなんだけど。

さて。
とりあえず全再構築してみて問題なさげ。バージョン表示も2.03Rに変わってるし。

そんなわけで、このエントリはバージョンアップに伴う記事投稿テストです。

web - | comments (0) | trackbacks (0)

Namazuの検索フォームをUTF-8のページに設置 2005-12-17 [permalink] [?B] はてなブックマーク

Namazuは検索文字がShift-JISかEUC-JPでないと文字化けして検索が出来ないので、UTF-8のページには設置出来ない。なので、入力されたUTF-8の文字列をEUC-JPに変換するラッパーみたいなのを書けばいいんじゃないかと思って、適当に書いた時のメモ。

単純に、フォームから入力された文字列をEUC-JPに変換したのちURLエンコードして、namazu.cgiの後ろにくっつけてリダイレクトさせれば良いんじゃないのかと浅はかな考えで書いた。

<?php
$url = 'http://isaji.jp/cgi-bin/namazu.cgi';
$query = $_POST['query'];
$whence = '0';
$lang = 'ja';
$max = '20';

$query = rawurlencode(mb_convert_encoding($query, 'EUC-JP', 'auto'));
header("Location: $url?query=$query&whence=$whence&max=$max&lang=$lang");
exit;
?>

何故かPHPで。これを例えばpost.phpという名前にして、htmlの方に記述するフォーム部分はこんな感じでOK

<form method="post" action="./post.php">
  <p><label>サイト内Namazu検索
    <input type="text" name="query" accesskey="q" tabindex="1" size="20" value="" /></label>
    <input type="submit" name="submit" tabindex="2" accesskey="s" value="検索(s)" />
  </p>
</form>

POSTメソッドでqueryにぶち込んでる感じで。

一応使えてるんだけど、こんなもんで良いのかと不安なので、まだ自宅サーバでのテストしかしてません。

web - | comments (0) | trackbacks (0)

フィードの全文配布は便利‥だけど 2005-12-17 [permalink] [?B] はてなブックマーク

RSSなどでBlogの更新情報を配布するのが当たり前になって久しいですが、Blogを書いていながらもRSSが何なのかわかっていない人もいたり、RSSアグリゲータの認知度もそれほど高くない現状を思うと、まだまだ普及しているとは言い難いんじゃないかと。

私自身、RSSの仕様そのものは詳しくないのですが、Blogツールを利用する以前はRSSをテキストエディタで書いてましたので、Blogを運営している以上はこのくらいは知っておいても損をしないのでは、という程度に解説しておきます。RSS自体をよく知らない人は、自分のBlogが生成しているRSS Feedのソースを一度見てみると良いかもしれません。

RSSは一般的にはRich Site Summaryの略とされ、サイトの概要を記述するxmlだと考えれば分かり易いと思います。Blog等でよく見られるRSS 1.0は、サイトの基本的な情報を記述するchannel要素と、channelのitems要素で記述したURIの具体的な内容を記述するitem要素の2つによって構成されています。Blog的に言うならば、item要素へ各エントリのタイトルやリンク、そして概要が記述されていることになります。

item要素内のtitle要素がページタイトル(エントリのタイトル)、link要素がエントリのURI、description要素は概要文となっています。またDublinCoreモジュールを利用しdc:date要素で更新日時を記述することも可能です。

description要素はあくまで概要文ですので、全文や比較的長い文章をRSSで配布する場合はcontentモジュールを使い、content:encoded要素を利用します。またCDATAセクション内に記述する事によりマークアップをそのまま含める事も可能です。

で、本題のcontentモジュールcontent:encoded要素によるBlogエントリの全文配布。これを採用していないBlogサービスもあるようですが、個人的にはとても便利だと思うのです。私がこれを意識し始めたのは、結構前の事になりますがRSS による全文配布(えむもじら)を読んでからでした。始めはただの真似っ子で自分もcontentモジュールで全文を書くようにしようと、ただそれだけだったのですが、その後オンラインのRSSアグリゲータを利用し幾つものフィードを読んでいるうちに全文配布の便利さに気付きました。

当たり前なんですが、フィードに全文入っていれば、わざわざリンクをクリックしてサイトを閲覧する必要がなくなるんです。またRSSアグリゲータて読む場合は、見栄え的なものも統一されますので妙なデザインのBlogでも気にならず本文だけに集中できます。

また、これは非常に個人的な事ですが、description要素の概要しか記述されていないRSSは、わざわざページを読みに行くのが面倒でそのうち見なくなってしまう、ということもあります。リンクをクリックする事すら面倒に感じるって事ではなく、オンラインのRSSアグリゲータで一つのページに集積された記事を読んでいる最中に概要文のみのエントリがあったとして、後で読もうと思いつつ忘れてしまうってのが正直なところ。

と、ここまでは読者側から見た全文配布の利点ですが、ページ制作者側からすればページを直接見てもらえなくなるので、カウンタが回らない|サイトデザインを無視される|アフィリエイトが云々|PV数が把握できない、等の不満も出てきそうです。しかし、Blogや日記である以上、本文を読んでもらえるのが最も嬉しい事のはずなので、閲覧方法は違えどその選択肢が増えることは決してマイナスにはならない。把握出来ていなくても、潜在的な読者は確実に増えるはずです。

良い事ずくめのようですが実際には全文配布でもあまり便利でない、という状況もあります。content:encoded要素CDATAセクションへマークアップを含めた全文を記述してあっても、span要素などの汎用要素へCSSのclassセレクタで装飾してあるテキストは、RSSアグリゲータで閲覧するとただのプレーンテキストで表示されるという欠点もあります。テキストに過剰な装飾を施している文章は個人的にあまり好きではないのでそれが適用されなくても問題ないのですが、特別な意味のある部分‥たとえば引用部分をdivで括ってCSSで装飾とか、そんな変なマークアップを行っている場合、そこが引用であるという区別が付かず判読性が低下する事にもなります。また、img要素src属性へ記述する画像のURIはフィードの場合、相対パスでは画像が表示されないので絶対パスが望ましいのですが、サーバによっては画像の外部呼び出しを禁じているところもあり、結局は画像表示がされない場合もありえます。

書き手が気をつけていればどうにかなる部分、サーバの都合でどうにも出来ない部分、そういったものがあるので、フィードの全文配布だけで読者の利便性が向上するとまで行かないのかもしれません。

ちょっと話は変わりますが、最近ではオンラインのRSSアグリゲータのサービス‥はてなRSSのようなものも多く存在しますし、他にもMagpieやXML_RSSでフィードを取得して自サーバのページ内に集積して表示させたりするケースもあるかと思います。こんな場合、もしかすると‥‥

「記事が無断転載されてる!酷い!著作権法違反!ついでに無断リンク禁止!」

なんて反応をする方がいないとも限りません。リンク禁止云々はアレですので放置するとして、RSSフィードで配布されている記事の全文をオンラインのアグリゲータで表示する場合、これは転載無断転載になるのでしょうか?転載には違いないけれど、RSSフィードを配布している以上少なくとも無断ではないと解釈したいところですが、やはりRSSを取得して表示する許可が必要なんでしょうかね?RSS自体への理解が薄い層(というかRSSそのものが何かを知らない層)だと、あながち冗談では済まなそうで怖いです。

web - | comments (0) | trackbacks (0)

Magpie RSSの覚え書き 2005-12-05 [permalink] [?B] はてなブックマーク

Magpie RSSを使ってRSSを取得して出力してみる。

  • Magpie RSS - PHP RSS Parser
    • magpierss-0.61.tar.gz以下のバージョンじゃないと取得したRSSが文字化けするみたい。
    • *.incと./extlibを下記サンプルのphpファイルと同じディレクトリに置く。
    • cacheディレクトリをあらかじめ作っておく。初期設定でのキャッシュの生存時間は1時間。rss_cache.incの$MAX_AGEで秒単位で設定…かな?

UTF-8のhtmlへSSIで埋め込むように書いているので、それ以外の場合は適宜修正。

<?php
require_once 'rss_fetch.inc';

$url = $_GET['u'];
$rss = fetch_rss($url);
$num = $_GET['n'];

//呼び出し時のオプション
//u : rssのURI
//n : 件数
//<!--#include virtual="./hoge.php?u=http://isaji.jp/diary/log/index.rdf&amp;n=2" -->
//みたいな感じ。この例では、ここの日記のRSSを取得して2件の概要を表示。

$site_title = $rss->channel['title'];
$site_title = mb_convert_encoding($site_title, "UTF-8", "auto");
$site_link = $rss->channel['link'];
$site_desc = $rss->channel['description'];
$site_desc = mb_convert_encoding($site_desc, "UTF-8", "auto");

echo <<<A
<h4><a href="$site_link" title="$site_title">$site_title</a></h4>\n
<p>$site_desc</p>\n
<dl>\n
A;

$rss->items = array_slice($rss->items, 0, $num);
foreach ($rss->items as $item) {
    $title = $item['title'];
    $title = mb_convert_encoding($title, "UTF-8", "auto");
    $url   = $item['link'];
    $date = $item['dc']['date'];
    $desc = $item['description'];
    $desc = mb_convert_encoding($desc, "UTF-8", "auto");
//contentモジュールで全文表示の場合はこっち。
//  $content = $item['content']['encoded'];
//  $content = mb_convert_encoding($content, "UTF-8", "auto");
echo <<<B
<dt><a href="$url" title="$title">$title</a>($date)</dt>\n
<dd><p>$desc</p></dd>\n
B;
}
echo <<<C
</dl>
C;
?>

自分で使うことしか考えてないからわりと適当。自鯖でしか動作の確認はしてません。参考にする場合は自己責任。もちろん改変転載すべて自由。私自身phpをよく分かってません。

動的に生成されるようなRSSの場合、RSSのURIに&が含まれていたりしますが、そのへんまでは考慮してません。

web - | comments (0) | trackbacks (0)