Posted at

RSS1.0でdc:dateを取得する

More than 5 years have passed since last update.

    $rss = simplexml_load_file("RSS1.0のURL");

$array = array();
foreach ($rss->item as $item) {
$array[] = array('title'=>$item -> title,'url' => $item -> link,'date' => strtotime($item -> pubDate));
}

最初こんな感じで、RSSのデータを取得しようとしていたのですが、

dateの値がとれませんでした。

ソースを確認してみると日付が入っているのは、

pubDateはなく、dc:dateでした。

タグがわかったところで、dc:dateの値をとろうと、

とりあえずvar_dumpしてみたのですが、なぜかdc:dateの値がとれません。

調べてみると、「:」は名前空間を意味しているため、

「:」が含まれていると値の取得ができないそうです。


childrenメソッドを呼ぶ

これを解決するには、

childrenメソッドの引数に下記URLを指定します。

http://purl.org/dc/elements/1.1/

具体的なソースはこんな感じです。

    $rss = simplexml_load_file("RSS1.0のURL");

$array = array();
foreach ($rss->item as $item) {
$dc = $item->children('http://purl.org/dc/elements/1.1/');
$array[] = array('title'=>$item -> title,'url' => $item -> link, 'date'=> strtotime($dc->date));
}

タイムスタンプの形で取得しないなら、

strtotime()を使用せずに、

'date'=> $dc->date

で、大丈夫です。