SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

RSS、XMLをAjax+JSONPで表示するブログパーツを作成

目的に応じて適材適所で使うPHPライブラリ(6)


ライブラリの修正

 MagpieRSSのrss_parse.incではPHP 5.3以降では非推奨のsplit関数が使用されています。そのままでは実行時にエラーが出るので、rss_parse.incの153行目の以下の箇所を以下のようにexplode関数に書き直します。

[リスト3]rss_parse.incの153行目(修正前)
list($ns, $el) = split( ':', $element, 2);
[リスト4]rss_parse.incの153行目(修正後)
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で利用できる主な定数は次の表のとおりです。

MagpieRSSで利用できる主な定数
ライブラリ名 概要
MAGPIE_CACHE_ON キャッシュを利用するかどうか
MAGPIE_CACHE_AGE キャッシュを有効にする時間(秒)
MAGPIE_CACHE_DIR キャッシュ保存先ディレクトリ
MAGPIE_OUTPUT_ENCODING 出力文字エンコード設定

 RSSを読み込んで取得したデータをキャッシュしておく部分のコードは以下のようになります。

[リスト5]getRank.php(抜粋)
// キャッシュ有効化
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のデータ構造のイメージは以下の図のようになります。

MagpieRSSで取得したRSSデータ構造のイメージ
MagpieRSSで取得したRSSデータ構造のイメージ

 ランキングデータ全体(紫色の枠内)を取得する場合は「$rss->items」で取得できます。各ランキングデータ(橙色の部分)は「$rss->items[index]」で取得できます。

取得したデータをJSONP関数で出力する

 JSONでのデータの出力形式は以下のように{}で囲まれた配列が続く形式になります。

[リスト6]JSONの書式
{"key1" : "value1","key2" : "value2" ・・・},{}・・・{};

 JSONPでは「呼び出し時に実行されるコールバック関数の名前」+JSON形式のデータという書式で記述します。

[リスト7]JSONPの書式
関数名(JSON関数データ)

 サンプルではJSONの配列にRSSで取得したデータのitem要素を格納して出力する方法を実装します。RSSは前項でMagpieRSSを利用して取得しています。item要素は配列で取得できます。このitemの配列をJSONの形式に変換する際にServices_JSONを利用します。Services_JSONのencodeメソッドを利用すると、PHPの配列を簡単にJSON形式に変換できます。

配列をJSON形式に変換するイメージ
配列をJSON形式に変換するイメージ

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

出力するJSONP形式のイメージ
出力するJSONP形式のイメージ

 Services_JSONを利用して取得したRSSのデータをJSONPの形式で出力する部分は以下のようになります。

[リスト8]getRank.php(抜粋)
// 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形式のデータを出力します。

次のページ
コールバック関数の作成

この記事は参考になりましたか?

目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5065 2010/10/04 10:40

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー