印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType 過去記事の RSS 再配信を新着記事にするには

過去記事を RSS 2.0 で再配信するときは,guid 要素に配信年を含めるとよい。すると RSS 配信記事として一意となるため,RSS リーダは新着記事として扱ってくれるようになる。

■ ■ ■

このサイトでは,過去記事を RSS 2.0 形式で再配信することを3年前からやっている (nlog(n): 過去記事を RSS 配信するには)。過去記事を含む RSS の読者は多くはないが,これは少なくとも自分自身の役に立っている。過去を1年ごとに振り返ることができるからだ。この記事も,3年前の今日を振り返ったのがきっかけになっている。

さて,3年前は過去記事の RSS で再配信するために,日付を今年の今日にすることで実装していた。しかし,それはあまりよい方法ではない。1つは投稿した日付と配信日付が違ってしまうという問題があるということ。もう1つは RSS リーダへの対応の問題である。当初は Bloglines には有効だったが,途中から新記事として認識しなくなってしまったし,Google Reader は最初から既読記事扱いになっていた。これでは配信している意味がない。

そこで,RSS 2.0 の仕様書 (RSS 2.0 Specification 日本語訳 - futomi's CGI Cafe) をもう一度丁寧に見なおしてみたところ,使えそうな項目を見つけた。「guid要素」である。

guid は、globally unique identifier の略語で、記事を一意に識別する文字列です。guid が存在したら、アグリゲータは、この文字列を再審記事かどうかの判定に使っても構いません。

<guid> : <item> の子要素

これを使えば,投稿日の日付を変更することなく,再配信した記事を新しい記事として RSS リーダに認識させることができる。通常の記事は

<guid isPermaLink="false"><$MTEntryID$>@<$MTBlogURL$></guid>

と書いて (レンダリングすると: <guid isPermaLink="false">1302@http://nlogn.ath.cx/</guid>),過去記事は「今年の年+」を最初につけて

<guid isPermaLink="false"><$MTGetVar name="thisyear"$>+<$MTEntryID$>@<$MTBlogURL$></guid>

などと書く (レンダリングすると: <guid isPermaLink="false">2010+1302@http://nlogn.ath.cx/</guid>)。一意になればいいので,他の書き方でもよい。

RSS 2.0 テンプレートの例 (過去記事配信部分のみ) は以下の通り。MT4.1 以降は MTSetVarBlock で「今年」を thisyear にセットしている。それ以前は,Ogawa::Buzz: MTSetVarBlock Plugin を導入して同じように書くか,MT Extensions: MTTagInvoke 1.0 を導入するかのどちらかになる。

過去記事の選択には MTOnthisDay プラグインを使っている (MT2: bradchoate.com: MTOnThisDay, MT4 以降: Revision 1587: /trunk/OnThisDay)。

<!-- For MT2 -->
<MTTagInvoke tag_name="MTSetVar" name="thisyear">
  <MTTagAttribute name="value"><$MTDate format="%Y"$></MTTagAttribute>
</MTTagInvoke>

<!-- For MT4.1 and later -->
<MTSetVarBlock name="thisyear"><$MTDate format="%Y"$></MTSetVarBlock>

<!-- Common code in MT2 and MT4.1 and later -->
<MTOnThisDay>
  <MTEntries days="1">
    <item>
      <title>過去記事 <$MTEntryDate format="%Y"$>: <$MTEntryTitle remove_html="1" encode_xml="1"$></title>
      <link><$MTEntryLink encode_xml="1"$></link>
      <description><$MTEntryExcerpt remove_html="1" encode_xml="1"$></description>
      <content:encoded><$MTEntryBody encode_xml="1"$><$MTEntryMore encode_xml="1"$></content:encoded>
      <guid isPermaLink="false"><$MTGetVar name="thisyear"$>+<$MTEntryID$>@<$MTBlogURL$></guid>
      <dc:subject><$MTEntryCategory remove_html="1" encode_xml="1"$></dc:subject>
    </item>
  </MTEntries>
</MTOnThisDay>

過去記事は,「過去記事 2005: 記事題名」のような投稿年を含むタイトルになって,guid は「2010+記事番号」のような配信年を含むものになる。

Atom なら,guid 要素の代わりに「atom:id」が使えるだろう (RFC 4287 The Atom Syndication Format 日本語訳)。

Posted by n at 2010-08-07 19:21 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?