Commentsブログなどを運営している方はRSSで更新情報を配信しているかと思います。逆に色々な情報サイトからRSSを受け取り、まとめサイトを作っている方もいるでしょう。RSSをマークアップするプログラムを書くのは中々に大変です。今回は比較的プログラミングが容易なPHPで、SimpleXMLという関数を使い書いていきます。PHPはHTMLに埋め込む感じでコンテンツを作成できます。C言語を扱った人なら、勉強せずとも習得できる程度に簡単です。PHP自体は、ユーザーの呼び出しを受けるとサーバー側で実行されます。ユーザーに送信します。大量のリクエストを受けると、サーバーへの負荷が心配されますが、秒間数百アクセス程度では問題ないと思います。(ただし、SQLなどのDB処理をすると負荷は増加します)さて、これ以降が本題。これより下は、多少PHPを扱える人向けの内容となります。処理はXMLの処理とほぼ変わりません。いうか、RSS自体がXMLですし。PHPにはSimpleXMLというモジュールがPHP5より標準化されています。SimpleXML関数はその名の通り、XMLをとてもシンプルに処理できます。RSSの前に簡単なXMLを処理してみましょう。今回処理するサンプルXMLを用意しましょう。sample.xml[xml]ソフトバンク株式会社http://www.softbank.co.jp/楽天株式会社http://www.rakuten.co.jp/info/[/xml]あくまでサンプルですが、こんな感じで用意してみました。SimpleXMLを使いグワーッっと書くとこんな感じです。<p>特に難しい処理はしていません。変数$xmlに処理したい文書のパスを代入。simplexml_load_file()関数で、$xmlに代入した文書を読み込みます。この関数の返り値は<strong>XML文書のrootオブジェクト</strong>となります。<strong>実際にはrootオブジェクトは存在せず、それぞれのXMLの階層をオブジェクトとしてみた場合、最初のtestという属性が入る</strong>というだけです。僕自身、あまり使わない関数ですが、今回のような場合は使えます。foreach()は配列など、中にあるオブジェクトの数だけループを繰り返します。この関数を使う目的としては、以下のような利点があるからです。<p>通常の配列の場合、foreach()を使わなくても、for()やwhile()でループを回せます。<strong>要素数(要素名)が名前である連想型配列を考えてみましょう</strong>。条件として「中のオブジェクト全てを処理する」かつ「配列の要素数は変動する」とします。すると指定した回数のループでは全て処理できない可能性がでてきます。そんなときに使えるのがforeach()です。<strong>foreach()は指定したオブジェクト内のすべてのデータの分ループを回します</strong>。foreach()を使うことで、連想型配列などの配列も何も考えずに処理することができます。$company)」と記述しましょう。<p>「$test->company」は階層を意味します。今回のxmlファイルをリストで書くと、以下のようになります。<p>大雑把に書くとこんな感じ。testというオブジェクトがあり、その中にcompanyが存在します。companyの中にはnameとurlという2つのオブジェクトがあるのが分かると思います。<p>んで、「$test->company」の話。これは、「testの下のcompany」という意味になります。表すことができますね。<p>さて、ソースコードから一部抜粋。この部分で気になる所があると思います。<p>そう、<strong>ループ内では、nameやurlが$companyからしか記述されていません。これは、foreach()では$test->companyを$companyとして扱うためです。$companyでループを回すと<strong>$testからではなく、$companyからの階層でOK</strong>になります。<p>convert()は、ユーザー定義関数です。いう関数があるのが分かると思います。このconvert()関数では、返り値として文字コードを変換した文字列を返します。この場合ではmb_convert_encoding()というのが実質の本体ですね。“Encode_to”)です。今回のXMLファイルの文字エンコーディングが、Shif-JISなので、適当な形式に変換するためautoとしています。<strong>これを記述しなかったり、文字エンコーディングを間違えたりすると、文字化けの原因になります</strong>ので注意して下さい。<p>そうやって出力したものを、<ul>と<li>を使いリストにして表示します。<p>ひと通りの流れはこんな感じです。target="_blank">こちら</a>。<p>XMLの処理はSimpleXMLを使えばとても簡単で、こんな感じですぐ実装できてしまいます。<p>さて、本題のRSS。適当にRSSをどこからか拾ってきましょうか。target="_blank">ギズモード</a>さんから借りてきました。<p>あと、コーディング規約とかガン無視で書きました。target="_blank">こちら</a>。基本的な表示の表示とリンクのみです。<li>タグのみしか使っていないので、あまり綺麗ではありません。<p>こんな感じで楽にRSSの取得からマークアップまで出来ました。<p>今回はSimpleXMLを使用した単純なXML処理を行いました。見つけた関数で、面白かったので紹介してみました。何か面白そうなものがあれば紹介したいと思います。