LoginSignup
17
15

More than 5 years have passed since last update.

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

Posted at

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

まとめ

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

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15