lolipopでバッチを定期実行する
さて、前回の続きです。
cakephp3でrest apiを作成して、cronで実行した際の手順を説明します。
まずは、REST APIですね。
REST APIの呼び出し
apiの呼び出しは簡単で、config/routes.phpに設定を追記し、https://xxxxx.jp/api/updateFlgのように呼び出します。
config/routes.php
1 2 3 |
Router::connect('/api/updateFlg', array('controller' => 'orders', 'action' => 'updateFlg')); |
コントローラー部
コントローラーは、mysqlのプロシージャを呼び出す形にします。
src/Contoroller/OrdersController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/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】