リクルートのTalk APIをubuntuとpythonで使ってみた
リクルートがAPIを公開したので使ってみる
今日、こんなハッカソンに参加してきました。(会社以外のエンジニアと交流するのは久々で楽しかったです)
www.xn--78j2ayab5gxloexbxg1q.com
機械学習 × ハッカソンで、機械学習を使ったWebアプリをチームで作るのですが、機械学習を一から構築するのも大変なのでAPI使ったらいいですよーってな感じでリクルートのAPIとGoogleのAPIのURLがサイトに貼っつけてありました。
私のチームではAPIは使用しなかったのですが、せっかくなのでハッカソンが終わった後に使ってみることにしました。
ちょっとだけチャットボットに興味があったので、選んだのはリクルートのTalk API。
リクルートのサイト。
使い方がなんせ簡単
APIkeyというのをサイトで取得する必要がありますが、それを含めてもとっても簡単でした。
使い方は、Talk APIのあるサーバにPOSTでメッセージ付きのリクエストを送ると、レスポンスにメッセージの返信付きで返ってきます。
curlコマンドで、メソッドはPOST形式、そして、POSTの中身にapikeyと、queryというパラメーター名で送りたいメッセージを送信します。
#リクエスト curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう" #レスポンス {"status": 0, "message": "ok", "results": [{"perplexity": 0.07743213382788067, "reply": "\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059"}]}
!!??。
レスポンスのメッセージの返信はreplyに格納されているはずですが、そこがなぜか文字コード。笑
見た感じASCIIコードですが、いちおうチェック。
#text.txtにレスポンスを出力。 curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう" > text.txt #何のエンコード方式かチェック file text.txt
チェックした結果、やっぱりASCII。
エラーの9割は文字コードとはよく言ったものです。
replyをUTF-8に変換するのが手っ取り早そう。
レスポンスはjson形式なので、pythonで開いてUTF-8に変換するかってな感じでコードを書きました。
#text.jsonにレスポンスを出力。(json形式) curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう" > text.json #text.jsonを開く import json f = open("text.json") data = json.load(f) f.close() print(data) #この時点でprintしてみると... {'message': 'ok', 'results': [{'reply': 'おはようございます', 'perplexity': 0.07743213382788067}], 'status': 0}
??。
あれ?まだASCIIからUTF-8に変換してないのに、replyが見れる...
ここまでやって、なんかlinuxのコマンドでリクエスト送って、pythonで開くの面倒だなぁ、pythonで全部書いちゃうかとか思っていたら、なんとpythonライブラリで提供されていることが判明したので、そちらも掲載します。
pythonでtalk APIを使ってみる
pipで入ります。
pip install pya3rt
さっそくコードを書きます。
import pya3rt apikey = "AAAAAAAAAAAAAAAAAAAAAA" client = pya3rt.TalkClient(apikey) print(client.talk("おはよう")) #{'message': 'ok', 'results': [{'reply': 'おはようございます', 'perplexity': 0.07743213382788067}], 'status': 0} print(client.talk("ギャンブル大好き")) #{'message': 'ok', 'results': [{'reply': '良さそうですね', 'perplexity': 2.592985171811111}], 'status': 0} >>>
おはようにはおはようございますを。
ギャンブル大好きには良さそうですねを。
ハッカソンで使えばよかったなと思えるほど、使い方は簡単でした。
まとめ
チャット形式ってすごく良いUIだと個人的に思っているので、いずれ自分が作っているwebアプリにもチャット機能を追加したいなぁなんて思っていますが、きっとまだまだ先のことでしょう。
以上終わり!