雑談対話用の Python クライアント作った

リフレッシュ休暇中で、出かけようと思ったけど天気悪いし、寒いし、雪降るし…なので docomo が提供している APIPython クライアントを作った。


元ネタ。

docomoが提供している雑談対話APIを利用し、docomoruというライブラリを使いながらBOTと雑談する方法について説明します。

DocomoruでBOTと雑に会話する - Qiita

DoCoMo が雑談対話APIというのを出していたのでサクッっとlingr botを書いてみた。

Big Sky :: golang で vimgirl bot を書いた。


現状雑談対話 API のライブラリだけ。
気が向けば他のも作るかも。
GitHub - heavenshell/py-doco: Client library for docomo API written in Python.

使い方

>>> from doco.client import Client
>>> c = Client(apikey='YOUR_API_KEY')
>>> res = c.send(utt='hello', apiname='Dialogue')
>>> print(res)
{"utt":"はろー","yomi":"はろー","mode":"dialog","da":"30","context":"7DGIKMpQDE0zrQrYFAMqdw"}
>>> print(c.last_response.status_code)
200
>>> print(c.last_response.headers)
{'Content-Length': '99', 'Connection': 'keep-alive', 'Content-Type': 'application/json;charset=UTF-8', 'Date': 'Wed, 17 Dec 2014 05:28:28 GMT', 'asyncServiceInvoke': 'false'}

こんな感じで使う。
コンストラクタの引数に | docomo Developer support | NTTドコモ に記載されているリクエストパラメータを付与する事が出来る。

>>> from doco.client import Client
>>> user = { 'nickname': 'ふー', 'nickname_y': 'フー', 'bloodtype': 'O', 'birthdateY': 1997, 'birthdateM': 12, 'birthdateD': 31 }
>>> c = Client(apikey='YOUR_API_KEY', user=user)

あるいは send に渡す事ができる。

>>> from doco.client import Client
>>> user = { 'nickname': 'ふー', 'nickname_y': 'フー', 'bloodtype': 'O', 'birthdateY': 1997, 'birthdateM': 12, 'birthdateD': 31 }
>>> c = Client(apikey='YOUR_API_KEY')
>>> c.send(utt='こんにちは', apiname='Dialogue', **user)

cli アプリケーション

ついでにサンプルとして、cli アプリケーションとして、インタラクティブシェルなものを作ってみた。

$ python examples/dialogue_cli.py -i
Welcome to docomo dialogue cli.
^D to exit.
>>> こんにちは
はろー
>>>

適当に会話してくれる。

キャラ

キャラ設定もできる。

$ python examples/dialogue_cli.py -i -t 30
Welcome to docomo dialogue cli.
^D to exit.
>>> げんき?
元気でちゅ
>>>

20 が関西弁で、30 が赤ちゃん。

しりとり

雑談対話 API には前の会話を引き継ぐ。
その機能として「しりとり」機能がある。

$ python examples/dialogue_cli.py -i -s
Welcome to docomo dialogue cli.
^D to exit.
>>> しりとり
リング
>>> グッズ
頭痛
>>> 海
道のり
>>> リンゴ
ゴリラ
>>> ラッパ
パスポート
>>>

ちゃんと「しりとり」してくれる。

実装

実装としては API ごとにクラスを作って、Client() に register_api というのがあるので、そいつ経由で登録して、send() を呼ぶ感じ。
デフォルトでは雑談対話の Dialogue を登録してある。


遊ぶネタが出来たので、Slack と連携させて bot を飼うかなー。