perl -MCPAN -e shell
とやると cpanのプロンプトになるので、
install Net::Twitter
とやればいいのだが、やたら長い上に最後にエラーになる。 ダラダラと出ているログは読んでられないのでまずサーチする。 失敗している人が散見され、いろいろ回避策が公開されていたがどれを試してもダメ。 結局、ログを見て、can't locate といわれているmoduleを片っ端から入れていった。 Math::Round とか。 あと、opensslのライブラリ(?)がないみたいなことを言われるので
yum install -y openssl-devel
をやった。
cpanのモジュールは依存関係にあるものを勝手にいれるんじゃなかったっけ? そんな親切なのはppm installだけなのか?
bot
use strict;
use warnings;
use utf8;
use Encode;
use Net::Twitter;
binmode STDOUT, ':utf8';
my $twit = Net::Twitter->new(
traits => [qw/API::REST OAuth WrapError/],
consumer_key => 'YOUR_CONSUMER_KEY',
consumer_secret => 'YOUR_CONSUMER_SECRET',
ssl => 1,
);
$twit->access_token ('YOUR_ACCESS_TOKEN');
$twit->access_token_secret('YOUR_ACCESS_TOKEN_SECRET');
while (1){
my $line;
open(my $file, "<tweets.txt");
rand($.)<1 and $line = $_ while <$file>;
close $file;
my $decoded = Encode::decode('utf8', $line);
$twit->update($decoded);
sleep 3600;
}
exit;
テキストファイルからランダムに1行ずつ選んでツイートする、簡単なボット。 ちょっと手間取ったのは日本語の扱い。 tweets.txt は utf8で保存してあるのだが、なぜかそのまま Net::Twitterに渡すと文字化けする。 リテラルは化けない。 いろいろ調べて、utf8をいったんデコードして渡すという、ちょっと釈然としないやり方で解決。