Webサービス即日開発の実践2(Perl)〜テストスクリプト作成

Catalystが入ったので、Twitterに検索語を投げて検索結果を取得するテストスクリプトを作成し、フィジビリティを確認します。

こちらもまずは本の通りに書いてみましたが、エラーに。本が2010年のものであり、前提としているTwitterAPIが1.0のため、認証周りがだめでした。

そこで以下のサイトを参照にトライ&エラーを繰り返し、なんとか検索語に対する結果を取得できました。
Twitter API
https://dev.twitter.com/docs/api/1.1/get/search/tweets
Net::Twitter
http://search.cpan.org/~mmims/Net-Twitter-4.01000/lib/Net/Twitter.pod
ブログ類
http://www.fukudat.com/wiki/ja/PerlによるTwitter_botの作り方
http://ktz.sblo.jp/article/66724679.html
http://tech.voyagegroup.com/archives/465806.html

Perl(というかスクリプト言語)自体が初めてであり、コーディングの学習も兼ねた実践のため、文字コードにも苦戦しました。なので丁寧に解説してあった、Voyage Groupさんのブログ記事はとても参考となりました。
書いたコードは下記の通りで、実行時に引数で指定した文字列を検索し、結果を標準出力します。まだ「binmode STDOUT, ":utf8";」はおまじないで書いてしまっているので、調べて不要なら消したい。


=======================
#!/usr/bin/perl
use strict;
use Net::Twitter;
use utf8;
binmode STDOUT, ":utf8";
use Encode qw(decode_utf8);

my $consumer_key = "xxx";
my $consumer_secret = "xxx";
my $access_token = "xxx";
my $access_token_secret = "xxx";

my $nt = Net::Twitter->new({
traits => [qw/API::RESTv1_1/],
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
access_token => $access_token,
access_token_secret => $access_token_secret
});

do_search($_) foreach @ARGV;

sub do_search {
my $term = shift;
my $r = $nt->search({q=>decode_utf8($term), lang=>"ja", count=>100});
for my $status ( @{$r->{statuses}} ) {
print "$status->{text}\n";
}
}
=======================