【cakephp3】lolipopでバッチを定期実行する【rest api】

IT技術系

lolipopでバッチを定期実行する

さて、前回の続きです。
cakephp3でrest apiを作成して、cronで実行した際の手順を説明します。

まずは、REST APIですね。

REST APIの呼び出し

apiの呼び出しは簡単で、config/routes.phpに設定を追記し、https://xxxxx.jp/api/updateFlgのように呼び出します。

config/routes.php


Router::connect('/api/updateFlg', array('controller' => 'orders', 'action' => 'updateFlg'));

コントローラー部

コントローラーは、mysqlのプロシージャを呼び出す形にします。

src/Contoroller/OrdersController.php


use Cake\Datasource\ConnectionManager;
class OrdersController extends AppController{

	public function updateFlg(){

		//defaultの設定でDBに繋ぐ
		$connection = ConnectionManager::get('default');
		//プロシージャを呼ぶ
		$connection->execute('CALL update_flg');

		//JSONデータでtrueを返却
		$this->viewClass = 'Json';
		$this->set('json', true);
		$this->set('_serialize', array('json'));

		return;
	}
}

※プロシージャの作成は以前の記事をどうぞ。
【mysql】lolipopでイベントスケジューラを実行?【event sheduller】

注意点

動かない時は、呼び出し関数にauthコンポーネントが効いてることがあるので、チェックしてみて下さい。

 

pythonで呼び出し

後は、cronでの呼び出しですね。今回は、pythonを使いますね。

updateFlg.py


#!/usr/local/bin/python3.4
# coding:utf-8
print("Content-type: text/plain\n")

import urllib.request;

#apiを叩く。
url = 'https://xxxxx.jp/api/updateFlg';
with urllib.request.urlopen(url) as response:
    res_data = response.read().decode('utf-8');
    print(res_data);

注意点

動かない時は、.pyファイルのパーミッションが700になってるか、チェックしてみて下さい。

 
※後は、cronの設定ですが、こちらは以前の記事をどうぞ。
【python】lolipopでバッチを定期実行する【cron】