読者です 読者をやめる 読者になる 読者になる

理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

twitterログををはてなダイアリーに投稿するスクリプト書いた

perl twitter

ぼくはメッセというのがかなり苦手です。
なにが苦手かって言うとアレじゃないですか、こっちのことなんて関係なしにしゃべりかけられるじゃないですか。ぼくがPCでDVDに熱中しているときに「ねぇ」とかいわれると、あああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!っていう感じになるのです。ホントにぼくという人は社交性がない人で、金輪際話しかけねぇよバーカみたいに思ったことでしょう。


ところでtwitterというサービスがあるのですけども、とりあえず独り言をしゃべりまくるサービスで、そのみんなの独り言はぼくに届くし、ぼくの独り言はみんなにとどくみたいなかんじ。人は独り言を言いまくっているだけなので答える必要もないし、向こうにもそれを強要しない。このゆるいつながりがいいなーとか思っていて、一週間くらい前から久しぶりにやりはじめたところです。


で、そういやはてなダイアリーがメールでも書けることを思い出しました。
cf.メールで日記を書く - はてなダイアリーのヘルプ
で、この独り言をエントリとしてのっけるとわりかしおもしろそうだなーとか思って、突発的にスクリプト書いた。後悔はしていない。

use strict;
use utf8;
use Net::Twitter;
use Mail::Sendmail qw(sendmail time_to_date);
use Time::Local;

my $username  = 'twitterのユーザ名'
my $password  = 'twitterのパスワード'
my $to_addr   = 'はてダ投稿用アドレス';
my $from_addr = '一応fromアドレス'
my $server    = 'smtpサーバ名'

# 昨日の深夜0時のエポック秒生成
my $epoch = timelocal( 0, 0, 0, (localtime)[3 .. 5] ) - 60*60*24;
my $yesterday = time_to_date $epoch;

# 自分のタイムライン取得
my $twit = Net::Twitter->new( username => $username, password => $password );
my $res	 = $twit->user_timeline( { id => $username, since => $yesterday } ) or die "access failed";

# 他の人のidを含まないメッセージだけ抜き出してメール本文作成
my $msg = '-' . join "\n-", grep { ! /\@[\w+]/ } map { $_->{text} } @$res;

# 送信
sendmail( Server  => $server,
	  To	  => $to_addr,
	  From	  => $from_addr,
	  Subject => "[twitter] today's twitter",
	  Message => $msg ) or die $Mail::Sendmail::error;

とりあえず昨日分のメッセージだけ抜き取ればいいやとか思ったのですけども、twitterにも一応、相手を指定して(厳密にはちがうけども)メッセージを送ることができる。ぼくはこの相手指定の際にときおり毒を吐いたりするし、わりかし文脈に左右されたりもするので、その相手指定のメッセージ(@kiririmode見たいな感じで相手を指定する)は省くことにしました。[twitter]タグをつけて投稿する。
とりあえずcronで動かしてみることにする。というわけで、どんなにめんどくさい日でもぼくは毎日なにかしらエントリを書くことができるようになって、とてもよかった。

追記

サーバがPOP before SMTPでしかメール送信許さないみたいなので、

use Net::POP3;

my $pop = Net::POP3->new( $server );
$pop->login( 'pop3 server', 'pop3 pass' ) and $pop->quit;

を埋め込んでおいた。
あと、twitterが返すのはutf8ぽいのだけど、メール送信のエンコード時にutf8通さないみたいだったので、iso-2022-jpエンコードしといた。