差分

提供: fukudat.net
ナビゲーションに移動検索に移動
ページの作成:「PerlのNet::Twitter packageを使用してTwitterを利用するbotの作り方.Category:How-To == インストール == CPANからNet::Twitterをインストー...」
PerlのNet::Twitter packageを使用してTwitterを利用するbotの作り方.[[Category:How-To]]

== インストール ==
CPANからNet::Twitterをインストールする.
<pre>
$ cpan Net::Twitter
</pre>
Net::Twitterは多くの外部packageに依存している[http://deps.cpantesters.org/?module=Net::Twitter;perl=latest].
必要なpackageは自動的にインストールされるはずだが,失敗することもある. その場合はエラーメッセージを見て,不足しているpackageを同様にcpanからインストールする.

例えばDateTimeが足りなくてエラーが出ていたら,
<pre>
$ cpan DateTime
</pre>
を実行すればよい.

== Net::Twitterを使用するScriptの作成 ==
つべこべ説明せずに,例を示す.

↓はキーワード検索する例である. (ファイル twitter-search.pl にセーブしておく).
<pre>
#!/usr/bin/perl
use strict;
use Net::Twitter;
use utf8;
binmode STDOUT, ":utf8";

my $consumer_key = "<<<YOUR OWN consumer key>>>";
my $consumer_secret = "<<<YOUR OWN consumer secret>>>";
my $access_token = "<<<YOUR OWN access token>>>";
my $access_token_secret = "<<<YOUR OWN access token secret>>>";

my $handle = Net::Twitter->new({
traits => [qw/OAuth API::RESTv1_1 API::Search/],
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 @results;
my $rs = $handle->search({q=>$term, lang=>"ja", page=>1, rpp=>100});
if (ref $rs eq 'HASH' && exists $rs->{results}) {
if (@{$rs->{results}}) {
print_post($_) foreach @{$rs->{results}};
}
}
}

sub print_post {
my $t = shift;

print "$t->{from_user} (on $t->{created_at}) $t->{text}\n";
}
</pre>
しかし,まだ実行できない."<<<YOUR OWN...>>>" の部分を↓で示す方法で得られる文字列に置き換える.

== アプリケーションの登録 ==
Twitterは以前はBasic Authをサポートしていたらしいが,現在は廃止してしまった. ここではOAuthを使用する. このためにはTwitterのAPIを使用するアプリケーションは,Twitter developer portalでアプリケーションを登録して,
* consumer key
* consumer secret
* access token
* access token secret
を手に入れる必要がある.以下にその手順を示す.
* ブラウザで http://dev.twitter.com/ を開いて,twitter accountでSing inする.
* Create an Appリンクを押して,アプリケーションの登録に進む.
* 登録するアプリケーションの詳細を入力する.
** アプリケーション名: 適当に名づける
** アプリケーションの説明: アプリケーションの説明書き
** アプリケーションのウェブサイトURL: アプリケーションのユーザが見に行くページがったらそのURLを指定する.
** 所属会社/団体: もしあれば入力する
** アプリケーションの種類: Perlスクリプトの場合は クライアントアプリケーション を選択する.
** 標準のアクセスタイプ: 読み書きするなら Read & Write を,読むだけなら Read-only を選択する.
** アプリケーションのアイコン: アイコンイメージがあったら指定する.以上の設定はどれも後からでも変えられる.
** 最後に[[wiki:Captcha|Captcha]](変形した文字列)を読んだ通りにインプットしたら,アプリケーションを登録ボタンを押して登録を完了する.
すると,登録したアプリケーションの情報が掲載されているページが開く.(このページは,後でTwitter developer portalからYour appsボタンを押して登録したアプリケーションのページを選ぶといつでも表示できる.)

このページの OAuth 1.0a Settings セクションから,
* Consumer key
* Consumer secret
をコピーして,スクリプトの中に埋め込む.

さらに,をクリックして表示されるページから,
* Access Token (oauth_token)
* Access Token Secret (oauth_token_secret)
をコピーして,スクリプトの中に埋め込む.

以上で完成.

== テスト実行 ==
スクリプトを実行してみる.
<pre>
$ chmod +x twitter-search.pl
$ ./twitter-search.pl "radioactive"
</pre>

すると,キーワード (radioactive) を含む呟きを検索してその結果が100件出力されれば成功である.

== 呟くbot ==
呟くにはNet::Twitterのupdateメソッドを使う.例えば,
<pre>
...
my $msg = "メッセージ";
my $handle = Net::Twitter->new({
traits => [qw/OAuth API::REST/],
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
access_token => $access_token,
access_token_secret => $access_token_secret});
});
my $ret = $handle->update({status=>$msg});
print "Cannot post!!" unless $ret;
</pre>
こんな感じ.

詳しくは,オンラインマニュアル または
$ perldoc Net::Twitter
でローカルのマニュアルを参照.

== 参考文献 ==
* [http://www.ibm.com/developerworks/jp/linux/library/l-perl-twitter/index.html Perlを使用してTwitterを実務に利用する (IBM developerWorks)] ... 少し古くて,今は廃止されてしまったBasic認証を使用している.
* [http://dev.twitter.com/ Twitter developers portal] | [http://apiwiki.twitter.com/w/page/22554648/FrontPage Twitter API Wiki]
* [http://search.cpan.org/dist/Net-Twitter/ CPAN Net::Twitter]
* [[wiki:OAuth|OAuth]]
* [[Nowcast|この方法で作られた天気予報bot]]
* [[Gm-10|この方法で作られた放射線量bot]]

案内メニュー