この前作った、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})