Notifications API - GitHubgithub の通知を取得する場合、これまでは miyagawa さんが github growler でやっていた様に、ダッシュボードのRSSを使って自分のイベントを抽出しなければなりませんでしたが、Notification API を使う事で Github 上と同じ通知メッセージが取れる様になりました。
Recent posts in this category Notifications API technoweenie on October 26, 2012 Latest commit per d...
https://github.com/blog/1306-notifications-api
今日は Perl で Github のメッセージを通知するアプリケーションを作ってみました。
#!perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use Encode;
use JSON;
use Term::ReadKey;
use Data::Deduper;
use Growl::Any;
my ($username, $password);
print "Username: ";
chomp($username = <STDIN>);
print "Password: ";
ReadMode(2);
chomp($password = ReadLine(0));
ReadMode(0);
print "\n";
my $ua = LWP::UserAgent->new;
$ua->ssl_opts(verify_hostname => 0);
my $req = HTTP::Request->new('POST', 'https://api.github.com/authorizations');
$req->content(to_json {
scopes => ['notifications'],
note => 'github-notification.pl',
note_url => 'https://github.com/mattn/github-notification',
});
$req->authorization_basic($username, $password);
my $res = from_json $ua->request($req)->decoded_content;
my $token = $res->{token};
my $dd = Data::Deduper->new(
expr => sub {
my ($a, $b) = @_;
$a->{id} eq $b->{id}
},
);
my $growl = Growl::Any->new(
appname => 'Github Notification',
events => ['notification', 'error'],
);
while (1) {
$res = $ua->get("https://api.github.com/notifications?access_token=$token");
my $items = from_json decode_utf8 $res->decoded_content;
for ($dd->dedup($items)) {
$growl->notify(
'notification',
$_->{subject}->{title},
$_->{description},
$_->{repository}->{owner}->{avatar_url})
}
sleep($res->header('X-Poll-Interval') || 60);
}
前半部分はトークンを取る処理で、パスワードは token を得る為だけに使っています。簡単ですね。これでどんなネタ振りも取りこぼす事無く反応出来ますね!