📃

【Movable Type】記事一覧をRSSフィードとして出力する

に公開

概要

記事の一覧をRSSフィードとして出力するコードです。RSSのバージョンは2.0。
以下のRSSフィードを出力します。

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>RSSフィードのタイトル</title>
    <description>RSSフィードの説明文</description>
    <link>RSSフィードを配信するサイトのURL</link>
    <item>
      <title>タイトル</title>
      <description>概要</description>
      <link>URL</link>
      <guid>URL</guid>
      <content:encoded>本文</content:encoded>
      <pubDate>日付</pubDate>
    </item>
    <item>
      <title>タイトル</title>
      <description>概要</description>
      <link>URL</link>
      <guid>URL</guid>
      <content:encoded>本文</content:encoded>
      <pubDate>日付</pubDate>
    </item>
    .
    .
    .
  </channel>
</rss>

上記の出力について、MTでの値は以下を出力しています。

  • channel
    • RSSフィードのタイトル:サイト名
    • RSSフィードの説明文:サイトのRSSフィードである旨
    • RSSフィードを配信するサイトのURL:サイトURL
  • item
    • タイトル:記事タイトル(ウェブページ・コンテンツタイプのタイトル該当フィールド / 以下同)
    • 概要:記事概要(記事本文から抜き出し)
    • URL:記事パーマリンク
    • 本文:記事本文
    • 日付:記事公開日付(書式はRFC822フォーマット)

概要のみの配信でよければ、本文(content:encoded)は不要です。

コード

item内のcontent:encoded内で出力するタグにencode_xml="1"モディファイア、pubDate内で出力するタグにformat_name="rfc822"モディファイアをそれぞれ付与します。
タイトルや概要にHTMLタグが含まれる場合は、remove_htmlを利用します。概要の抜き出しはtrim_toを利用します。
詳細は以下公式リファレンスを参照ください。

MTEntriesで出力する

<mt:Entries lastn="10">
  <mt:EntriesHeader>
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
      <channel>
        <title><$mt:WebsiteName$></title>
        <description><$mt:WebsiteName$>のRSSフィード</description>
        <link><$mt:WebsiteURL$></link>
  </mt:EntriesHeader>
        <item>
          <title><$mt:EntryTitle remove_html="1"$></title>
          <description><$mt:EntryBody remove_html="1" trim_to="100+..."$></description>
          <link><$mt:EntryPermalink$></link>
          <guid><$mt:EntryPermalink$></guid>
          <content:encoded><$mt:EntryBody encode_xml="1"$></content:encoded>
          <pubDate><$mt:EntryDate format_name="rfc822"$></pubDate>
        </item>
  <mt:EntriesFooter>
      </channel>
    </rss>
  </mt:EntriesFooter>
</mt:Entries>

MTPagesで出力する

<mt:Pages lastn="10">
  <mt:PagesHeader>
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
      <channel>
        <title><$mt:WebsiteName$></title>
        <description><$mt:WebsiteName$>のRSSフィード</description>
        <link><$mt:WebsiteURL$></link>
  </mt:PagesHeader>
        <item>
          <title><$mt:PageTitle remove_html="1"$></title>
          <description><$mt:PageBody remove_html="1" trim_to="100+..."$></description>
          <link><$mt:PagePermalink$></link>
          <guid><$mt:PagePermalink$></guid>
          <content:encoded><$mt:PageBody encode_xml="1"$></content:encoded>
          <pubDate><$mt:PageDate format_name="rfc822"$></pubDate>
        </item>
  <mt:PagesFooter>
      </channel>
    </rss>
  </mt:PagesFooter>
</mt:Pages>

MTContentsで出力する

下記コンテンツタイプの設定を行っている想定の出力です。

  • コンテンツタイプ名:新着情報
  • コンテンツフィールド
    • タイトル(テキスト)
    • 概要(埋め込みテキスト)
<mt:Contents content_type="新着情報" limit="10">
  <mt:ContentsHeader>
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
      <channel>
        <title><$mt:WebsiteName$></title>
        <description><$mt:WebsiteName$>のRSSフィード</description>
        <link><$mt:WebsiteURL$></link>
  </mt:ContentsHeader>
        <item>
          <title><mt:ContentField content_field="タイトル"><$mt:ContentFieldValue remove_html="1"$></mt:ContentField></title>
          <description><mt:ContentField content_field="概要"><$mt:ContentFieldValue remove_html="1" trim_to="100+..."$></mt:ContentField></description>
          <link><$mt:ContentPermalink$></link>
          <guid><$mt:ContentPermalink$></guid>
          <content:encoded><mt:ContentField content_field="概要" encode_xml="1"><$mt:ContentFieldValue$></mt:ContentField></content:encoded>
          <pubDate><$mt:ContentDate format_name="rfc822"$></pubDate>
        </item>
  <mt:ContentsFooter>
      </channel>
    </rss>
  </mt:ContentsFooter>
</mt:Contents>

上記それぞれのコードはXMLファイル出力時にMTタグ記述部分が空行で出力されるので、気になる場合はcompress-modifierプラグインを利用するなどして空行を削除してください。

以上です。

Discussion