LoginSignup
2
2

More than 3 years have passed since last update.

[Perl][API]Chaplusを使い倒すPerlモジュールを書いた

Last updated at Posted at 2020-03-12

Botが雑談に応えられるようにするWEB APIを公開してみた話【個人開発】で紹介されているChaplusを試してみたくてPerlでAPIモジュールを書いてみた。CPANリリースはまだ。

使い方


use API::Chaplus;
my $api    = API::Chaplus->new( apikey => 'your_key' );
my $answer = $api->bestResponse( utterance => '調子どう?' );
print $answer;    # お返事が表示される

使い倒し方

APIドキュメントを熟読して様々なオブジェクトを盛り込んだ。
Chaplus-APIが用意しているオブジェクトの構造をPerlオブジェクトとして再現したのがこちら
以下は抜粋。

use API::Chaplus::Request;
my $pair = API::Chaplus::UtterancePair->new(
    utterance => '肩凝った', 
    response => '適度に運動しないとね',
);

my $addition = API::Chaplus::Request::Addition->new(       
    options        => [qw(疲れた 肩凝った)],
    utterancePairs => $pair,                    # auto optimize to [$pair] by Mouse Coercion
    ngwords        => [ "ため息", "やめてしまえ" ],
);

my $state = API::Chaplus::Request::AgentState->new(
    agentName => 'エージェント',
    tone      => 'kansai',
    age       => '14歳',
);

my $req =  use API::Chaplus::Request->new(
    username   => '太郎',
    utterance  => '調子はどう?',
    agentState => $state,
    addition   => $addition,
);
my $api    = API::Chaplus->new( apikey => 'your_key' );
my $answer = $api->bestResponse($req);
print $answer;    # お返事が表示される

リクエストオブジェクトをAPI読み込みメソッドに食わせると、送信するJSONを自動的に生成する。

苦労した点

公式ドキュメントには特に記載がないのだが、日本語文字列は全てURLエンコードしてから渡す必要がある模様。←私の勘違い。してもしなくても正しいリクエスなら通る。
リクエストのJSONを生成する際に、ツリー型構造のPerlオブジェクトを単なる多重ハッシュに変換する処理を行う必要がある。ので、思いつきで無茶な魔改造を施し、ソースがえげつないことになっている。ソースコードをスッキリさせることに成功した。

今後

・テストの項目を増やして細分化したい
・レスポンスの中に、keywordなどのドキュメントにまだ載っていない項目があるので、いずれフォローしたい。

プルリクエストは大歓迎です

感想

  • 形態素解析をアウトソースできる上に雑談まで自動で提供するとか神か
  • Chaplusの返信してくる内容に感心することがしばしば。
  • どうせPerlだからこの記事は伸びないんでしょ?
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2