タイトル通りなのですが、先日PHPでサイトを作成していたら、cronが使えない状況でcronの設定をしたくなりました。
今回説明するのは、具体的なソースコードではなく、考え方の概要のみです。
cronというのは設定しておけば、決まった時間に特定のプログラムを自動で実行してくれるというものです。
例えば、一時間毎に(自分が管理している)他サイトのブログの記事を取得して、自サイトでその更新データを表示したいとします。
cronが使えれば他サイトのデータを取得するプログラムを作成して、それを1時間毎に実行するという設定をすればあとは自動で1時間毎にそれを実行してくれます。
そんな便利なcronが使えなかったので困ってしまいました。
そこで考えた苦肉の策が自サイトのトップページにアクセスしたら、他サイトの記事を取得するプログラムが起動して自サイトに表示するというものです。
記事を取得するプログラムを起動させるトリガーがcronかトップページを開いた時に実行させるかという事です。
ただ、この方法だと毎回データを取りにいってしまうので、処理が重くなってしまったり、そこまでの更新頻度ではないので無駄にデータを取得してしまうことになります。
理想は1時間に1回程度データを取得したいので、データを取りに行く前に最終的に更新した時間を確認します。そうすることにより、一時間以上立たないと新しいデータを取得しに行かないという事が約束されます。
これはデータを取得する際に、ファイルやDBなどに更新時間を記録しておいて、それをチェックすればいいと思います。
そして、取得したデータもファイルやDBに保存しておきます。
そうすることにより、1時間以内であれば以前に取得したデータを使い表示し、1時間以上経っていれば他サイトにデータを取得しにいくという状態になります。
かなりアクセスが多いサイトであれば毎回ファイルを見にいって更新時間をチェックする処理をするのはリソース的にもったいない気がするので、自サイトのアクセスを確認して、トップページよりもアクセス数が少ない下位のページにこれを仕込んでもいいかもしれません。
あと、むやみに他サイトにデータを取得しにいくような事は相手のサイトに負荷がかかるのでやめましょう。
これはあくまで自分で管理しているサイト同士の話になります。