ChoregrapheでPythonボックスの練習がてらに、Livedoorのお天気Webサービスから
現在/明日/明後日の予報をNAO(Pepper)にしゃべらせたいと思います。
##Pythonボックスの考え方
先人の知恵をお借りしました!詳しくはこちらを見てください。
Pythonボックスの考え方 (Pepper TechFes技術セッション)
ボックス名 | 設定 |
---|---|
Set Language | Language: Japanese |
Speech Reco. | Word list: いまのてんき;あしたのてんき;あさってのてんき;おしまい |
Switch Case | Speech Reco.のWord listに指定した文字列を、""(ダブルクォーテーション)で囲んで各行にセット |
Say | ボックスをダブルクリックして、Language(Japanese)と、任意のテキストをセット |
Python Script | お天気Webサービスから天気の取得をここに書きます |
Say Text | 取得した天気予報用と、終了用のボックス2つ |
###Python Script
####準備
デフォルトのPython Scriptでは、すべての入力、出力が バン
になっているため、
ボックスを右クリック > ボックスを編集 を選択し、入力のonStartと出力のonStoppedのTypeを 文字列
にします。
####スクリプト
もっと簡単に書けそうな気もしますが、とりあえず動いたコードを。。。
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
pass
def onUnload(self):
pass
def onInput_onStart(self, question):
import urllib2, json
url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=030010"
r = urllib2.urlopen(url)
root = json.loads(r.read())
if question == "いまのてんき":
result = "いまのてんきは、" + root['forecasts'][0]['telop'].encode('utf8') + "です。"
self.onStopped(result)
elif question == "あしたのてんき":
result = "あしたのてんきは、" + root['forecasts'][1]['telop'].encode('utf8') + "です。"
self.onStopped(result)
elif question == "あさってのてんき":
result = "あさってのてんきは、" + root['forecasts'][2]['telop'].encode('utf8') + "です。"
self.onStopped(result)
else:
self.onStopped(question)
def onInput_onStop(self):
self.onUnload()
city=
のコードは盛岡を設定しています。※他の地域コードについてはこちらから。
##まとめ
スマートじゃない感がすごい。