はてなブックマークのコメントにスターがついたら速攻でお知らせ

スターがつくと嬉しいですし速攻で知りたいですよね。そんな時は スター受け取り通知に対応した はてなブックマーク Web Hook と im.kayac.com を使って IM に通知しましょう。と、ここまで書いてから連打されたりするとひどいことになったり、そもそもはてなメッセージと同じじゃないの*1とか気づきました。

#!/usr/bin/env perl
use strict;
use warnings;

use CGI qw/-utf8/;
use CGI::Carp qw/fatalsToBrowser/;
use DateTime::Format::W3CDTF;
use LWP::UserAgent;
use HTTP::Request::Common;
use utf8;

my $q   = CGI->new;
my $key = 'your-key-goes-here';

die 'authentication failed' if $q->param('key') ne $key;
die 'only for star'         if $q->param('status') ne 'star';

my $username = $q->param('username');
my $title    = $q->param('title');
my $url      = $q->param('url');
my $color    = $q->param('color');
my $quote    = $q->param('quote');
my $dt       = DateTime::Format::W3CDTF->parse_datetime($q->param('timestamp'))->datetime;

my $msg = sprintf 'id:%s が %s に「%s (%s)」というエントリのコメントに%sスターをつけたよ!',
    $username, $dt, $title, $url, $color;
$msg .= "\n引用文「$quote」" if $quote;

LWP::UserAgent->new->request(POST 'http://im.kayac.com/api/post/your-username', [message => $msg]);

print $q->header(-type => 'text/plain'), 'OK';

*1:メッセージの IM 通知ってリアルタイムに来るんだっけ?