twitterに#でタグつけてつぶやいた時に日時を取得してメールを飛ばすスクリプト。

apeboardという自分で出力するhtmlを自由に変更できる掲示板CGIが太古の昔にあったのですが、apeboardを使ってたひとってMojoliciousで何かつくるのにはまりそうだなーみたいなことを考えてました。その流れで「この時代に今でもapeboard使ってるひとなんているのかなぁ」と思いまして、”apeboard”でついったー検索したら、今でもユーザさんがいてびっくりしました。何に使うのか興味があってその方の投稿を見ていたら、こんなことを書いていたので「じゃあつくるかー」と思った次第です。もうありそうなもんですけどね…。

FC2とかアメーバとか大手のブログサービスはメール投稿に対応してるみたいなので、メールで送れればいいよねってなりました。FC2とかアメーバとかAPI公開してるかどうか知らないし。

今のところスクリプトだけなので、土日の空いた時間にWebアプリケーション化できればいいかなーという感じです。
(あと使ったことないDBに挑戦してみたい)
cronが使える環境なら10分に1回スクリプト実行でいいんじゃないでしょうか。
スクリプトは続きから。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;

use Net::Twitter::Lite::WithAPIv1_1;
use Date::Manip;
use Email::Sender::Simple 'sendmail';
use Email::MIME;

Date_Init("TZ=JST");

my $consumer_key = '***';
my $consumer_key_secret = '***';
my $access_token = '***';
my $access_token_secret = '***';

#出力対象タッシュタグ
my $target = "足がめっちゃ臭い";

my $twit = Net::Twitter::Lite::WithAPIv1_1->new(
	consumer_key    => $consumer_key,
	consumer_secret => $consumer_key_secret,
	ssl => 1
);

$twit->access_token($access_token);
$twit->access_token_secret($access_token_secret);

#取得開始起点になるID(1以上の数字を入力したtxtをあらかじめ用意した)
open (DATA, "< id_str.txt ");
my $id_str = <DATA>;
chomp($id_str);
close(DATA);

my $array;

#ついーと取得
#eval {
	$array = $twit->user_timeline({count => 200, 
			screen_name=> "retrorocket", #自分でも他人でも
			include_entities => 'true', 
			since_id  => $id_str });
#};
#if ( my $error = $@ ) { warn "$error"; }
foreach my $hash (@$array){

	foreach my $hashtag (@{$hash->{entities}{hashtags}}) {
		my $hashtag_text = $hashtag->{text};
		if($hashtag_text eq $target) {
			my $date = ParseDate($hash->{'created_at'});
			my $text = $hash->{'text'};
			my $tag = "#".$hashtag_text;
			$text =~ s/$tag//;

			#メールの中身
			my $email = Email::MIME->create(
				header_str => [
					From    => 'from@e.mail',
					To      => 'your@e.mail',
					Subject => UnixDate($date,"%Y/%m/%d %H:%M"),
				],
				attributes => {
					content_type => 'text/plain',
					charset      => 'UTF-8',
					encoding     => 'base64',
				},
				body_str => $text,
			);
			#メール送信(例外処理なし)
			sendmail($email);
			last;
		}
	}

	$id_str = $hash->{id_str};
}
open (DATA, "> id_str.txt ");
print DATA $id_str;
close(DATA);

元のついっと

なんか足が臭かった
なんか足が臭かった

実行結果

メール実行結果
メール実行結果

どうでもいいんですが、初めてついったーの埋め込み機能を使いました。

書いてから気づいた

これ、Webアプリケーション化するとブログ投稿用のメールアドレス所持者が登録者本人かどうか確認する手段がないなと思いました。
やっぱりブログ投稿用のAPI叩くのが無難そうですね。はてなならAPIがあるの知ってるんですが。