雑談対話をRubyで書いてみました。
require 'httpclient'
require 'json'
require 'ostruct'
class Dialogue
def say(msg)
body = JSON.generate(utt: msg, context: @context.nil? ? "": @context)
clnt = HTTPClient.new
uri = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=(Your API Key)'
res = clnt.post_content(uri, body, {'Content-Type' => 'application/json'})
%w(utt yomi mode da context).inject(OpenStruct.new) { |result, key|
result.send(key + "=", JSON.parse(res)[key])
@context = JSON.parse(res)[key] if key == "context"
result
}
end
end
感想とかです。
・@context.nil? ? "": @context のところはこれでいいんです。?は多くないです。
nil?()というメソッドのあとに条件演算子(Rubyではこう呼ぶそうです。C言語だと三項演算子と呼んでいたような?)が続いている感じです。
・HTTPClientだけはgem install httpclientをしたのをおぼえています。その他のものはRubyをインストールしたときに最初から入っていたのだとおもいます(たぶん)。
・OpenStruct(requireのところは、'ostruct')はすごいです。
カルチャーショックを受けました。
たとえば
o = OpenStrcut.new
o.title = "タイトル"
puts o.title
と書くと、titleなんてものは事前に作った覚えも無いのに、自動的に下記のようなメソッドを作ってくれる(※)ようです。
(※)私の理解です。本当はもっと複雑なことをしていただいているのかもしれません。
def title=(title)
@title = title
end
def title
@title
end
これによりあたかも、titleフィールド(という言い方がよいのかどうかは微妙な気がしますが)に値を書き込んだり、読み込んだりしているようなコードを書けるようです。
0 件のコメント:
コメントを投稿