im.kayac.com を使って iPhone にプッシュ通知する

im.kaya.com というサービスを最近 (昨日) になって知ったわけですが、iPhone などにプッシュ通知を行うサービスです。 プッシュ通知を受け取るには im.kayac.com: Receive your notification at iPhone - iTunes - Apple をインストールする必要があります。

im.kaya.com には curl コマンドを用いた例や Ruby, PHP の例が載っていますが、これを gawk の Socket で書いてみます。

ここでは Load Average をプッシュ通知するものを作成していますが、いろいろなものに活用できると思います。

#! /usr/local/bin/gawk -f
# kayac_test.awk

BEGIN {
    proc_loadavg = "/proc/loadavg";

    while (getline < proc_loadavg > 0) {
        loadavg = $1;
    }
    close(proc_loadavg);

    imkayac_name    = "*****";
    imkayac_title   = "[Load Average]";
    imkayac_message = "Load Average is " loadavg;
    send_imkayac(imkayac_name, imkayac_title, imkayac_message);
}

function send_imkayac(name, title, message) {
    imkayac_url = "http://im.kayac.com/api/post/";

    my_proxy      = "***.***.***.***";
    my_proxy_port = "****";

    return_code = "%0D%0A";

    gsub(/\n/, return_code, title);
    gsub(/\n/, return_code, message);

    send_message = "message=" title return_code message;
    content_length = length(send_message);

    imkayac = "/inet/tcp/0/" my_proxy "/" my_proxy_port;

    printf("POST %s%s HTTP/1.0\r\n", imkayac_url, name)           |& imkayac;
    printf("Content-Length: %d\r\n", content_length)              |& imkayac;
    printf("Content-Type: application/x-www-form-urlencoded\r\n") |& imkayac;
    printf("\r\n")                                                |& imkayac;
    printf("%s", send_message)                                    |& imkayac;

    while ((imkayac |& getline res) > 0) {
        printf("%s", res) > "/dev/null";
    }
    close(imkayac);
}

アスタリスクで伏字になっている部分は自分の環境に合わせて変更してください。

では実行してみましょう。

DoukakuAWK_319_01.png

こんな風に iPhone にプッシュ通知されました。 cron で実行させると便利ですし、通知時間帯も cron で指定できます。

curl コマンドが使えるのであれば Shell でも十分なのですが、「Load Average が CPU 数の倍を超えたら通知する」とか「/var/log/messages でエラーがあれば通知する」といったように数値や文字列の比較・条件分岐などがあると一貫性のあるプログラム言語で作った方がプログラムが見やすいと思います。

tag_gawk.png