天気予報情報・Googleカレンダーの予定をpythonで取得する方法 on Raspberry Pi/Mac

f:id:karaage:20170913235655j:plain:w640

Raspberry Pi/Macを秘書代わりにしたい

 毎日天気予報や今日の予定を教えてくれると、Raspberry Piを秘書代わりにできそうですね。というわけで、天気予報情報やGoogleカレンダーの予定をpythonで取得する方法を調べてみました。この後は興味のない人は退屈な宇宙語が続くので、興味ある方のみご覧下さい。

Googleカレンダーの予定通知

Macでの設定方法

 私はPyenvを使ってセットアップしました。

 python2系を想定していますが、多分python3でも動くでしょう。インストールしたライブラリはgoogle-api-python-clientだけです。以下コマンドでインストールできます。

$ pip install google-api-python-client

Raspberry Piでの設定方法

 以下記事を参考に基本的なセットアップを完了させます。

 後は、ターミナルで、以下コマンド実行して必要なライブラリをインストールします。

$ sudo apt-get install python-pip
$ sudo pip install google-api-python-client

Google API登録

 以降は、Mac, Raspberry Pi共通です。pythonでGoogleカレンダーの予定を取得するには、Google API ConsoleでGoogle APIのカレンダーが使えるように登録が必要となります(回数の制限はあるようですが、無料でも使えます)。

 Google Calendar APIの登録方法は、以下サイトが非常に参考になりました。

 お好きなPC(Raspberry PiでなくてOK)で上記サイトの設定をStep1まで実施下さい。

 Step2以降は、本記事参照下さい。

Googleカレンダー予定取得

 続けて、以下コマンド実行下さい。

$ wget https://raw.githubusercontent.com/karaage0703/karaage-echo/master/get_gcal_schedule.py
$ python get_gcal_schedule.py

 実行すると、自動的にブラウザが立ち上がり、以下のような認証画面に遷移しますので、ログインしてOKをクリックしGoogle Calendarへのアクセスの許可を与えます。下記画面はRaspberry Piのものですが、Macでも基本的には同じ要領でOKです。

f:id:karaage:20170908095943p:plain:w640

 認証が完了すると、実行した当日のGoogleカレンダーの予定を取得することができます。デフォルトでは、メインのカレンダーの情報のみ取得されますが、マイカレンダーの情報を取得したい場合は、google calendarにアクセスし、カレンダーの情報から、カレンダーIDを確認します(以下表示のIDです)。

f:id:karaage:20170908100712p:plain:w640

 あとは、get_gcal_schedule.pyの70行目のcalendarIdの値をIDのアドレスに書き換えてやることで、好きなカレンダーの情報を取得できます。私の場合は、家族で共有しているGoogleカレンダーを設定しています。

 家族でGoogleカレンダー共有する方法に関しては、下記記事参照下さい。

 あとは、もう一度プログラムを実行すると、予定が取得できます。

$ python get_gcal_schedule.py 
0730分に
ゴミ出し

 Googleへの認証を解除したくなった場合(他のアカウントで連携したくなったときなど)は、以下にログインして解除しましょう。

ログイン - Google アカウント

天気予報通知

 pythonの環境は、Googleカレンダーの予定通知と同じままでOKです。ターミナルで、以下コマンドでファイルダウンロードしてください。

$ wget https://raw.githubusercontent.com/karaage0703/karaage-echo/master/get_weather.py

 以下コマンド実行すれば、天気予報が表示されます。Livedoor提供の天気予報WebAPIを使っています。

$ python get_weather.py
今日の天気は晴れだよ。 明日の天気は晴れだよ。 今日の予想最高気温、不明。予想最低気温、不明だよ

 基本的には参考サイトの情報のままなのですが、都市を自分の住んでいる都市(名古屋)に変えました。都市のidは以下を参照しました。

livedoor Weather Hacks APIで、お天気データのJSONを取得するための1次細分区(cityタグ)の地域id一覧まとめ | 現役Web屋のアフィリエイト

 プログラム的には、LivedoorのAPIの情報、たまにnullが混じっていて、プログラムが落ちてしまう時があるので少しケアしています。pythonでの2次元配列のチェックの仕方、もっとうまい方法あれば誰かこっそり教えて下さるか、GitHubにPRいただけるとありがたいです。

補足

 本記事、2018年9月時点でそのままでは動かないという指摘がありました。まだ私の方で確認はできていませんが、うまくいかない方は、以下のリベル (id:liberston)さんの記事を参考にしてみて下さい。

まとめ

 pythonを使って、天気予報情報・Googleカレンダーの予定を取得できました。音声認識や音声合成を組み合わせると、自分だけの秘書ロボットができそうですね。というわけでそのうち作っていこうかなと思います。

 今回使用したソフトなどは、以下のGitHubのリポジトリにまとめていますので、よろしければ参考にしてください。

 GitHubって何?って人は以下参照下さい。

参考リンク

Raspberry Piに現在時刻と、天気をしゃべらせてみた(Python): Raspberry Piでやってみた

お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報

Python2で文字列を処理する際の心掛け

Pythonistaなら知ってるオプションパーサ

関連記事

変更履歴

2018/09/30 補足を追記