perlによるTwitter botのこしらえ方
perlでTwitter botを作ろう
まずはCPANからNet::Twitter
とYAML::Tiny
をインストールします.
$ cpan Net::Twitter
$ cpan YAML::Tiny
用意した文章からランダムにつぶやかせる
#!/usr/bin/perl use strict; use Net::Twitter; use YAML::Tiny; use utf8; binmode STDOUT, ":utf8"; my $config = (YAML::Tiny->read('config.yaml'))->[0]; my @tweet= @{(YAML::Tiny->read('tweet.yaml'))->[0]}; my $handle = Net::Twitter->new( traits => [qw/OAuth API::REST/], consumer_key => $config->{'consumer_key'}, consumer_secret => $config->{'consumer_secret'}, access_token => $config->{'token'}, access_token_secret => $config->{'token_secret'}, ); $handle->update(@tweet[int(rand(@tweet))]);
このファイルと同じディレクトリにconfig.yamlとtweet.yamlをおいてください.
config.yamlには以下のようにconsumer key,consummer secret,access token,access token secretなどを記録します.
これらはTwitter Developersで取得できます.ここにtwitterのアカウントでSign inして,Create a new Appication リンクを押して,アプリケーションの登録を行います.アプリケーション情報を登録したら,Setting からApplication TypeをRead and Writeにする.そして,Detailの欄の下の方にあるCreate my access tokenをクリックします.すると,先ほど述べた4つの情報がDetailの欄に表示されていると思います.これを下の*の部分に記録します.
consumer_key: ********************* consumer_secret: **************************** token: *********************************** token_secret: *************************
あとはtweet.yamlにつぶやかせたい言葉を以下のように記録します.
- ツイート - tweet - ついーと - ほげ
最初に記したperlのプログラムはこのtweet.yamlからランダムに言葉を取り出してツイートします.
タイムライン上の言葉に反応してを@ツイートする
#!/usr/bin/perl use strict; use Net::Twitter; use YAML::Tiny; use utf8; binmode STDOUT, ":utf8"; my $config = (YAML::Tiny->read('config.yaml'))->[0]; my @tweet = @{(YAML::Tiny->read('tweet.yaml'))->[0]}; my $handle = Net::Twitter->new( traits => [qw/OAuth API::REST/], consumer_key => $config->{'consumer_key'}, consumer_secret => $config->{'consumer_secret'}, access_token => $config->{'token'}, access_token_secret => $config->{'token_secret'}, ); open (IN, "latest.txt");#以前の取得したツイートの中で最新のツイートID my $since_id=<IN>; close(IN); my $array_ref = $handle->friends_timeline({since_id=>$since_id});#タイムライン取得 my $str; my $TwitId; my $reply; my $TwitUserId; my $latest_id; my $rand; my $result; foreach my $hash_ref (reverse(@$array_ref)){ $str=$hash_ref->{'text'};#本文取得 $TwitId=$hash_ref->{'id'};#ツイートのID取得 $TwitUserId=$hash_ref->{'user'}{'screen_name'};#ユーザid $latest_id=$TwitId; if($str=~ /マッチさせたい単語/ ){ $rand=int (rand(@tweet)); $reply='@'.$TwitUserId.' '.@tweet[$rand]; my $result = $handle->update({status=>$reply, in_reply_to_status_id => $TwitId}); } } open (OUT, "> latest.txt");#最新のツイートIDを記録 print (OUT $latest_id); close(OUT);
latest.txtには1とだけ記録して実行してください.実行後最新のツイートIDがlatest.txtに出力されます.tweet.yamlには返信するツイートの内容を記録しておきます.tweet.yamlの中からランダムに呟きます.
そしてこれをcronで定期的に実行させると特定の単語に反応してツイートするようになります.
このようにかなり雑にですがBOTの作り方を紹介しました.
間違いがあったらペコりますごめんなさい.
もっと詳しく知りたいならNet::Twitterで検索するなり,$perldoc Net::Twitter
でマニュアルを見るなりしてみるといいかもしれませんね.