スポンサードサーチ検索ツールには、リアルタイムに検索できる機能だけではなくて、過去のデータを遡って表示したり時系列グラフ表示する機能をつけます。
そのためには、過去の順位情報を残しておかなければなりません。
毎日定期的に順位データを自動で取ってきてデータを保存するために、スケジュール実行の仕組みが必要になります。
cronは定番のスケジューラ
スケジューリングのツールとして、cronを使います。
シェルスクリプトなどのプログラムを指定した時刻に実行できますが、このための時刻設定は一般的にはUnixのコマンドラインから行います。
しかし、多くのレンタルサーバは管理コンソール画面からスケジュール実行の設定が出来るようになっています。
管理コンソール経由でcronを制御してくれるような仕組みを備えていることが多いので、わざわざコマンドラインから時刻の設定を行わなくても良い場合が多いと思います。
例えばお名前.comレンタルサーバの管理コンソールのcron設定はこんな感じです。
スケジュール実行で動作させるプログラムは、Webアプリケーションと違って表示させる画面は無く、DBに結果データを保存させるだけの機能があればいいです。
したがってWebアプリケーションと言語を合わせる必要はないので、別にPHPで作らなくても構いません。
コマンドラインから実行させるスクリプトは、一般的にはPerlなどで作る場合が多いんじゃないかと思いますが、PHPでもコマンドライン実行はできます。
CakePHPには、コマンドラインから実行できる環境も含まれており、これを使うとWebアプリケーションで使っているクラスやライブラリがそのまま利用出来るので便利です。
また、HTMLパーサも同様にPHPのものを使いたいので、コンソールアプリケーションもPHPで作ることにします。
CakePHPで
/var/www/app/vendors/shells/ycrawler.php
という名前でファイルを作った場合、以下のコマンドで実行できます。
[php]
/var/www/cake/console/cake ycrawler -app /var/www/app
[/php]
[参考]CakePHP コンソール :: CakePHPによる開発 :: マニュアル :: 1.3コレクション :: The Cookbook
http://book.cakephp.org/ja/view/1106/The-CakePHP-Console
保存するテーブルのレイアウト
1回のYahoo検索で複数のドメインについての順位を調べられますので、図にすると以下のような関係になります。
調べたいドメインの数はいくつであっても柔軟に対応できるようにしたいので、テーブルは以下のようにキーワード用のテーブルとドメイン用のテーブルの2つに分けます。
順位は検索結果画面中央部分に表示される場合の順位なのか、画面右側に表示される順位なのかを区別できるように2列用意しています。
過去のエントリ
【連載】Webサービス制作日記#06 jQueryでAjaxする
【連載】Webサービス制作日記#05 HTMLパーサを使う
【連載】Webサービス制作日記#04 データベースを使う
【連載】Webサービス制作日記#03 プラットフォームを決める
【連載】Webサービス制作日記#02 要件を決める
【連載】Webサービス制作日記#01 何を作ろうとしているか