Raspberry Pi | 毎朝、東京の天気予報をしゃべってもらう(お天気Webサービス)
こんばんは、tapunです。
前回、無事に遅延無くRaspberry Pi にしゃべってもらうことに成功したので、次はもうすこし意義のある内容を喋ってもらうべく、まずは「天気予報」を語っていただくことにしました。
天気予報の情報は何をつかうの?
livedoor天気予報が公開しているお天気Webサービス(Weather Hacks)のREST APIを使わせていただきます。
※商用利用は認められていませんので、個人的な利用にとどめましょう。
※お天気Webサービスの仕様はこちらにまとめられています。
どうやって天気予報をしゃべってもらうの?
今回はこちらの記事を参考にpythonで実装していきます。
- 任意のパスに”talk_weather.py”ファイルを作成します。
$ sudo vi talk_weather.py
- 下記のように記載して、保存します。
tail_weather.py
#!/usr/bin/env python # -*- coding:utf-8 -*- import shlex import subprocess from datetime import datetime import urllib2 import json CMD_SAY = 'jsay' def main(): say_datetime() say_weather() return def say_datetime(): d = datetime.now() text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second) text = CMD_SAY + ' ' + text print text proc = subprocess.Popen(shlex.split(text)) proc.communicate() return def say_weather(): city = '130010'; # Tokyo 他の地域の方は、番号を変えてください。 json_url = 'http://weather.livedoor.com/forecast/webservice/json/v1' #API URL weather_text = u'%sの天気は%sです。' temperature_text = u'%sの予想最高気温、%s度、予想最低気温、%s度です。' try: r = urllib2.urlopen('%s?city=%s' % (json_url, city) ) obj = json.loads( unicode(r.read()) ) title = obj['title'] forecasts = obj['forecasts'] # TODAY cast = forecasts[0] temperature = cast['temperature'] today_w_txt = weather_text % (cast['dateLabel'], cast['telop']) today_t_txt = temperature_text % (cast['dateLabel'], temperature['max']['celsius'], temperature['min']['celsius']) # TOMMOROW cast = forecasts[1] temperature = cast['temperature'] tommorow_w_txt = weather_text % (cast['dateLabel'], cast['telop']) # SAY weather_str = title + ' ' + today_w_txt + ' ' + today_t_txt + ' ' + tommorow_w_txt weather_str = weather_str.encode('utf-8') text = '''%s '%s' ''' % (CMD_SAY, weather_str) print text proc = subprocess.Popen(shlex.split(text)) proc.communicate() finally: r.close() return ### Execute if __name__ == "__main__": main()
※この天気予報は朝に聞くイメージなので、気温の情報は「今日」の情報に入れ込みました。
※[2015/12/6追記]上記のスクリプトでは気温でnullが返ってきたときに天気予報も喋ってくれないので、ちょっと工夫したバージョンはこちらです⇒お天気Webサービスは最高/最低気温がnullで返ってくることがある※東京以外の地域の天気予報を取得する場合は、こちらを参考にしてください。
(例)「福岡県・久留米の天気」を取得する場合
下記URLにアクセスしてJSONデータを取得します。
基本URL + 久留米のID(400040)引用:http://weather.livedoor.com/weather_hacks/webservice - 早速ためしてみます。
$ python talk_weather.py jsay 12月5日、1時15分38秒 jsay '東京都 東京 の天気 今日の天気は晴れです。 今日の予想最高気温、15度、予想最低気温、7度です。 明日の天気は晴のち曇です。'
天気予報をしゃべった~~~!!!!
都度情報をとってきてるから、若干2行目の音声は遅れますね。でも許容範囲です。
毎日(定期的に)喋ってもらうための設定
これで、きちんと天気予報を喋ってくれることがわかったので、定期的に声を発するように設定します。
- cron設定ファイルを開きます
$ crontab -e
- 下記の行を追記して、保存します
15 8 * * python /home/user/talk_weather.py
上記の例は、毎朝8:15に天気予報を語りだすように設定しています。
# 8:15まで朝ドラを見ているので、その後に天気予報が流れ出したら良いかな~と!※cronの設定については、こちらの記事が参考になるかと思います。
まとめ
天気予報APIとOpenJtalkを組み合わせることで、定期的な天気予報を音声で伝えてもらえるようになりました!
どんどん出来ることが増えて便利な機械になってきました。
今週末は初めての電子工作にチャレンジしてみたいと思います!
コメントを残す