概要
RaspberryPiにスピーカーを繋げて、天気予報を喋ってもらう用のスクリプトを、とりあえずMacで書いたのでメモ。say
コマンドで話してもらう。
天気予報を取得してくるのには、Weather Hacks - livedoor 天気情報のAPIを利用する。単純な作りなので、とりあえずこちらを採用。今回は利用しなかったが、OpenWeatherMapの利用も検討した。こちらも良さ気。
sayコマンドを日本語化
say
はデフォルトだとアメリカ人の声に設定されており、$ say 'ほげほげ'
などとTerminalで実行しても、なにも言ってくれない。
なので、「システム環境設定」 -> 「音声入力と読み上げ」 -> 「テキスト読み上げ」 に行き、「システムの声」セレクトボックス中の「カスタマイズ」を選択。各国の人のボイスがダウンロードできる。日本語には「Kyoko」(女)と「Otoya」(男)という2種類が選択できるので、前者を選択。ダウンロードが完了すれば、say
で日本語が読める(逆に英語が読めなくなる...)
スクリプト
http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
こちらにアクセスすれば分かるが、Weather HacksのAPIからは、今日・明日・明後日の天気や、詳細な天気の説明(ニュースで読まれるようなやつ)が取得できる。
これをMacに発音させるだけの簡単なコードです。
require 'net/http'
require 'json'
# 東京都 東京 の天気を取得、他の地域の場合はパラメータcityの値を変える
uri = URI('http://weather.livedoor.com/forecast/webservice/json/v1?city=130010')
weather_data = JSON.parse(Net::HTTP.get(uri))
tomorrow_forecast = weather_data['forecasts'][1]
forecast_message = "#{tomorrow_forecast['dateLabel']}の天気は#{tomorrow_forecast['telop']}です。" \
"最高気温は#{tomorrow_forecast['temperature']['max']['celsius']}度、" \
"最低気温は#{tomorrow_forecast['temperature']['min']['celsius']}度です。"
description = weather_data['description']['text'].gsub(/\n/, '')
`say "#{forecast_message}" #{description}`
$ ruby say_weather.rb
# 声が流れる
Macを起動してないといけないけど、cronに登録したりすれば定時予報に。
RaspberryPiで利用するときは、最終行を変えなきゃいけないですね。