2004年12月04日 (土)

RSS 2.0 の拡張の実際

iBlog 1.4.1b1 の RSS 2.0 を拡張してみよう」で iBlog 1.4.1 から採用された RSS 2.0 で定義されている要素を紹介しました。RSS のテンプレートファイル FeedPage.txt に元々はなかったものも私のブログでは実際に使用しています。このエントリではそれを実際にどのようにしているかを紹介します。

[2004年12月9日 追記あり]


FeedPage.txt

私が実際に使用している FeedPage.txt は次のようになっています。

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
    <channel>
        <title><![CDATA[<$BlogName$>]]></title>
        <link>[_$DocumentRoot$]/index.html</link>
        <description><![CDATA[<$BlogDescription$>]]></description>
        <language>ja</language>
        <$Copyright$>
        <managingEditor><$LinkMade$></managingEditor>
        <$WebMaster$>
        <pubDate>[$DatePublished$]</pubDate>
        <lastBuildDate><$DateBuild$></lastBuildDate>
        <generator>iBlog <$iBlogVersion$></generator>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <image>
            <url><$BlogImageURL$></url>
            <title><![CDATA[<$BlogName$>]]></title>
            <link>[_$DocumentRoot$]</link>
            <width><$BlogImageWidth$></width>
            <height><$BlogImageHeight$></height>
            <description><$BlogImageDesc$></description>
        </image>
<ForEachEntry>
        <item>
            <title><![CDATA[<$EntryTitle$>]]></title>
            <description><![CDATA[<$EntryAbstractOrBody$>]]></description>
            <link>[_$DocumentRoot$]/<$EntryLink$></link>
            <author><$LinkMade$></author>
            <comments>http://www.haloscan.com/comments/<$HaloScanID$>/<$EntryLink$></comments>
            <$EntryEnclosure$>
            <guid>[_$DocumentRoot$]/<$EntryLink$></guid>
            <pubDate><$EntryPostDate$></pubDate>
        </item>
</ForEachEntry>
    </channel>
</rss>

強調してあるところがオリジナルに入っていない要素です。私の場合、iblogPatcher を用いてブログ毎に別な値を用いることができるように変数にしていますが、comments 要素以外は必要というわけではありません。

既に前のエントリで各要素の説明はしてあるので以後は、このテンプレート FeedPage.txt のための iblogPatcher の設定の実例を示します。

MY_REPLACE.plugin の設定

ほとんどがこの設定です。直接 FeedPage.txt に値を埋め込むのではなくブログ定義ファイルに MY_REPLACE.plugin の設定として値を書くことによって、複数のブログについて別々な値を割り当てることができます。

このプラグインのための設定については「続 一行目の HTMLCode」のセクション「設定先の確認」と「設定の追加」に書きました。「設定の追加」に書かれたものに相当する部分を列挙していきます。値はブログ「僕は見ていた」のものです。

<$BlogImageURL$>
{
    # Blog Image URL
    'name'  => '<$BlogImageURL$>',
    'value' => '[_$DocumentRoot$]/image/animation/moke10.gif',
},

これが使用されている image 要素の効果を例示しましょう。RSS リーダによってはこれが入っていると、そのブログのイメージとして使用してくれます。例えば NetNewsWire Lite では、そのブログのプロパティを開くと、このように

設定したイメージが一緒に 表示されます。
<$BlogImageWidth$>
{
    # Blog Image width
    'name'  => '<$BlogImageWidth$>',
    'value' => '47',
},
<$BlogImageHeight$>
{
    # Blog Image height
    'name'  => '<$BlogImageHeight$>',
    'value' => '77',
},
<$BlogImageDesc$>
{
    # Blog Image description
    'name'  => '<$BlogImageDesc$>',
    'value' => 'このブログのマスコットキャラクター',
},
[_$DocumentRoot$]
{
    # ブログのドキュメントルート
    'name'  => '[_$DocumentRoot$]',
    'value' => 'http://homepage.mac.com/yuji_okamura/iblog/iSawIt',
},

この [_$DocumentRoot$] は元々 FeedPage.txt で使用されているもので、公開時に iBlog に設定した値に置き換えられるものですが、これが置き換えられないもケースもありますし、エントリの中でも使いたいので設定しています。

<$HaloScanID$>
{
    # HaloScan ID
    'name'  => '<$HaloScanID$>',
    'value' => 'yujiokamura',
},
<$LinkMade$>
{
    # Mail Address
    'name'  => '<$LinkMade$>',
    'value' => '&#121;&#117;&#106;&#105;&#95;&#111;&#107;&#97;&#109;&#117;&#114;&#97;&#64;&#109;&#97;&#99;&#46;&#99;&#111;&#109;',
},

実体参照が並んでいますが、実体参照を解くと私のメールアドレスになっています。効果はあまりないと思いますが、機械的なメールアドレス収集に対抗するために実体参照にしてみました。

実はこの設定は FeedPage.txt のためにしたものではありません。XHTML の rev 属性値が made の link 要素の href 属性値(そのページを作成した人)のための設定です。(「iblogPatcher 用カスタマイズ済みテンプレート(BlogPage.txt)」を参照)

iblogPatcher を使用していない方は、FeedPage.txt の中の置き換え項目を、'value' => の右側に書いた文字列(にあなたのブログで相当するもの)で手で置き換えて、FeedPage.txt に直に書いてください。

ブログ定義ファイルに書いた順序で列挙してあります。後に設定してある項目は、それ以前に設定した項目の 'value' の中で使用できます。この性質を利用して部分的に同じ文字列を何度も書かなくて済みます。

CHANGE_CONTENT.plugin の設定

FeedPage.txt の中ではエントリページで使用できる <$EntryUUID$> が使用できません。HaloScan によるコメントの場合、これに相当するものが必要なのですが、それがないのです。

そこで <$EntryUUID$> に相当するものが含まれる <$EntryLink$> で一旦済ませんます。もちろんこのままでは変な URL になってしまいます。そこでブログ定義ファイルに次のような設定を入れます

# iBlog 1.4.1b1 以上の FeedPage.txt の comments 要素の中で
# <$EntryUUID$> の代わりに <$EntryLink$> を用いる
push @{$CHANGE_CONTENT::Conf{'FeedPage'}}, {
    'condition' => '¥/C¥d+¥/(E¥d+)¥/index¥.html<¥/comments>',
    'replace'   => '¥/$1<¥/comments>',
    'option'    => 'g',
};

この設定を入れるのは ACTION > preview > after > onStart の中です。「iblogPatcher のブログ定義ファイルテンプレート」で示したものに挿入するとすれば # 連続する <br /> を一つにまとめる の前後辺りに挿入します。

[2004年12月9日 追記]

プチコメユーザの方はトラックバックにある tauranさん の「RSSにプチコメのパスを」を参照してください。


Posted: 04:07    | Comment | Trackback


以下、類似エントリです。