19
20

More than 5 years have passed since last update.

Macに明日の天気予報をアナウンスしてもらう

Last updated at Posted at 2014-08-31

概要

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に発音させるだけの簡単なコードです。

say_weather.rb
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で利用するときは、最終行を変えなきゃいけないですね。

19
20
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
19
20