Posted at

NAO(Pepper)に天気を教えてもらう

More than 3 years have passed since last update.

ChoregrapheでPythonボックスの練習がてらに、Livedoorのお天気Webサービスから

現在/明日/明後日の予報をNAO(Pepper)にしゃべらせたいと思います。


Pythonボックスの考え方

先人の知恵をお借りしました!詳しくはこちらを見てください。

Pythonボックスの考え方 (Pepper TechFes技術セッション)


ビヘイビア

スクリーンショット 2016-03-26 22.25.29.png

ボックスの関係はこんな感じです。

ボックス名 
設定

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=のコードは盛岡を設定しています。※他の地域コードについてはこちらから。


まとめ

スマートじゃない感がすごい。