Notwife、使ってみたら予想以上にイイカンジだったので愛用させていただいています。
http://notwife.heroku.com/
が、Notwifeが使用しているNotifoに利用回数の上限があるそうで、この先の運用が危うくなっているようです。
http://notwife.heroku.com/information
とは言え、月間10000回という使用回数はサービス提供側でなく個人での利用であれば十分な回数なので、Notwifeのサービスを経由せずに自分でNotifoのAPIを利用して通知するようにすれば、もしNotwifeが利用できなくなっても通知の恩恵は受けられるよね、ということで書いてみた。
#!/usr/bin/env perl use strict; use warnings; use AnyEvent::Twitter::Stream; use Config::Pit; use Net::Twitter::Lite; use WebService::Notifo; my $config = pit_get('twitter.com', require => { consumer_key => 'consumer_key', consumer_secret => 'consumer_secret', token => 'token', token_secret => 'token_secret', }); my $screen_name = do { Net::Twitter::Lite->new( %$config, access_token => $config->{token}, access_token_secret => $config->{token_secret}, )->verify_credentials->{screen_name}; }; my $notifo = WebService::Notifo->new; my $cv = AE::cv; my $listener = AnyEvent::Twitter::Stream->new( %$config, method => 'userstream', on_tweet => sub { my ($tweet) = @_; # Retweet if (my $retweet = $tweet->{retweeted_status}) { if ($retweet->{user}{screen_name} eq $screen_name) { my $from = $tweet->{user}{screen_name}; my $text = $retweet->{text}; $notifo->send_notification(msg => "Retweet from \@$from: $text"); } } # Mention else { for my $mention (@{ $tweet->{entities}{user_mentions} }) { if ($mention->{screen_name} eq $screen_name) { my $from = $tweet->{user}{screen_name}; my $text = $tweet->{text}; $notifo->send_notification(msg => "Mention from \@$from: $text"); } } } }, on_event => sub { my ($tweet) = @_; my $event = $tweet->{event}; my $from = $tweet->{source}{screen_name}; my $target = $tweet->{target_object} ? $tweet->{target_object}{text} : ''; $notifo->send_notification(msg => "$event from \@$from: $target"); }, on_connect => sub { warn "on_connect"; }, on_delete => sub { warn "on_delete"; }, on_eof => sub { warn "on_eof"; }, on_error => sub { warn "on_error"; }, on_friends => sub { warn "on_friends"; }, ); $cv->recv;
https://gist.github.com/718689
これを自分でどこかサーバーなりPCなりで動かしておけばNotwifeと同じような通知ができる…はず!
一応解説すると
- AnyEvent::Twitter::StreamでUser StreamsのAPIを使って色々できる
- Config::Pitは設定情報をハードコードしないために使用。
- 適当なアプリケーションを http://dev.twitter.com/apps/new で作成しておき、そのconsumer_keyやらaccess_tokenやらをPitで使えるようにしておく
- Notifoのapi_keyなんかもPitで管理しても良いけど、WebService::Notifoはデフォルトで ~/.notifo.rc というファイルに設定書いておけばそれを使ってくれるようなので
api_key: ********************************************* user: sugyan
みたいなものを用意しておく。
- favorite, followなどのeventはon_eventで取得できる。普通に"イベント名"と"誰からか"を取得して通知。
- Retweet, Mentionはeventとしては流れてこないので、"自分の発言をRetweetされたものか", "Mentionの対象に自分が入っているか"を判別して通知。
Notifoについて思うこと
iPhoneへの通知だけならim.kayac.comが非常に便利なツールとして使えるのだけど、Notwifeのように外部サービスがそのAPIを使えるようにと仕組みがつくってあるNotifoは流石だなぁと思った。ここまでちゃんと作っているのがすごい。
http://notifo.com/desktop#macのおかげでGrowlにも通知してもらえるようになって、便利。