Twitterを使った、ついっこというサービスがありますが、ここしばらく遅延する事が多くてサービスとして成り立っていないような状況でした。
さすがに、発言から1時間以上経ってから反映されてもね、ってところでついっこと同じような事をするbotを作ってみることにしました。 ついっこのようなサービスとして運用するのは大変ですが、1アカウントだったらボット化すればなんとかいけれでしょう。
今回参考にしたページです。
設定関係は(1)で、実際のコードは(3)を参考にしました。
先頭に@付きできたものは、非公式リツイートとして、リプライします。
途中に、@がある場合は、公式リツイートになります。
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use FindBin; use YAML::Tiny; use Net::Twitter; my $config = (YAML::Tiny->read($FindBin::Bin . '/config.yml'))->[0]; my $status = (YAML::Tiny->read($FindBin::Bin . '/status.yml'))->[0]; my $twit = Net::Twitter->new(username => $config->{'username'}, password => $config->{'password'}); # 各種設定値の取得 my $username = $config->{'username'}; my $query = Encode::encode('utf8', $config->{'query'}); my $template = Encode::encode('utf8', $config->{'template'}); my $sinceId = $status->{'sinceId'}; # リプライ取得 my $response = $twit->replies({since_id => $sinceId}); # 検索結果を 1 件ずつ処理 if( $#{$response}<0) { exit(0); } my $result; foreach $result ( reverse( @{$response} ) ) { my $text = $result->{'text'}; my $fromUser = $result->{'user'}->{'screen_name'}; my $statusId = $result->{'id'}; if($text =~ /^\@${username}/ ) { $text =~ s/\s*\@${username}\s*//; my $reply = $template; $reply =~ s/{text}/$text/; $reply =~ s/{username}/$fromUser/; $twit->update({status => $reply, in_reply_to_status_id => $statusId}); } elsif($text =~ /\@${username}/ ) { $twit->retweet({id => $statusId}); } $sinceId = $statusId; } # 最後に処理したつぶやきの ID を保存 YAML::Tiny::DumpFile($FindBin::Bin . '/status.yml', {sinceId => $sinceId});
設定ファイルは以下の2つ。
status.yml
--- sinceId: 0
config.yml
username: "tsudanuma" password: "password" template: RT {text} #tsudanuma (via @{username})
これを、crontabで5分ごとに動かしてます。1アカウントくらいなら、この方が遅延も少なくて済むかなと思います。