2013年9月3日火曜日

Google App Engine SDK for PHP を使ってみた・その2 (cron とメール送信)

前回はアップロードするところまでやりました。
今回は定期実行とメール送信に対応したいと思います。

定期実行
まずは定期実行に対応していきます。
リファレンスの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
cron.yaml の設定は以上で終わりです。

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 件のコメント:

コメントを投稿