PHPでRSSの形式を判別する方法

一口にRSSといっても、その形式にはRSS1.0、RSS2.0、ATOMの3種類がある。それぞれ構造が異なるため、PHPでRSSを読み取って何か処理をしようとすると、それぞれの構造に合わせて読み取る必要がある。

というわけで、エラー処理は抜きで、判別のために必要な処理だけ関数にまとめてみた。

// $rssは、SimpleXMLElement型
function GetRSSType($rss)
{
    return (empty($rss->channel->item) ? 
               (empty($rss->entry) ? 
                   'rss1' : 
                   'atom' 
               ) : 
               'rss2');
}

この関数はこんな風に使う。

$rss = simplexml_load_file('RSSのURL');
$rssType = GetRSSType($rss);
$items = null;

switch($rssType)
{
    case 'rss1':
        $items = $rss;
        break;
    case 'rss2':
        $items = $rss->channel->item;
        break;
    case 'atom':
        $items = $rss->entry;
        break;
    default:
        break;
}

foreach($items as $item)
{
    $title = $item->title;
    $link = $item->link;
    $description = $item->description;

    echo '記事のタイトル:'.$title.'<br />';
    echo '記事のURL:'.$link.'<br />';
    echo '記事の概要:'.$description.'<br />';
    echo '<br />';
}

コメントする