最近は、コワーキングスペース タネマキ の方で、記事を更新しています。@uetsuhara でも気になったニュースや記事など流してます。良かったら覗いてみてください。
読了目安 3分50秒修正しました:Cron → cron
最近 RSS を取得して表示する機能を作っています。コーヒースポットのコーヒーニュースページみたいな感じです。
現状では、ニュースページにアクセスがあったら、RSS を取得しに行ってます。んで、まだそんなにアクセスがあるわけではないので良いですが、今後増えるのを見越して、cron で定期的に取得する方法にしたいと思いました。
なお、使っているサーバーは、VPS とかではなくて、レンタルサーバーのエックスサーバーを使っています。さくらやヘテムルとかでも cron 使えるみたいですね!
CakePHP で cron を動かす
CakePHP で cron を動かす方法は、2種類あるようです。
- アクセスしたファイルからアクションを呼び出す
- シェルを使って RSS を取得
らしいです。結果的には、後者の方を使っています。
2つの違い
ざっくり言うと、外部からアクセス可能かどうかってとこでしょうか。他にも違いあるかもですが。
前者だと、アクションを呼び出しているので、外からアクセスすると、プログラムが実行されます。F5アタックとかされると困っちゃうのかな。
後者のシェルを使う方法だと、外部からアクセスできないよね、ってなあれです。合ってるかな。
1. アクセスしたファイルからアクションを呼び出す
こちらは、僕の環境なのか設定なのか分かりませんが、うまく動かすことができませんでした。チーン。ですが、ググると上手くいっている情報が出てくるので、こっちの方が気軽かもしれません。
この辺りとか。
さくらインターネットのcronでcakephpのアクションを動かしたい<CakePHP> | BLIFE
2. シェルを使って RSS を取得
今回は、こちらの方法を採用、てか、やらざるを得ない感じではじめたのですが。シェルを使った感想としては、「思ったより簡単にシェルが使えました!」という感じです。
手順としては、シェルのファイルを作って、そいつを cron に登録みたいな感じです。たったの2ステップ。レッツシェル。
シェルの作成
シェルの作成は、公式のサンプルを見るのが分かりやすかったです。
コンソールとシェル — CakePHP Cookbook 2.x ドキュメント
[php title=””]
<?php
class HelloShell extends AppShell {
public function main() {
$this->out(‘Hello world.’);
}
}
[/php]
これをサクッと作って、コンソールで実行。そんな感じで、進めてみて下さい。だいたいコントローラーと似た感じで書けました。なので、ソースはそのまま流用。コンポーネントあたりだけ修正しました。
コンポーネント周辺
こことか見て幸せになれました。
[CakePHP 2.x] shell(シェル)からComponent(コンポーネント)を呼び出す – Qiita
[php title=””]
App::uses(‘ComponentCollection’, ‘Controller’);
App::uses(‘ほげぇComponent’, ‘Controller/Component’);
[/php]
と
[php title=””]
public function startup() {
$collection = new ComponentCollection();
$this->ほげぇ = new ほげぇComponent($collection);
parent::startup();
}
[/php]
を書き足しつつ、ほげぇを読み込みたいコンポーネントに書き換えると楽しいです。いじったのはそれくらい!あとは、コントローラーをそのまま移植です。
エックスサーバーでの cron の設定
エックスサーバー マニュアル | レンタルサーバー 高速・高機能・高安定性の【エックスサーバー】
とか
をご覧ください!
今回の収穫としては、シェルが思ったより気軽に使えるんだなということでした。ではでは。