この前作った、Retweet botをOAuth対応する事にしました。
perlで作ったTwitterボットをOAuthに対応するのは、こちらを参考にしました。
OAuth対応したコードが以下のようになります。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use FindBin;
use YAML::Tiny;
use Net::Twitter;
use Data::Dumper;
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(
traits => ['API::REST', 'OAuth'],
consumer_key => $config->{'consumer_key'},
consumer_secret => $config->{'consumer_secret'},
ssl => 1,
);
$twit->access_token($config->{'access_token'});
$twit->access_token_secret($config->{'access_token_secret'});
# 各種設定値の取得
my $username = $config->{'username'};
my $template = Encode::encode('utf8', $config->{'template'});
my $sinceId = $status->{'sinceId'};
my $response = $twit->mentions({since_id => $sinceId});
#print Dumper($response);
# 検索結果を 1 件ずつ処理
my $result;
if($#{$response}<0) {
exit(0);
}
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});
設定ファイルの方に、OAuth関連の設定を追加しました。
config.yml
username: "tsudanuma"
consumer_key: "your consumer key"
consumer_secret: "your consumer secret"
access_token: "your access token"
access_token_secret: "your access token secret"
template: RT {text} #tsudanuma (via @{username})
ツイート
