concrete5で作ったホームページでプログラムを自動実行するジョブ

ホームページ作成ソフト 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()を実行していけば、サーバーに過度な負荷がかかることを避けられます。

他の記事もごらんください。





公開日:2019/01/29
獲得ALIS:16.85
mizuno's icon'
  • mizuno
  • @mizuno
月70万PVウェブメディア「計算フォーム」 https://calculator.jp/ でウェブ集客支援。書籍「WordPressユーザーのためのPHP入門」他一冊。TWITTER: @ounziw
コメントする
コメントする