japan.internet.com
japan.internet.com メンバーID
Twitter
Facebook
RSS
ピックアップ
2009年5月19日 10:00

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

著者W. Jason Gilmoreオリジナル版を読む海外海外発

はじめに

 私はここ数年間、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フィードの表示

Googleフィード向けAdSenseとフィード広告の統合

 さて、これでRSSフィードを作成して友達に情報を提供できるようになりました。次はもう1つの目標、つまりRSSフィードで収入を得ることについて考えてみましょう。

 Webサイト発行者向けのGoogleの広告ネットワークであるAdSenseの人気が急速に高まってきたのは、3つの重要な特徴があったからだと私は思っています。第1の特徴は、誰でもすぐに始められることです。つまり、Webサイトの規模に関係なく、無料でプログラムに参加できます。第2の特徴は、Webサイトに提供される広告が閲覧者に合わせて絞り込まれることです。たとえば、テレビゲームファン向けのWebサイトを運営している場合は、ゲーム機器やSFやユーザーが興味を持ちそうなその他のトピックに的を絞った広告が提供されることを期待でき、広告によってユーザーの気持ちが動かされる可能性が高くなります。最後の特徴は、広告が押し付けがましくないということです。ユーザーのWeb閲覧を中断させるような迷惑なポップアップやスパイウェアの類が表示されることはありません。

 どうやら私と同じ考えのWebサイト発行者が何百万人もいるらしく、AdSenseは2003年にサービスを開始すると、たちまち世界最大のオンライン広告ネットワークに成長し、モバイル、ラジオ、テレビの広告へと範囲を広げています。2005年、AdSenseはGoogleフィード向けAdSenseという名前の画期的なサービスを開始しました。フィード向けAdSenseを利用すると、コンテキストに合ったテキストベースの広告がフィードのコンテンツに組み込まれ、RSSフィードから簡単に収入を得ることができます。さらに、これがAdSenseらしいところですが、広告の提供方法、たとえば挿入する頻度、挿入する位置、投稿語数に基づく広告挿入の状況は利用者が細かく制御できます

 Google AdSenseにまだ加入していない場合は、Google AdSense申込・ログイン画面にアクセスして登録してください。審査のプロセスは、オンラインサービスに登録する場合より少し面倒です。というのも、広告場所として申請されたWebサイトをGoogleが実際に調査し、プログラムポリシーの規定を満たすことを確認するからです。アカウントが承認されると(私の場合は1日もかかりませんでしたが、Googleは場合によっては手続きに数日かかると案内しています)、AdSenseの利用を始めることができます。

広告対応のRSSフィードの作成

 フィード向けAdSenseの優れている点は、このチュートリアルで最初に作成したコードのリファクタリングがまったく必要ないことです。必要なのはGoogleに既存のフィードのURLを提供することだけであり、後はGoogleが新しくFeedBurner管理下のURLを作成してくれます。これにより、フィード広告を通して収入を得られるだけでなく、この素晴らしいサービスを通じて利用可能な高機能のトラフィック分析ツールもすべて使用できるようになります(ちなみに、FeedBurnerは2007年の終わりにGoogleに買収されており、対外的にはまだ独立した会社のように見えますが、Googleの一連のオンラインサービスとの統合が強化されています)。もともとFeedBurner上でフィードを提供している場合には、そのフィードを簡単にフィード向けAdSenseにインポートできます。

 AdSenseを既存のRSSフィードに統合するには、Google AdSense申込・ログイン画面でAdSenseにログインし、[AdSense Setup]→[Get Ads]に移動します。ここでは、利用可能な6つのAdSense製品から選択でき、その中にフィード向けAdSenseも含まれます。適切なリンクをクリックすると、広告の挿入先となるフィードを生成するように求められます。その後、広告についてのさまざまな作成オプションが表示されます。広告の種類(テキストのみ、画像のみ、両方の混合)、表示頻度、位置、さらには好みのデザイン色を指定することさえできます。また、フィードをAdSenseチャンネルに割り当てることもできます。ただし、この作成プロセスの最も重要な部分は最後のところ(図2を参照)であり、ここでフィードをAdSenseにマップします。[Burn new feed]リンクをクリックし、表示されるウィンドウでフィードのURLを入力します。

図2 RSSフィードとGoogleのフィード向けAdSenseのマッピング
図2 RSSフィードとGoogleのフィード向けAdSenseのマッピング
 指定したURLの場所にRSSが存在することがAdSenseによって確認されると、続いて独自のアドレスとタイトルの指定、およびFeedBurnerで購読の統計を追跡するかどうかの確認を求められます(図3参照)。

図3 GoogleへのRSSフィードの指定
図3 GoogleへのRSSフィードの指定
 あと残っている作業は以前に公開していたフィードのURLを新しいURLに置き換えることだけであり、そうすれば広告からの収入を得られるようになります。

次の段階

 場所やデバイスを選ばずにデータを利用できることがほぼ当たり前になった今日では、RSSは閲覧者を増やしたいと思っているWebサイト所有者にとって非常に有益なサービスです。RSS、Zend_Feedコンポーネント、およびGoogleのフィード向けAdSense製品の詳細については、次のリンクを参照してください。

  • Wikipediaの「RSS」の項目 ― Wikipediaに掲載されているRSSの説明は、Web上で見られるRSSの定義としては最もわかりやすいものの1つです。この人気のあるフォーマットの歴史についてもっと知りたい場合は、ぜひ覗いてみてください。
  • Zend_Feedのドキュメント ― Zend FrameworkのZend_Feedのドキュメントでは、RSSフィードの作成方法だけでなく、その使用方法も説明されています。
  • フィード向けAdSense ― Googleのフィード向けAdSense製品を使い始める方法をさらに詳しく知るには、このわかりやすい製品ドキュメントを参照してください。

著者紹介

W. Jason Gilmore(W. Jason Gilmore)
オハイオ州コロンバスに本社を置く出版・コンサルティング企業であるW.J. Gilmore, LLCの創設者。以前はApressのオープンソース系編集者として60冊を超える書籍の出版に携わり、オープンソース製品に関する優れた出版物の刊行に貢献。著作も多く、ベストセラーになった『Beginning PHP and MySQL: From Novice to Professional』(現在は第3版)、『Beginning PHP and PostgreSQL: From Novice to Professional』、『Beginning PHP and Oracle: From Novice to Professional』などがある。 年1回の開発者向けカンファレンス「CodeMash」を主催する非営利組織CodeMashの共同創設者。

プリンター用
記事を転送
この記事をクリップ!
【特別連載企画】au 版「GALAXY」の実力は?--ISW11SC 速攻レビュー
【特別連載企画】au 版「GALAXY」の実力は?--ISW11SC 速攻レビュー KDDI(au)から、NTT ドコモの人気スマートフォン「GALAXY S II」を大幅に進展させた「GALAXY SII WiMAX ISW11SC」が発売される。サムスンがこれまでに蓄積してきたノウハウが詰まった本機の実力をレポートする。
⇒詳細記事はこちら
⇒連載記事一覧はこちら
注目のトピックス
最新コラム一覧
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
12月の主婦層、ベルメゾンが首位を維持(VRI 調査)
百式のネットビジネス研究
百式のネットビジネス研究
起業に必要なおすすめ Web サービスを紹介してくれる「BEST Vendor」
アウンのグローバルマーケティング動向
アウンのグローバルマーケティング動向
Web プロモーションにおいて大切なこと―年度末編―
多言語×Web×海外マーケティング情報
多言語×Web×海外マーケティング情報
海外発、注目 AR プロモーション
エンジニア転職ノウハウ開発室
エンジニア転職ノウハウ開発室
楽天が目指す変革──Globalization、Agile、Big Data
中国・台湾ネットビジネス情報最前線
中国・台湾ネットビジネス情報最前線
中国から Web を見てもらいたいならば
マーケティングに活用できる最新トレンド
マーケティングに活用できる最新トレンド
改めて、「導線」最適化に目を向ける
次世代マーケティングチェーンの視点
次世代マーケティングチェーンの視点
ソーシャル時代における BtoC 型 Eコマース成功のポイント
Copyright 2012 internet.com K.K. (Japan) All Rights Reserved.