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】