PHPでRSSを取得

Kazuya Takato

Kazuya Takato

PHPでRSSを取得したくていろいろ調べていました。

たくさんのサイトで取得方法は載っていたのでmagpierss-0.71.1というパーサーで取得してみました。

//RSSの情報を取得
$rss = @fetch_rss($url);
$title = $rss->channel['title'];
foreach ($rss->items as $item ) {
// itemの中の情報を取得
$title = htmlspecialchars($item['title']);
$description = htmlspecialchars($item['description']);
$url   = htmlspecialchars($item['link']);
$date = htmlspecialchars($item['dc']['date']);
}

って感じに情報を取得して、適当にechoで表示させたりしてたのですが、

更新時間がとれたりとれなかったりする。

それで調べたら、

$date = htmlspecialchars($item['dc']['date']);

これはRSS1.0の形式らしい。

$date = htmlspecialchars($item['pubdate'])

RSS2.0はこんな感じでとれるみたい。 なのでとりあえず両方に対応するために、日付取得部分は下のような感じにしました。 ついでにフォーマットもyyyy/mm/dd hh:ii:ssの形に直して取得してみました。

// 取り合えずRSS1.0の形で取得
$date = htmlspecialchars($item['dc']['date']);
if ($date == null || strcasecmp($date,"") == 0) {
    // とれてなかったらRSS2.0の形で取得。ついでにフォーマット
    $date = htmlspecialchars(Date("Y/m/d H:i:s", strtotime($item['pubdate'])));
} else {
    // とれてたら、フォーマット
    $date = Date('Y/n/j H:i:s',strtotime(substr($date,0,19)));
}

こんなんでとりあえず更新日時が無事取得できました。

もうちょっとスマートにできそうな気がするけど、とりあえず良しとしようかな。

2010年追記
昔のブログ記事を読み返す機会に恵まれたので追記を。
上記のコードはバージョン判定がひどいね。

今なら日付の所は下記のような感じだろうか。

$rss = @fetch_rss($url);
foreach ($rss->items as $item ) {
// $rss->feed_typeにAtomかRSSかの値が入るので判定
if($rss->feed_type == 'Atom' ){
    // Atomの場合の処理
} else if($rss->feed_type == 'RSS'){
    //  $rss->feed_versionでバージョンがとれるので判定
    if($rss->feed_version == '2.0'){
        // RSS2.0の場合の処理
    } else if($rss->feed_version == '1.0'){
        // RSS1.0の場合の処理
    }
}
}

これだけじゃなんなので、magpierssで良く使う設定も書こう。
fetch_rssを呼ぶ前に定数でいろいろ指定すると、設定を変更できる
よく使うのだけメモ

// 出力時の文字コードの指定
define('MAGPIE_OUTPUT_ENCODING', '希望の文字コー');
// キャッシュ機能をつかうか。デフォルトは使う。迷惑にならないよう使うほうがいいからあんま変えない
define("MAGPIE_CACHE_ON",false);
// キャッシュの場所の指定。パーミッションが適切ならフォルダから作ってくれる
define("MAGPIE_CACHE_DIR",'キャッシュを保存するフォルダのパス');
// キャッシュ有効期間 適切に デフォルトは1時間
define('MAGPIE_CACHE_AGE',60*60);

あと、テスト環境でbasic認証をかけてる場合とかは、そのまま使うと取得がエラーになる。
取得につかってるSnoopy.classをnewしてるとこで、認証用のユーザとパスワードを渡せば取得できるようになる。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

Kazuya Takato
Kazuya Takato 取締役 COO 兼 CTO / DX事業本部長 / 高遠 和也

1983年生まれ。SIerとしてのキャリアをスタートし、JavaやC#を中心に多岐にわたる開発プロジェクトにエンジニアとして参加。その経験を活かし、LIGを創業。バックエンドおよびフロントエンドエンジニアとしての深い知識と経験をもとに、多様なプロジェクトに従事。現在は、取締役COO兼CTO、DX事業本部長として、社内の体制やルールの最適化、AI技術の推進など、経営戦略の一翼を担う。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL