Lazuli

らずり

SimplePieでRSS解析してみた

GoogleReader廃止を受けて

廃止宣言がされて、他のRSSアプリケーションを触ってはみたが、なんかあまりしっくりこないというか。
Evernote連携とか共有機能とかそういうのいらない。
どうせだから自分用のRSSアプリを作ってみようと。

それで、RSS解析をするライブラリを探してみたらSimplePieがすごくよかったというお話。
phpでのことです。

RSSを良い感じに解析する

phpRSS解析というと、MagpieRSSというライブラリが有名どころらしい。
Atom、RSS2.0対応。

Magpie RSS - PHP RSS Parser

このように使う。

<?php
require_once 'rss_fetch.inc';

$rss = fetch_rss($url);
foreach ($rss->items as $item) {
  echo $item['title'].PHP_EOL;
  echo $item['link'].PHP_EOL;
}

しかし、$urlがRSSとして無効なアドレスであっても、良い感じのエラー処理が行われない。
例えばGoogleReaderでは登録URLとして、http://b.hatena.ne.jp(はてブ)のトップページのURLを指定すると、自動的にページを解析してホットエントリーのRSSを登録してくれる。これがMagpieRSSではできない。
つまりRSSのURLをベタ打ちしか処理してくれないのだ。

これは困った、と探し出したのがSimplePieというやつ。

SimplePieを使ってみる

SimplePie: Super-fast, easy-to-use, RSS and Atom feed parsing in PHP.

SimplePieはなにより前述のページ解析をしてRSSアドレス抽出ということをしてくれる。
使い方はこんな感じ。

<?php
require_once 'SimplePie.compiled.php';

$rss = new SimplePie();
$rss->set_cache_location('/cache');
$rss->set_cache_duration(1800);
$rss->set_feed_url($url);
$rss->init();

foreach ($rss->get_items() as $item) {
  echo $item->get_title().PHP_EOL;
  echo $item->get_link().PHP_EOL;
}

set_feed_urlメソッドで解析するページを指定して、initメソッドでRSS解析を行う。
$urlにhttp://b.hatena.ne.jpなどを指定してもいい感じに解析をしてくれるから便利。
set_cache_*メソッドはキャッシュの設定を指定する。

$urlは事前にアクセス無効なアドレスかどうかは事前にバリデートしてから使うのがいいと思う。

Enjoy!