CodeZine(コードジン)

特集ページ一覧

Zend Frameworkで趣味と実益を兼ねたRSSフィードを作成する

Zend FrameworkとGoogle AdSenseを使ったRSSの作成・利用方法

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/04/24 14:00

 ここ数年間で、RSSはごくありふれた情報伝達手法となり、その応用範囲は様々です。本稿では、Zend FrameworkとGoogle AdSenseを使って、ごく簡単な方法でRSSフィードを作成する方法、さらにそのRSSフィードに広告を直接統合して収入を得る方法を紹介します。

目次

はじめに

 私はここ数年間、PHPとMySQLおよびRubyを使用してRSSアグリゲータを自作する方法を紹介してきました。前にチュートリアルを書いてから5年を経ても、RSSは相変わらず強力であり、多様化する一方のオンライン情報を追跡するための手段として世界中の何百万ものユーザーに頼りにされています。たとえば、私が2004年に書いたチュートリアルでは、RSSの普及に貢献しているWebサイトとして、Yahoo!CNETThe Christian Science Monitorなどの名前を挙げていました。5年後の今、RSSはごくありふれた情報伝達手法となり、その応用範囲は電子メールを読んだりお天気情報を見たりTwitterで仲間の活動を知ったりすることにまで広がっています。RSSフィードの機能をまだ自分のWebサイトに組み込んでいないのならば、導入を検討してみてはいかがでしょうか。RSSフィードを提供しないということは、あなたのWebサイトの更新情報を随時入手する優れたメカニズムを現在のユーザーに使わせないだけでなく、数多くのWebサイトを何度も訪れる手間を省きたいと思っている人を拒むことにもなり、今後のユーザー数拡大の妨げになります。

 それでもまだちょっと・・・という人もいるかもしれませんね。では、現在使っているカスタムデータからごく簡単な方法でRSSフィードを作成できると言ったら、さらに、そのRSSフィードに広告を直接統合すれば収入にもなると言ったらどうでしょうか。Zend FrameworkGoogle AdSenseを使えば、両方の目的を驚くほど簡単に達成できます。このチュートリアルでは、その方法を紹介します。

Zend Frameworkでのカスタムフィードの作成

 以前のチュートリアルを見てもらうとわかるように(Twitter多言語化Amazon WebサービスOpenID認証の各チュートリアルを参照)、Zend Frameworkは非常に強力なソリューションであり、Web開発者はこれを使用することで保守の簡単なWebサイトを作成できるだけでなく、最新のWebサービスも利用することができます。Zend Frameworkに含まれるZend_Feedコンポーネントを使用すると、RSSフィードの作成と利用がとても簡単になります。

 たとえば、定期的に実行するcronジョブと組み合わせてZend_Feedを使用すれば、Amazon.comの売上に基づいて最も人気のある25のテレビゲームを通知するRSSフィードを作成できます。wgetとHTTP認証を使用して、6時間ごとにcronジョブを実行し、curlを使用して最新のRSSフィードの作成を開始するURLにアクセスします。crontabのエントリは次のようになります。

0 0,6,12,18 * * * /usr/bin/curl --user webuser:supersecret
   --silent http://www.gamenomad.com/cronjobs/populargames

 このエントリではcronに対して、毎日、午前0時、午前6時、午後0時、午後6時に実行し、curlプログラムを使用して指定のGameNomad URLにアクセスするように指示します。このURLは誰でもアクセス可能にしたくないので、パスワードで保護してあります。認証はcurlの--userオプションを使用して行います。croncrontabの詳細については、Wikipediaの「cron」の項目を参照してください。

 cronジョブコントローラーの中にあるpopulargamesアクションを次に示します。このアクションは、Zend_Feedコンポーネントを利用し、WebサイトのMySQLデータベースに格納されている情報に基づいてフィードを作成します。本稿では、アクションの内容を1行ずつ細かく説明することはしません。重要な処理をしている行についてのみ、後で行番号を示しながら説明します。

01 public function populargamesAction()
02 {
03
04     // Create array to store the RSS feed entries
05     $entries = array();
06    
07     // Retrieve the 25 most popular games
08     $game = new Game();
09     $rankings = $game->getLatestSalesRanks(25);
10    
11     // Cycle through the rankings, creating an array storing
12     // each, and push the array onto the $entries array
13     foreach ($rankings AS $ranking) {
14         $entry = array(
15           'title'       => "{$ranking->title}
                              ({$ranking->platform})",
16           'link'        => "http://www.gamenomad.com/games/
                               {$ranking->asin}",
17           'description' => "Sales Rank: #{$ranking->rank}",
18         );
19         array_push($entries, $entry);
20     }
21    
22     // Create the RSS array
23     $rss = array(
24       'title'   => 'GameNomad: Popular Games',
25       'link'    => 'http://www.gamenomad.com/games/ranks',
26       'charset' => 'ISO-8859-1',
27       'entries' => $entries
28     );
29    
30     // Import the array
31     $feed = Zend_Feed::importArray($rss, 'rss');
32    
33     // Write the feed to a variable
34     $rssFeed = $feed->saveXML();
35    
36     // Write the feed to a file residing in /public/rss
37     $fh = fopen($this->config->feed->popular_games, "w");
38     fwrite($fh, $rssFeed);
39     fclose($fh);
40    
41 }

 Zend Frameworkをある程度使ったことがある人ならば、ここで示したコードの大部分は既にお馴染みでしょう。見慣れないのはZend_Feed固有の呼び出しの部分だけだと思います。それでは、このリストの重要な行について解説します。

  • 9行目 ― Gameモデルで定義されているメソッドを使って、販売ランキング上位25商品から成る配列を取得します。
  • 13~20行目 ― 配列をループ処理して、各ゲームのタイトル、プラットフォーム、GameNomadのURL、最新の販売ランクから成る連想配列を作成します。19行目では、この連想配列$entryを別の配列$entriesにプッシュします。この配列$entriesに、新たに作成した個々の連想配列が格納されることになります。
  • 24~26行目 ― RSSフィードのタイトル、URL、および文字セットを定義します。
  • 27行目 ― 配列$entriesを、配列$rssentriesインデックスに割り当てます。これにより、配列$entriesの各要素がRSSの項目として定義されます。
  • 31行目 ― RSSフィードを生成します。
  • 34行目 ― フィードを変数に保存します。
  • 37~39行目 ― フィードを誰でもアクセスできるファイルに書き込みます。

 ちなみに、このフィードにはGameNomad: Popular Gamesでアクセスできます。このフィードをGoogle Readerに読み込むと、図1のような出力が表示されます。

図1 Google ReaderでのRSSフィードの表示
図1 Google ReaderでのRSSフィードの表示

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

  • W. Jason Gilmore(W. Jason Gilmore)

    オハイオ州コロンバスに本社を置く出版・コンサルティング企業であるW.J. Gilmore, LLCの創設者。最新のプロジェクトに、PHP言語の学習用ワンストップショップEasyPHPWebsites.comがある。以前はApressのオープンソース系編集者として60冊を超える書籍の出版に携わり、オー...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5