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アカウントくらいなら、この方が遅延も少なくて済むかなと思います。


ついっこ代わりに、Twitterのbotを作成してみた