今回は定期実行とメール送信に対応したいと思います。
定期実行
まずは定期実行に対応していきます。リファレンスのConfiguration/Scheduled Tasksを参考にしました。
cron.yaml の設定
定期実行をするためには、まず cron.yaml ファイルを作成します。作成する場所は app.yaml と同じディレクトリです。
cron.yaml には以下のように記述します。
cron: - description: default job url: /tasks/default schedule: every 5 minutes - description: test job url: /tasks/test schedule: every 1 hours
description は説明のテキストになります。任意の文字列を入力します。
url は cron の URL になります。他の cron 重複しないものにします。
schedule が cron の実行スケジュールになります。
every 5 minutes で 5分おきに実行されます。
この辺りの書式はリファレンスを参考にしてください。
今回は特定の時間帯に 5分間隔で実行するように設定しました。
every 5 minutes from 9:00 to 17:00
app.yaml の設定
次に、app.yaml を編集します。handlers: - url: /.* script: main.php - url: /tasks/default script: main.php login: admin
handlers: に項目を追加し、url に先ほど cron.yaml で設定した url を入力します。
script は実行したい php のファイルを指定します。
login: admin とすることで、URL を開いた時にログインを促されるようになります。
アップロード
最後にアップロードします。アップロードの手順は前回と同じです。以下のコマンドを実行すると、cron.yaml も自動的にアップロードされます。
appcfg.py update sample/
メール送信
メール送信については Services に Mail についてのリファレンスがあり、そちらに方法が書いてあります。まずは、メールAPI のある php を require_once で参照し、use 宣言します。
require_once("/google/appengine/api/mail/MailService.php"); use google\appengine\api\mail\Message;
API Reference には mail 関数が載ってますが、そちらは使えないようです。
以下のようにしてメールを送信します。
$mail_options = [ "sender" => "sender@example.com", "to" => "your@mail.com", "subject" => "Subject", "textBody" => "test message" ]; try { $message = new Message($mail_options); $message->send(); } catch (\InvalidArgumentException $e) { echo 'send mail error'; }
sender は自分のアカウントのメールアドレスならば特に設定する必要はありません。
もし、別のドメインを使いたい場合は登録をする必要があるようです。
今回は自分のアドレスを使うのでそのままです。
また、リファレンスでは $mail_options の本文は "body" になっていますが、それだと失敗してしまいます。
ここは "textBody" もしくは "htmlBody" にする必要があるようです。
google app engine - Sending mail of GAE for PHP - Stack Overflow
これでメール送信もできました。
目的達成
とりあえず、これで特定のサイトを監視して条件によってメール送信することができました。目的は達したので GAE とはまたしばらくは戯れることはないでしょうが、
GAE は便利なので、また何かやりたくなったら使おうと思います。
その時にこの記事が役にたてば万々歳です。(そのころには正式版になってるかも…)
0 件のコメント:
コメントを投稿