- @oshiete_twit に向けてのつぶやきを収集
- テキストをまず特徴語抽出APIに投げてキーワードを拾ってくる
- キーワードをYahoo!知恵袋APIに投げて関連しそうな解決済みの質問を取ってくる
- その中からランダムで答えを一個に絞る
- さらにその最初の文を最初のつぶやきの答えとする
- ボットがつぶやく
ってな具合のYahoo!APIとのマッシュアップなTwitterボットを作ってみたよ! @oshiete_twit に向って質問を投げてかけてみて!
なかなかかわいいやつだからかわいがってね! もうねこういう返事とかフイタよ!
- Twitter / 教えてTwit!: そうです RT @yusukebe : @oshie ...
- Twitter / 教えてTwit!: キンカンは、株式会社金冠堂が製造販売元です RT @ ...
- Twitter / 教えてTwit!: ご心配なさらないでください RT @nyontan ...
以下、コーディング例
use strict; use warnings; use Net::Twitter; use List::Util qw(shuffle); use XML::Simple; use WebService::Simple; use WebService::Simple::Parser::XML::Simple; use Encode; use utf8; # local settings my $user = 'username'; my $password = 'password'; my $appid = 'myappid'; my $nt = Net::Twitter->new( traits => [qw/API::REST/], username => $user, password => $password ); my $xs = XML::Simple->new( ForceArray => ['Result', 'Question'] ); my $parser = WebService::Simple::Parser::XML::Simple->new( xs => $xs ); my $yahoo_keyword = WebService::Simple->new( base_url => 'http://jlp.yahooapis.jp/KeyphraseService/V1/extract', params => { appid => $appid }, response_parser => $parser, ); my $yahoo_question = WebService::Simple->new( base_url => 'http://chiebukuro.yahooapis.jp/Chiebukuro/V1/questionSearch', params => { appid => $appid }, response_parser => $parser, ); for my $tweet ( @{ $nt->mentions } ){ my $q_text = $tweet->{text}; if( $q_text =~ /RT/ ){ next; } $q_text =~ s/\@oshiete_twit\s//; my $a = get_answer( $q_text ); my $a_text = $a->{text}; if( $a_text && $a_text =~ m/(.+?)(?:。|.)/ ){ $a_text = $1; } if( $a_text ){ my $text = "$a_text RT \@$tweet->{user}->{screen_name} : $tweet->{text}"; warn $text; $nt->update($text); } } sub get_answer { my $sentence = shift; my $res = $yahoo_keyword->get( { sentence => $sentence } ); my $ref = $res->parse_response(); my @keywords; map { push( @keywords, $_->{Keyphrase} ) } @{ $ref->{Result} }; my $keyword = join( ' ', @keywords ); $res = $yahoo_question->get( { query => $keyword, condition => 'solved' } ); $ref = $res->parse_response(); my $q = shuffle( @{ $ref->{Result}->[0]->{Question} } ); return { text => $q->{BestAnswer}, url => $q->{Url} }; }