**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をつけて)返答する
--○○手法は,自分で考える
+得られた情報をログに残す