- @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} };
}