ホームページ作成ソフト concrete5 の標準機能紹介です。
concrete5 には、ジョブ機能が用意されています。ジョブ機能は、プログラムを定期的に実行する機能です。
●アクセスランキングを集計する
●外部APIから情報を取得する(天気情報、株価情報、為替情報等)
●長期間ログインしていないユーザーの無効化
といった場合に、一定期間ごとにプログラムを実行できます。
上の画像のように、管理画面から実行を押すことで実行することもできます。
単純な例だと、以下のようになります。
class XemPriceUpdate extends Job {
protected $apiurl = 'https://api.zaif.jp/api/1/ticker/xem_jpy';
public function getJobName() {
return t("Price Update for Crypto currenty: xem");
}
public function getJobDescription() {
return t("Price Update for Crypto currenty: xem");
}
public function run() {
// ここに処理を書く
}
}
run()の部分に書いた処理が、ジョブで実行される処理です。
run()の部分が単純な処理(=メモリやCPU負荷の少ない処理)であれば、上でOKです。しかし、必ずしもそうとは限りません。runの部分の処理が複雑な場合は、注意が必要です。
そういった場合に役立つように、QueueableJobという抽象クラスがconcrete5では用意されています。
class GetUsersArticles extends QueueableJob{
public $jSupportsQueue = true; // 管理画面のUI設定と思われる
public function getJobName(){
return t('GetUserArticles');
}
public function getJobDescription() {
return t('GetUserArticles');
}
public function start(ZendQueue $q) { // 前の処理
$data = $this->getAlisData('urlを入れる');
if ($data['Items']) {
foreach ($data['Items'] as $array) {
$q->send(serialize($array)); // processQueueItemを呼び出す
}
}
}
public function processQueueItem(ZendQueueMessage $msg) {
// 実行する処理
}
public function finish(ZendQueue $q) { // 後の処理
return t('User Articles Inserted.');
}
}
processQueueItem()がメインの処理です。processQueueItem()を少しずつ実行するように準備するのがstart()です。処理が終わったら、finish()が実行されます。
処理する量がたくさんあっても、少しずつprocessQueueItem()を実行していけば、サーバーに過度な負荷がかかることを避けられます。