ライブラリの修正
MagpieRSSのrss_parse.incではPHP 5.3以降では非推奨のsplit関数が使用されています。そのままでは実行時にエラーが出るので、rss_parse.incの153行目の以下の箇所を以下のようにexplode関数に書き直します。
list($ns, $el) = split( ':', $element, 2);
list($ns, $el) = explode( ':', $element, 2);
gooランキングからデータを取得する
ジャンル別のトレンドなテーマについてランキングを公開しているgooランキングというサイトがあります。gooランキングでは各ランキング単位でRSSを配信しています。サンプルでは「ドラマに出演していたらつい見てしまう女性有名人ランキング 2009」のランキングを取得します。
gooランキングサイト内では各ランキングのURLの後ろに「rss」をつけるとRSSのURLになります。このランキングのRSSをMagpieRSSで取得します。MagpieRSSでは取得したRSSデータをキャッシュする機能があります。キャッシュの設定時間内であればRSSを直接読みに行かず、キャッシュ内のデータを表示します。gooランキングは1日に1回の更新なので、この機能を利用してRSSより取得したデータを24時間キャッシュしておくようにしておきます。
その他、MagpieRSSで利用できる主な定数は次の表のとおりです。
| ライブラリ名 | 概要 |
| MAGPIE_CACHE_ON | キャッシュを利用するかどうか |
| MAGPIE_CACHE_AGE | キャッシュを有効にする時間(秒) |
| MAGPIE_CACHE_DIR | キャッシュ保存先ディレクトリ |
| MAGPIE_OUTPUT_ENCODING | 出力文字エンコード設定 |
RSSを読み込んで取得したデータをキャッシュしておく部分のコードは以下のようになります。
// キャッシュ有効化
define('MAGPIE_CACHE_ON', 1);
// キャッシュ時間設定
define('MAGPIE_CACHE_AGE', 24 * 60 * 60);
// キャッシュフォルダ
define('MAGPIE_CACHE_DIR', 'cache');
// 文字コード設定
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
// MagpieRSSをロード
require_once('magpierss/rss_fetch.inc');
$url = "http://ranking.goo.ne.jp/ranking/022id/wantsee_womantalent2008/rss/";
$rss = fetch_rss($url);
上記の処理でRSSのデータを取得して24時間キャッシュに保存しておくことができます。キャッシュ保存先ディレクトリ「cache」は書き込み可能の属性にしておく必要があります。MagpieRSSで読み込んだRSSのデータ構造のイメージは以下の図のようになります。

ランキングデータ全体(紫色の枠内)を取得する場合は「$rss->items」で取得できます。各ランキングデータ(橙色の部分)は「$rss->items[index]」で取得できます。
取得したデータをJSONP関数で出力する
JSONでのデータの出力形式は以下のように{}で囲まれた配列が続く形式になります。
{"key1" : "value1","key2" : "value2" ・・・},{}・・・{};
JSONPでは「呼び出し時に実行されるコールバック関数の名前」+JSON形式のデータという書式で記述します。
関数名(JSON関数データ)
サンプルではJSONの配列にRSSで取得したデータのitem要素を格納して出力する方法を実装します。RSSは前項でMagpieRSSを利用して取得しています。item要素は配列で取得できます。このitemの配列をJSONの形式に変換する際にServices_JSONを利用します。Services_JSONのencodeメソッドを利用すると、PHPの配列を簡単にJSON形式に変換できます。

青枠の「key」はJavaScriptからJSON形式のデータにアクセスする際に必要です。紫色の枠内の配列は$rss->itemsで取得できるので、この配列をさらに一階層上の配列に組み込んでServices_JSONでJSON形式のデータに変換します。さらにコールバック関数を指定して以下の形式で出力します。

Services_JSONを利用して取得したRSSのデータをJSONPの形式で出力する部分は以下のようになります。
// RSSを取得
$rss = fetch_rss($url);
$_array = array();
// JSON形式でアクセスする際のキーを指定
$_array['item'] = $rss->items;
// Service JSONをコール
$json = new Services_JSON();
// 配列をJSON形式に変換
$js = $json->encode($_array);
// コールバック関数を指定
echo "jsonpranking({$js})";
コールバック関数に「jsonranking」という関数を指定してJSON形式のデータを出力します。
