ブログパーツ


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


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

,

  1. コメントはありません
(公開されません)


  1. トラックバックがありません。