「PerlによるTwitter botの作り方」の版間の差分
(→参考文献) |
(→参考文献) |
||
125行目: | 125行目: | ||
* [http://dev.twitter.com/ Twitter developers portal] | [http://apiwiki.twitter.com/w/page/22554648/FrontPage Twitter API Wiki] | * [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] | * [http://search.cpan.org/dist/Net-Twitter/ CPAN Net::Twitter] | ||
− | * [[wiki:OAuth|OAuth]] | + | * [[wiki-en:OAuth|OAuth]] |
* [https://twitter.com/nowcast_azbjbn この方法で作られた天気予報bot] | [[Nowcast|詳細]] | * [https://twitter.com/nowcast_azbjbn この方法で作られた天気予報bot] | [[Nowcast|詳細]] | ||
* [https://twitter.com/mita_rad この方法で作られた放射線量bot] | [[Gm-10|詳細]] | * [https://twitter.com/mita_rad この方法で作られた放射線量bot] | [[Gm-10|詳細]] |
2020年5月24日 (日) 16:04時点における版
PerlのNet::Twitter packageを使用してTwitterを利用するbotの作り方.
インストール
CPANからNet::Twitterをインストールする.
$ cpan Net::Twitter
Net::Twitterは多くの外部packageに依存している[1].
必要なpackageは自動的にインストールされるはずだが,失敗することもある. その場合はエラーメッセージを見て,不足しているpackageを同様にcpanからインストールする.
例えばDateTimeが足りなくてエラーが出ていたら,
$ cpan DateTime
を実行すればよい.
Net::Twitterを使用するScriptの作成
つべこべ説明せずに,例を示す.
↓はキーワード検索する例である. (ファイル twitter-search.pl にセーブしておく).
#!/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"; }
しかし,まだ実行できない."<<<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 を選択する.
- アプリケーションのアイコン: アイコンイメージがあったら指定する.以上の設定はどれも後からでも変えられる.
- 最後にCaptcha(変形した文字列)を読んだ通りにインプットしたら,アプリケーションを登録ボタンを押して登録を完了する.
すると,登録したアプリケーションの情報が掲載されているページが開く.(このページは,後でTwitter developer portalからYour appsボタンを押して登録したアプリケーションのページを選ぶといつでも表示できる.)
このページの OAuth 1.0a Settings セクションから,
- Consumer key
- Consumer secret
をコピーして,スクリプトの中に埋め込む.
さらに,をクリックして表示されるページから,
- Access Token (oauth_token)
- Access Token Secret (oauth_token_secret)
をコピーして,スクリプトの中に埋め込む.
以上で完成.
テスト実行
スクリプトを実行してみる.
$ chmod +x twitter-search.pl $ ./twitter-search.pl "radioactive"
すると,キーワード (radioactive) を含む呟きを検索してその結果が100件出力されれば成功である.
呟くbot
呟くにはNet::Twitterのupdateメソッドを使う.例えば,
... 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;
こんな感じ.
詳しくは,オンラインマニュアル または $ perldoc Net::Twitter でローカルのマニュアルを参照.