[メモ][perl]メールが届いたらtwitterに投稿(tweet)するスクリプト

[メモ][perl]メールが届いたらtwitterに投稿(tweet)するスクリプト はてなブックマーク - [メモ][perl]メールが届いたらtwitterに投稿(tweet)するスクリプト


◆メール通知をtweetで教えてくれるモノ

昨日はメールからSubject: From: ヘッダをファイルに抽出する方法を試してみました。今日は引き続き、メールが届いたら、こんな風に twitter に自動投稿(tweet)するスクリプトを試作しました。

◆下準備

今回も Perl のスクリプトです。昨日の投稿のように、.forward で parseMail.pl を実行するようにしておきます。

それと、twitter への投稿は、Net::Twitterモジュールを使用します。これは twitter の API を使って投稿しますので、API の登録を済ませておく必要があります。

アプリケーション登録申請 ( https://dev.twitter.com/apps/new ) ページにアクセスし、各種情報を入力します。(※ API登録時、アクセスタイプは「Read & Write」にしないと tweet 出来ないので要注意。)

登録が完了すると “http://dev.twitter.com/apps/数字” のページに遷移します。ここで表示される「Consumer Key」と「Consumer secret」を控えておきます。

次に、同ページ右上のボタン「My Access Token」をクリックします。画面が変わったら「Access Token(oauth_token)」「 Access Token Secret(oauth_token_secret)」を控えておきます。

◆改良版 parseMail.pl

昨日のサンプルは Subject: From: ヘッダをファイルに記録するだけでした。今回は Subject: From: の情報を、こちらのように tweet  で通知するように書き換えます。

#!/usr/bin/perl

use warnings;
use Encode qw(decode);
use utf8;
use Net::Twitter;

binmode(STDOUT, ":utf8");

our $From;
our $Subject;

foreach my $mail () {
	chomp $mail;
	$From = $3 if ($mail =~ /^(From:)(\s)(.*)$/);
	$Subject = $3 if ($mail =~ /^(Subject:)(\s)(.*)$/);
	last if !$mail;
#	push @mail,$mail."\n";
}
$Subject = decode ('MIME-header', $Subject);
$From = decode ('MIME-header', $From);

open(DAT,">>/home/testmail/mail.dat");
print DAT "From\t$From\n";
print DAT "Subj\t$Subject\n";
close(DAT);

exit if (!($Subject && $From));

my $nt = Net::Twitter->new(
    traits => [qw/API::REST OAuth WrapError/],
    consumer_key    => '<Consumer Key>',
    consumer_secret => '<Consumer secret>',
    ssl => 1,
);

$nt->access_token       ('<Access Token>');
$nt->access_token_secret('<Access Token Secret>');
# http://search.cpan.org/~mmims/Net-Twitter-3.14003/lib/Net/Twitter.pod

$From =~ s/(\s)(<)(.*)(>)//;
my $tweet = '.@twitterアカウント名 メールが届きました( ´∀`) Subect: '.$Subject.' (From: '.$From.")";
$nt->update($tweet);

exit;

あとは、当該アカウントにメールを送ると、投稿が完了します。$tweet の部分は、適時書き換えてご利用ください。

汎用的なメール到着用のスクリプトとして使えると思います( ´∀`)

…これで、やりたい事の半分ぐらいはクリアしたかな?