perlによるTwitter botのこしらえ方

perlTwitter botを作ろう

まずはCPANからNet::TwitterYAML::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でマニュアルを見るなりしてみるといいかもしれませんね.