【PHP】RSSの日時データ「pubDate」と「dc:date」を取得・表示するときの注意点。

Ads by Google

個人的な備忘録を兼ねて。
PHPでRSSファイルを読み込み、任意の書式に整形して表示させるという処理をするとき、日時データの扱い方が「pubDate」の場合と「dc:date」の場合とで異なるため、意識してコードを書かないとエラーを起こす原因になります。

参考までに幾つかのRSSをの書式を調査してみると、[RSS 2.0]の場合では日時の情報は以下のように書かれています。

<pubDate>Wed, 15 Oct 2014 22:00:59 +0000</pubDate>

対して[RSS 1.0]では以下のように。

<dc:date>2014-10-15T18:12:00+09:00</dc:date>

[RSS 2.0]のときは「pubDate」が。[RSS 1.0]のときは「dc:date」が使われています。

さて。
これらRSSの情報をPHPで取得するとき、具体的には[simplexml_load_file()]関数を使いますが、このとき、読み込むファイルの形式が[RSS 1.0]の場合、日付データの[dc:date]など、「dc:」が書かれている情報は、特殊な処理を施してあげないと正確に取得・表示することができません。

例えば[RSS 2.0]の日付データ「pubDate」を読み込むときは以下のコードで充分です。

$date = date("Y年 n月 j日", strtotime($item->pubDate));

しかし[RSS 1.0]の日付データ「dc:date」を読み込む場合は、以下のように記述する必要があります。

$date = date('Y年 m月 d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date));

これは、XMLでは「:」は名前空間(namespace)を意味していて、PHPの[simplexml_load_file()]関数のでは取得できない仕様になっているためです。

[simplexml_load_file()]関数で、ある名前空間に属する要素を取得するには、その名前空間を定義しているURLを引数として渡し、「childrenメソッド」を呼ぶ必要があります。
[RSS 1.0]では「dc」の名前空間は「xmlns:dc="http://purl.org/dc/elements/1.1/"」
と定義されているので、これを引数として指定します。

以下、過去記事「【PHP】外部サイトのRSS情報を取得して表示させる方法」も参考にしてみてください。

【PHP】外部サイトのRSS情報を取得して表示させる方法

こちらの記事もいかがですか?

アナタにオススメ!
同じカテゴリーの他の記事です。

Ads by Google

Leave a Replyコメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です