Prowl API

moyashiさんから,ProwlのAPI情報をいただいたので早速テスト.要は下記のリクエストを発生させられればよい.

https://prowl.weks.net/publicapi/add?
apikey=$apikey
&application=$application
&event=$event
&description=$description
&priority=$priority

上記の中のクエリ変数:

  • $apikey(API key 40byte hexadecimal)
  • $application(256)
  • $event(1024)
  • $description(10000)
  • $priority(-2, 2)

MMSのプッシュ通知はメッセージとしてどんどんたまっていくので鬱陶しい.これに対してProwlは通知一覧を一発で削除できるしMMSやSMSとは違うところに蓄積されるので溜めていてもそれほど気にならない.単なる通知ならばProwlのほうがいい感じ.

ということで,上記のリクエストををmaildropのレシピから発生させて,メール着信通知をProwlプッシュで受け取ることにした.レシピは以下のように「prowl.pl」というPerlスクリプトに引き継がせるように設定.

to "| /path/to/prowl.pl"

prowl.plの内容はここの例を改変して以下のような感じにした.

#!/usr/bin/perluse Jcode;use MIME::Words qw(:all);use LWP::UserAgent;$apikey ='自分のAPI Key';$URL = 'https://prowl.weks.net/publicapi/add';#=====================================================# DECODEする関数#=====================================================sub DecodeFld($) {    my($sBuff) = @_;    my($sRes, $sWk);    chomp($sBuff);    foreach $sWk (decode_mimewords( $sBuff, )){        ($sTxt, $sCode) = @$sWk;        $sRes .= $sTxt;    }    return $sRes;}#=====================================================# 本体開始#=====================================================$subject = '';$mail_to = '';$mail_from = '';$flg_subject = 0;$flg_read_end = 0;#ヘッダ部から情報抽出while (<STDIN>) {        #ヘッダ情報抽出終了後、パイプを空送りしてSTDINを終了させる    if($flg_read_end){        next;    }        #ヘッダ部の終了チェック    if(length == 1){        $flg_read_end = 1;        next;    }        #Subjectの取得    if($flg_subject == 1){        if(/^[ t](.+)/){            $subject .= $1;        }        else{            $flg_subject = 2;        }    }    elsif($flg_subject == 0 && /^Subject: (.+)/){        $subject = $1;        $flg_subject = 1;    }        #FromやTo、その他フラグの取得    if(/^From: .*<(.+)>.*/){        $mail_from = $1;    }    elsif(/^From: (.+)/){        $mail_from = $1;    }    elsif(/^To: .*<(.+)>.*/){        $mail_to = $1;    }    elsif(/^To: (.+)/){        $mail_to = $1;    }}#Subjectのデコード$subject = &DecodeFld("$subject");  #Subject欄デコード(JISコードのまま)#文字コード変換(JIS→utf8)&Jcode::convert($subject, "utf8");#Prowl送信$URL .= '?apikey='."$apikey";$URL .= '&application='."$mail_from";$URL .= '&event='."$mail_to";$URL .= '&description='."$subject";$URL .= '&priority=1';$ua = LWP::UserAgent->new;$req = HTTP::Request->new(GET => $URL);$res = $ua->request($req);