MB-Support

パソコン初心者のサポートページ

RSSを配信してみることに
        ・・・管理人編


>> 管理人の独り言 サイトのお知らせ

かなり出遅れてしまいましたが MB-Support でも RSS(Rich Site Summary)を発行する事になりました。 過去にテストや別カテゴリーで発行した事はありましたが、いずれも主導権はアプリケーションにあり、管理人である私が管理できなことにやきもきしていました。

特に RSS の発行を強く望んだわけではありませんが、今後サイトに追加される全てのページは 日記 を通す仕様になり、この部分をデータベース化するので、自由にデータを抽出して並べ替えて表示できるようになりました。 ならば「ついでだから RSS も作っちゃえ」って感じで発行しています。



個人的に気に入っているのは、ブログでは無いけど RSS を使うところです。 RSS は XML をベースにしているので、一度テンプレートを作成してしまえばメモ帳で簡単に書き換えられます。 最初は手書きによる書き換えを試しましたが、面倒で続きませんでした。

次に簡単に作成できるフリーソフトを使ってみましたが、簡単とは言え毎日更新されるデータを手動で書き換えるのに違いはありません。 この方法も公開するまでもなく却下となりました。 そして「簡単に」を望むのは間違えで、自動で更新してくれるツールが必要な事に気がつきました。 そこで サーバーサイドスクリプトの PHP が手っ取り早いと・・・

裏サイトで掲示板に RSS を付けた所からやる気になったのですが、掲示板の場合は投稿しない限り掲示板に顔を出す必要がなくなります。 これはアクセス数を求める管理人にとってはマイナスですが、掲示板の使いやすさは向上します。 このページみたいな普通のサイトでは、全ての内容を RSS に詰め込むのではなく、タイトル、URL、簡単なページの情報だけを記入して、続きは実際のページに誘導します。

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
 <title>サイトのタイトル</title>
 <link>サイトのURL</link>
 <description>サイトの内容</description>
 <language>言語</language>
 <generator>作成者</generator>
 <copyright>サイトの著作権</copyright>
 <category>サイトの種類</category>
 <docs>チャンネルが使用するRSSフォーマットの記述</docs>
---------------1つのアイテム---------------------
 <item>
  <title>アイテムのタイトル</title>
 <link>アイテムのURL</link>
  <description>
   <![CDATA[
    アイテムの説明
  ]]>
 </description>
  <comments>コメントをする場合のURL</comments>
  <pubDate>日付け</pubDate>
 </item>
---------------1つのアイテム終了---------------------
</channel>
</rss>

上は実際にこのサイトで発行している RSS のテンプレートですが、これが正しいわけではありません。 ただ、これで何とかなっています。他にもオプションは沢山ありますが、RSS 0.91 よりも、RSS 2.0 の方が記述が少なくて済みます。 実際に PHP で MySQL からデータを抽出する部分は「-1つのアイテム-」から「-1つのアイテム終了-」の部分です。 この部分はデータベースに登録した日付の新しいデータを Limit で 10〜15 くらいを指定して、繰り返し処理の while を使って表示します。

注意する点は文字コードと URL です。このサイトは Shift_JIS で書かれていますが、 RSS は UTF-8 が一般的です。 日本語が関わる部分は変換する必要がありますが、PHP の mb_convert_encoding を使えば可能です。 例えば各アイテムのタイトル(このサイトでは日記や新着ページのタイトルになります)を mysql_fetch_array で取り出して、変数 $title に格納したとします。 これを UTF-8 に変換して出力するには、下の様になります。

print (" <title>" .mb_convert_encoding( "$title", "UTF-8" ). "</title>\n");

次に上のタイトルのリンクとなる URL ですが、PHP で GET を複数使ったページにリンクしたい場合、htmlspecialchars を使います。 例えば、リンクURLを変数 $linkurl に格納した場合。

$linkurl = htmlspecialchars ($linkurl);
print (" <link>" .$linkurl. "</link>\n");


次に <description></description> の処理ですが、これにはアイテムの内容や説明を記述しますが(もちろん UTF-8 で)、RSS 0.91 と RSS 2.0 ではオプションになるようです。 右のスクリーンショットは Mozilla Firefox のライブブッマーク を表示させた状態ですが、簡易 RSSリーダー では「タイトル」と「URL」さえあれば成立するみたいです。まぁ〜普通はそうですよね?

新着順で並べ替えるのは MySQL に問い合わせる時に「order by 日付が格納されたカラム desc」で指定して、新しい順にサーバー側が並べ替えるので、リーダーが関係するとは思えません(実際は知らないですよ)。

RSS としての役割は上の表示で十分なのですが、別でインストールする RSSリーダー では、<description></description>も表示してくれます。 肝心の格納するデータなのですが、データ自体は何でも構いませんが、マークアップ言語である XML ベースのため、記号などが入力されているとエラーが発生します。 これを変換するのも良いのですが面倒です。とすると、データを入力する段階で RSS を意識する事になりますが、これも面倒です。

そこで登場するのが「<![CDATA[  --データ--  ]]>」です。 本来の使い方は違うような気もしますが、CDATA セクションで囲めば「 ]]> 」以外の記号は使い放題になる優れものです(対応していないリーダーもありますが・・・)。

<description></description> 内にCDATAセクションを用いて、その中に抽出したデータを格納すれば楽です。 実際にレンタルブログではエキサイトがCDATAセクションを使ってます。

WEBサイト 概要 入力画面

このサイトの 日記 の場合は、月ごとに表示されます。 当然、日記の内容を全て表示させるとかなりの容量になってしまうので、長い日記になる場合は「続きを読む・・・」と表示して別ページにリンクさせています。

PHP で全てを処理している場合は、アイテム 1 とアイテム 2 に分けて、月やカテゴリごとのページではアイテム 1 を表示させ、アイテム 2 があるデータだけ専用のページを GET で渡し ( 判断基準は例えばアイテム 2 が NULL か否か)、そのページでアイテム 1 とアイテム 2 を吐き出すのが一般的です ( アイテム 2 を吐き出すか否かは isset で $_GET[ページに渡す英数字] が TRUE の時など)。

このようなデータベースを設計しているならば、CDATA セクションで抽出するデータはアイテム 1 になります。 もし全てのデータを 1 つのカラムに格納しているのであれば、そのまま CDATA セクションで抽出しても問題ありませんが、mb_substr 関数を使い、指定文字数だけ抽出する事も可能です。まぁ〜この辺は個人の判断に任せます。

RSS リーダー

<comments></comments> には、コメント可能な URL を入力します。 RSS 2.0 はオプションで、RSS 0.91 にはありません。 ブログでは各投稿にコメントする事ができますが、普通のホームページではありません。 タイトルにリンクされる URL <link></link> と同じURLで良いでしょう(削除してもいいかも)。

こんな感じで RSS を出力させていますが、かなり適当である事を分かっていただけたでしょう。 これらはホームページを管理する人たちの話で、知らなくても良い話です。 明日は実際に RSS を取り込む方法を紹介します。





>> 管理人の独り言 サイトのお知らせ

Copyright © 2019 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人のご挨拶プライバシーポリシー著作権/免責事項