**Twitter bot を作る [#o4bbd142] ***参考サイト [#oaaa53ee] +[[PerlによるTwitter botの作り方>http://www.fukudat.com/wiki/ja/Perl%E3%81%AB%E3%82%88%E3%82%8BTwitter_bot%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9]] +[[twitter botをつくってみる。(3) - botのプログラミング>http://cuddlecore.blog.shinobi.jp/Entry/6/]] +[[PerlでTwitterクライアント製作メモ その1>http://d.hatena.ne.jp/tohky/20100822/1282429132]] +[[CPAN string-similarity>http://search.cpan.org/~mlehmann/String-Similarity-1.04/Similarity.pm]] +[[UTF-8のフラグ>http://blog.xaxxi.net/2009/12/04/cannot-decode-string-with-wide-characters-%E3%81%AE%E7%9B%B4%E3%81%97%E6%96%B9/]] +[[UTF-8のフラグ>http://d.hatena.ne.jp/libkazz/20070605/1181026439]] ***Perl CPAN Net::Twitter を利用する OAuthを利用する [#e089b4fe] +twitter bot用の(捨て)アカウントを作成する --https://twitter.com/seana_bot +OAuth に必要な情報を得る --https://dev.twitter.com/apps/new Consumer key Consumer secret Access token Access token secret +[[参考サイト>http://www.fukudat.com/wiki/ja/Perl%E3%81%AB%E3%82%88%E3%82%8BTwitter_bot%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9]]をコピペして,実行してみる #!/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::REST API::Search/], consumer_key => $consumer_key, consumer_secret => $consumer_secret, access_token => $access_token, access_token_secret => $access_token_secret}); #do_search($_) foreach @ARGV; 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; 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"; } +cron(定期的にコマンドやプログラムを実行する) --crontab -e ---http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html ---http://www.server-memo.net/tips/crontab.html --例えば ... 1-59/2 * * * * /usr/bin/perl /home/(...)/twitter.pl --&color(red){注意...Twitterは同じ内容の投稿を続けてできない仕様になっている.}; *** 問題 [#j01e9360] +Wide character in ... ***自分のボット [#j9b1b5de] -しいなちゃんぼっと https://twitter.com/seana_bot 今後,まじめに観光案内ボットになる予定 今後,まじめに観光案内をする予定 -うらしいなちゃんぼっと https://twitter.com/kmry_bot 卒論のボツになったテーマを実装してみた ちょっと卑猥な印象を受ける単語に変換して返信するボット Twitter にもかかわらず,よく聞き取れないという...設定 うらしいなちゃんは,「え,○○って言ったの?」と聞き返す |しいなちゃん|うらしいなちゃん| |&ref(seana-chan.png,,20%);|&ref(seana-chan-2.png,,20%);| ***【今後】自分宛のツイートを取得して,解析して,返信ツイートをする [#scd624db] +自分宛のツイートがあるのか定期的に確認する --$ ./twitter-search.pl "kmry_bot" ---seana_bot (on Thu, 13 Dec 2012 04:49:00 +0000) @kmry_bot 今日は雪がたくさん積もっていたので雪かきをしてきました。 ---kmry_bot (on Thu, 13 Dec 2012 03:48:39 +0000) てすと投稿です --$ ./twitter-search.pl "@kmry_bot" ---seana_bot (on Thu, 13 Dec 2012 04:49:00 +0000) @kmry_bot 今日は雪がたくさん積もっていたので雪かきをしてきました。 +自分宛のツイートの内容があれば,内容を次のように分ける --相手のアカウント名 --本文 --URL --ハッシュタグ +上記から,本文のみを抽出し,形態素解析,構文解析を行う +○○手法を用いて,(相手のIDをつけて)返答する --○○手法は,自分で考える +得られた情報をログに残す