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

過去記事を RSS 配信することを考える。過去記事の投稿年を現在の年に書き換えることで実装する。

■ ■ ■

気に入ったブログは,RSS リーダーで読むのが便利である。更新した記事だけが読めるからである。したがって,過去に投稿した記事を読むことはできない。

私自身が他のブログを読む姿勢を冷静に観察してみると,「これは面白そうだ」と思ったブログは RSS リーダーに登録して購読するようになる。さらにもっとファンになったブログは,過去ログを読むことがある。しかし,過去ログ全部を読むことはない。1日では全部読めないし,どこまで読んだかをブックマークしておくほどマメではないからだ。

過去記事が RSS 配信できれば,途中から読み始めてくれた人もすべての記事を読めるのではないか。このアイデアの実装を考える。これなら,1年すればマメでない人もすべての記事を読むことができる。そんな奇特な人がいるかどうか,実際にニーズがあるかどうかは分からないのだが…。

環境は Movable Type 2.661 + 日本語パッチである。使用するプラグインは,MT Extensions: MTTagInvoke 1.0Six Apart ProNet - Plugin Directory - OnThisDay である。過去記事を RSS 配信するポイントは,過去記事の「年」を「今年」に書き換えることである。

RSS フィードには,RSS 1.0, RSS 2.0, Atom 1.0 などの形式がある。ここでは RSS 2.0 のテンプレートを例として使う。RSS 1.0 や Atom 1.0 も同様の方法で作ることができる。

以下の前半は RSS 2.0 のデフォルトテンプレートの MTEntries 部分である (2.6x Default Templates)。前後は省略してある。後半もほとんど同じだが,強調部分が違っている。前半で最近の記事15本を,後半で過去記事を,出力するようになっている。拙作の Onclick 属性削除プラグインで記事中のリンクにある onclick 属性を削っている。

<MTEntries lastn="15">
  <item>
    <title><$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><MTCRemoveOnclick><$MTEntryBody encode_xml="1"$><$MTEntryMore encode_xml="1"$></MTCRemoveOnclick></content:encoded>
    <guid isPermaLink="false"><$MTEntryID$>@<$MTBlogURL$></guid>
    <dc:subject><$MTEntryCategory remove_html="1" encode_xml="1"$></dc:subject>
    <dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></dc:date>
  </item>
</MTEntries>

<MTTagInvoke tag_name="MTSetVar" name="thisyear">
  <MTTagAttribute name="value"><MTEntries lastn="1"><$MTEntryDate format="%Y"$></MTEntries></MTTagAttribute>
</MTTagInvoke>

<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><MTCRemoveOnclick><$MTEntryBody encode_xml="1"$><$MTEntryMore encode_xml="1"$></MTCRemoveOnclick></content:encoded>
      <guid isPermaLink="false"><$MTEntryID$>@<$MTBlogURL$></guid>
      <dc:subject><$MTEntryCategory remove_html="1" encode_xml="1"$></dc:subject>
      <dc:date><$MTGetVar name="thisyear"$><$MTEntryDate format="-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></dc:date>
    </item>
  </MTEntries>
</MTOnThisDay>

最初の MTTagInvoke で,最新の記事の年を取得し,値を thisyear という変数に代入している。これを過去記事の年の部分に置くのである。正確に言えば「今年」ではなく「最新記事の投稿年」が使われることになる。

記事のタイトルには,これが最新の記事ではないことが分かるように,「過去記事 2006:」などの正しい投稿年をつけている。

MTOnThisDay で,去年の今日や一昨年の今日の記事を取り出している。そして,その記事の投稿日部分 dc:date の年を,先ほどの thisyear 変数の値で置き換えている。つまり,投稿年だけウソをついていることになる。

過去記事は,再構築した日と「月日」が同じものだけが配信されることになる。したがって,再構築は毎日した方がよい。自動的に1日に一度再構築するには,Linux なら cron で行う方法がある (nlog(n): cron でインデックスを再構築)。

若干心配なのは,RSS リーダーとしては Bloglines でしか動作確認をしていないということである。

このサイトでは MTTagInvoke を他にも使っていて,nlog(n): MTTagInvoke を MTBlogTimes に使うnlog(n): 月別アーカイブへのリンクをもっと nDialy 風に などがある。MTOnThisDay はトップページで使っている (nlog(n): おかげさまで1周年 - 去年の今日を表示する)。

2010年8月7日追記:
日付を誤魔化さないで新着記事にする方法が分かりました (nlog(n): 過去記事の RSS 再配信を新着記事にするには)。

Posted by n at 2007-08-07 23:55 | Edit | Comments (0) | Trackback(0)
Trackbacks

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


(必須, 表示されます)


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


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


Confirmation Code (必須)


Remember info (R)?