スペースモラトリアムノカミサマ

日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)

最近のツッコミ:
  1. p (08/29)
  2. もり (08/29)
  3. 匿名 (08/20)
  4. ふ (08/06)
  5. あ (08/03)
最近の TrackBack:
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|06|07|08|09|

2010/01/01 編集

_ [] あけました

あけましておめでとうございます。

仕事がいっぱいいっぱい過ぎるため今年は帰省と年賀状は無しですが、よろしくお願いします。


2010/01/16 編集

_ [Perl][ネット諸々] Twitter の mension や DM をメール通知するスクリプト

Echofon とか Twitbird とか、iPhone の各種 Twitter アプリの有料版を買うと Global Push という機能があって mention や DM を iPhone にプッシュ通知してくれるらしい。

それと同じことを自前でやっている im.kayac.comでiPhoneにtwitterのリプライを通知するを見て、それって im.kayac.com にアカウント作らなくても MMS にメール送るだけでもほとんど同じことできるよな…と思って、Net::Twitter::Lite の練習がてら書いてみた。

#!/usr/bin/env perl
use strict;
use warnings;
use POSIX;
use Net::Twitter::Lite;
use Email::Send;
 
# Twitter のユーザ名・パスワード
my $user = 'Twitter のユーザ ID';
my $pass = 'Twitter のパスワード';
# メール通知元・先
my $mailfrom = '送信元として名乗る適当なメアド';
my $mailto = '通知したい iPhone の MMS アドレス';
# ログファイル
my $logfile = 'twitterchecker.log';
 
my $nt = Net::Twitter::Lite->new(
           username => $user, password => $pass) or die $!;
dbmopen my %lastid, 'twitterchecker-lastid', 0644 or die $!;
check('mention');
check('DM');
dbmclose %lastid;
exit;
 
sub check
{
  my $type = shift;
  logger("check new $type" . 's...');
 
  $lastid{$type} ||= 1;
  my $statuses = $type eq 'mention'
    ? $nt->mentions({ since_id => $lastid{$type}, count => 1 })
    : $nt->direct_messages({ since_id => $lastid{$type}, count => 1 });
 
  for my $status (@$statuses) {
    my $sender = $type eq 'mention'
      ? $status->{user}{screen_name}
      : $status->{sender_screen_name};
    logger("new $type from $sender");
    $lastid{$type} = $status->{id};
    sendmail($type, $sender, $status->{text});
  }
}
 
sub sendmail
{
  my ($type, $name, $text) = @_;
  my $sender = Email::Send->new({ mailer => 'SMTP' }) or die $!;
  $sender->send(<<"EOD") or die $!;
From: $mailfrom
To: $mailto
Subject: $type from $name
Content-Type: text/plain; charset="UTF-8"
 
$name: $text
EOD
}
 
sub logger
{
  if (defined $logfile) {
    open my $fh, '>>:utf8', $logfile or die $!;
    print $fh strftime('%Y-%m-%d %H:%M:%S ', localtime), @_, "\n";
    close $fh;
  }
}

あとはこれを適当に cron で回すと…

mension プッシュ通知画面

でも本当のプッシュ通知と違って handler を指定できないので「表示」を押すと MMS が開いてしまうのが×。

っていうかそもそも別にそんなに mension リアルタイムにチェックしたいわけじゃないんだけど。能動的に Echofon 開いた時に気づく程度で十分な気がする。


関連用語解説

by e-Words