簡単な決められた単語を発言するBOT
a.txtの内容を上から順に発言するBOT
とりあえず簡単なBOTは作れるようになった
これで動いているBOT
http://twitter.com/gokinyan_bot
#!/usr/bin/env perl use strict; use warnings; use Net::Twitter; use utf8; # 文字列をutf8として扱う use open IO => ":utf8"; my $consumer_key = 'xxxxxx'; my $consumer_key_secret = 'xxxxxxxxxxxxxxxxxxx'; my $access_token = 'xxxxxxxxxxxxxxxxx'; my $access_token_secret = 'xxxxxxxxxxxxxxxxxxx'; my $nt = Net::Twitter->new( traits => ['API::REST', 'OAuth'], consumer_key => $consumer_key, consumer_secret => $consumer_key_secret, ); $nt->access_token($access_token); $nt->access_token_secret($access_token_secret); while(1){ open(FH, "<a.txt"); #a.txtの内容を一行ずつ発言する my @list = <FH>; my $data_line; foreach $data_line( @list ) { #evalを使って異常終了を回避。 eval{ my $res = $nt->update({ status => "$data_line" }); }; sleep(rand(600));#10分以内に発言。待つ時間をランダムに } }
ランダムに発言させたかったら
my @list2; while(@list){ push(@list2, splice(@list, rand @list, 1)); }
とか追加したり
時刻を発言させたかったら
my $times = time(); my ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times); my $res = $nt->update({ status => $hour."時".$min."分だにゃん♪" });
とか書けばいい。
- -
update 2010.10.27
@で着た発言をRTする機能を付与しました。
以下のように動いてたりします。
my $since_id = 1; my $list; while(1){ eval{ my $mentions = $nt->mentions({since_id=>$since_id, count=>'20'}); $since_id = @{$mentions}[0]->{'id'}; foreach $list(@{$mentions}){ my $name = $list->{'user'}->{'screen_name'}; if($name ne "gokinyan_bot"){ my $res = $nt->update({ status => "にゃにゃ/// RT @".$name." ".$list->{'text'} , in_reply_to_status_id => $list->{'id'} }); } } }; sleep(60);
- -
update 2010.11.24
各発言をサブルーチンで実行
forkさせていたのが、
Cannot fork: Resource temporarily unavailable at~
と、エラーを吐いて異常終了するのでtrycatchしようとしたら上手く動かなかったので
evalを使用
sub my_post{ my $nt = $_[0]; my $post = $_[1]; eval{ $nt->update({ status =>$post }); }; } sub my_fav{ my $nt = $_[0]; my $fav = $_[1]; eval{ $nt->create_favorite($fav); }; } sub my_rep{ my $nt = $_[0]; my $rep = $_[1]; my $rep_id = $_[2]; eval{ $nt->update({ status =>$rep, in_reply_to_status_id => $rep_id }); }; } sub my_rt{ my $nt = $_[0]; my $rt = $_[1]; eval{ $nt->retweet($rt); }; }
参考URL:
Net::Twitter
http://search.cpan.org/~mmims/Net-Twitter-3.14001/lib/Net/Twitter.pod