leopardgeckoのブログ

Macの関連事項など

GeekToolでお天気表示 最新版

f:id:leopardgecko:20191204170853p:plain

この記事は必要に応じて適宜更新します。下の更新履歴も参照してください。
最終更新日:2020/7/16

はじめに

GeekToolとはMacのデスクトップをカスタマイズできるソフトです。デスクトップに色々なものを表示できて便利なのですが、スクリプトが公開されているものでなければ自分でスクリプトを書かなければなりません。

天気を表示するスクリプトはネットで公開されているものは情報が古くて今では使えないものが多い上に自力で作るとなるとHTMLソースを解析する必要があるなど結構大変な作業が必要になります。そこでこちらではAccuWeatherという天気予報サイトを利用したスクリプトをご紹介します。

私自身も使っているものなので、天気予報サイトの仕様変更などがあった場合にはそれに対応すべく適宜更新していく予定です。ただしあくまで素人がやっていることですので、力尽きた時にはご容赦ください。
(GeekTool自体の使い方は他の入門用サイトを参照してください)

例えば下の画像のような感じで表示させるとします。
f:id:leopardgecko:20191025121457p:plain
一番上の赤い背景の文字は気象警報、その下が天気を表示している地名、その右が今後120分間の変化の予想、その下の大きな文字が現在の気温と天気、その下の「Looking Ahead」が今後数日間に起こる変化、その下で左側の「Today」で始まるエリアは今日の日中・夜間・明日の天気、その右が週末の天気(週間天気)、下にずらっと並んでいるのが時間単位の天気です。

この画像だと少々ゴチャゴチャして見えるかもしれませんが、それぞれ独立したGeekletなので好きなものだけ表示させることもできますし、各スクリプトは表示したいものの設定を変えることもできます(詳細は後述)。

Geekletのダウンロード

これらのGeekletをまとめたものはここからダウンロードできます。

[Geekletのダウンロード]

以下でGeekletを導入する前の準備と各Geekletの説明をします。

事前準備

ここで配布しているGeekletは初期状態では東京都江東区の天気が表示される設定になっていますので、表示したい地域に合わせて設定を変更する必要があります。
まず、https://www.accuweather.com/en/jp/japan-weatherにアクセスします。天気を表示したい市や区の名前をローマ字で入力して検索してそこを選ぶと、その地域の天気が表示されるようになります。その段階でWebブラウザに表示されているURLをどこかに保存しておいてください。

https://www.accuweather.com/en/jp/場所/数字/weather-forecast/数字

のような形式になっているはずです。例えば東京都江東区の場合は

https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230

という形になります。URLに「weather-forecast」が入っていない場合はサイト内の「NOW」のタブをクリックしてみてください。

配布したGeekletのスクリプトを見ると、それぞれ「# 場所のURL」の下に

WEATHER_URL=${WEATHER_URL:='https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230'}

という記述がありますが、この赤い文字で示した部分が表示したい場所のURLなので、ここを上で保存したURLに書き換えてください。

スクリプトをいちいち全部書き換えるのは面倒臭い!という方は、「~/.zshrc」または「~/.bashrc」に

export WEATHER_URL='https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230'

のような形で記入すれば、スクリプトの書き換えなしで全てがその設定で動作します。(「.zshrc」や「.bashrc」が何だかわからないという人はググってください)
また、以下のようにいくつか併記しておいて使わないものは「# 」でコメントアウトしておけば、「# 」を書き換えることにより表示する場所を変えることができます。

export WEATHER_URL='https://www.accuweather.com/en/jp/koto-ku/221230/weather-forecast/221230'
# export WEATHER_URL='https://www.accuweather.com/en/jp/sapporo-shi/223985/weather-forecast/223985'
# export WEATHER_URL='https://www.accuweather.com/en/jp/naha-shi/224944/weather-forecast/224944'

英語ではなく日本語で表示したい場合は、URLの「/en/」のところを「/ja/」に書き換えてください。ただし海外のサイトなので日本語は微妙な感じです。「/de/」でドイツ語、「/zh/」で中国語など、他の言語での表示も一応可能です。

社内での使用などでプロキシを指定する必要がある場合は、スクリプト内部でcurlを使っていますのでプロキシの設定を~/.curlrcに記載するなどしてください。

<各Geekletの説明>

【現在の気温と天気、今後数日間、MinuteCast、気象警報、場所】

f:id:leopardgecko:20191025122003p:plain

  • 現在の気温と天気.glet

現在の気温と天気を表示してリアルな画像の天気アイコンを取得するGeekletです。
天気アイコンを表示する画像Geekletは「img_weather_now.glet」ですので、合わせて使ってください。

  • 今後数日間.glet

Looking Ahead:」と表示されている部分です。
今後数日の間に起こる変化の予報が表示されます。

  • MinuteCast.glet

Periods of rain for at least 120 min」と表示されている部分です。
今後120分間の間に雨が降るなどの変化がある場合に表示されます。天気に変化がない場合は何も表示されません。

  • 気象警報.glet

赤字の部分です。何らかの気象警報が発令されると表示されます。警報が発令されていなければ何も表示されません。

MinuteCastと気象警報は天気が落ち着いている時には自動的に何も表示されなくなりますので、そういう時は以下のようなスッキリした表示になります。
f:id:leopardgecko:20191023091124p:plain

  • 場所.glet

読んで字のごとく場所の名前を表示するGeekletで、ここでは「Koto-ku, Tokyo」と書いてある部分です。
これがなくても困ることはないでしょうが、動作確認をするときや「.zshrc(または.bashrc)」を書き換えて表示場所を変えるような使い方をする場合などには有用でしょう。

【現在・日中・夜間・明日の天気】

f:id:leopardgecko:20191021151646p:plain

  • 現在・日中・夜間・明日.glet

現在の気温と天気、日中の最高気温と降水確率と天気、夜間の最低気温と降水確率と天気、明日の最高/最低気温と降水確率と天気を表示するGeekletです。
現在の天気は上のGeekletとかぶるのでデフォルトでは非表示の設定になっています。

上のGeekletのような大きな表示はいらないという場合は、上のGeekletは使わずにこちらの現在の天気を表示する設定をオンにすれば現在の天気もまとめて表示されます。
現在の天気も含めて全て表示した場合は以下のような感じになります。
f:id:leopardgecko:20191023093233p:plain

逆に、例えば明日だけの表示にすることも可能です。
f:id:leopardgecko:20191023110220p:plain

設定を変更するためには、Geekletのスクリプトを書き換えます。スクリプトの中に

# 表示する要素(1 表示する、0 表示しない)
FLG_C=0  # 現在
FLG_D=1  # 日中
FLG_N=1  # 夜間
FLG_T=1  # 明日

というところがあるので、表示したいものを「1」、表示したくないものを「0」に書き換えてください。
そのほか、天気のフレーズをより細かい表示にしたり見出しの色を変えたりすることもできます。詳しくはスクリプト内のコメントを参照してください。

このGeekletに対応する画像Geekletは、現在・日中・夜間・明日がそれぞれ「img_weather_current.glet」「img_weather_today.glet」「img_weather_tonight.glet」「img_weather_tomorrow.glet」です。(「img_weather_current.glet」は「おまけ」フォルダに入っています)

【週間天気】

f:id:leopardgecko:20191023094355p:plain

  • 週間天気.glet

週末の天気しか表示していないのに「週間天気」という名前なのは、これは本来は週間天気を表示するGeekletだからです。デフォルトでは設定により週末だけ表示するようにしています。(週末のみを表示する設定になっている場合は、本日が土曜日の場合は同じ週が表示されますが日曜日の場合は次の週の週末が表示されます)
設定を変更するためには、Geekletのスクリプトを書き換えます。スクリプトの中に

# 何日間?
NUM_L=7
# 何日後から?
AFTER=1
# 週末だけ表示?(0 週間表示、1 週末のみ表示)
F_WEEKEND=1

という部分がありますので、「F_WEEKEND=1」の部分を「F_WEEKEND=0」に書き換えると1週間分の天気が表示されるようになります。さらにスクリプト内のコメントに従って「NUM_L=7」や「AFTER=1」の数値を書き換えると例えば3日間だけ表示するとか3日後からの天気を表示するというようなことも可能になります。
日付や曜日の表示をカスタマイズすることもできるので、詳しくはスクリプト内のコメントを参照してください。

対応する画像Geekletは、デフォルトでは「img_weather_week_0.glet」と「img_weather_week_1.glet」です。
7日間の週間表示にした場合は「img_weather_week_0.glet」から「img_weather_week_6.glet」まで連番です。2〜6までの画像Geekletは「おまけ」フォルダに入っています。

週間表示かつ日付も表示する設定にした場合は以下のような感じになります。
f:id:leopardgecko:20191023095157p:plain

土日の曜日の色を変えたりすることもできますので、詳しくはスクリプト内のコメントを参照してください。

【時間単位の天気】

f:id:leopardgecko:20191023100814p:plain

  • 時間天気.glet

時間単位の天気、気温、降水確率、雨量、風向を表示するGeekletです。デフォルトでは24時間後まで2時間おきに表示する設定にしています。このGeekletは表示する画像の数が多いと表示が完了するまで少々時間がかかります。
等幅フォントを指定しないと表示がずれますので注意してください。フォントについての詳細は更新履歴も参照してください。
設定を変更するためには、Geekletのスクリプトを書き換えます。スクリプトの中に

# 何時間分?
NUM_HOUR=24
# 何時間おき?
SKIP=2
# 何段?
COLUM=2
# 各段の間の改行数
NLF=5

というところがありますので、コメントに従って表示したい形にカスタマイズしてみてください。
また、スクリプト内の

# 気温、降水確率、雨量、風速、フレーズを表示する?(1 表示する、0 表示しない)
F_TEMP=1
F_PRECIP=1
F_RAIN=1
F_WIND=1
F_PHRASE=0

というところで表示する内容をそれぞれオン・オフすることができます。

上記の設定変更によりコンパクトにまとめることもできます。例えば25時間分、6時間おき、1段の表示で設定すれば以下のようになります。
f:id:leopardgecko:20191023101841p:plain

さらにシンプルに、時間とアイコンだけでAM/PMの色なしの表示にもできます。
f:id:leopardgecko:20191023104852p:plain

日本語を等幅表示できるフォント(Osaka等幅、Rictyなど)を使えば、日本語でもずれない表示が可能です。
f:id:leopardgecko:20191023100913p:plain

このGeekletに対応する画像Geekletは、デフォルトの設定では「img_weather_hour_0.glet」から「img_weather_hour_11.glet」までの連番です。
もっと表示したい場合は「img_weather_hour_17.glet」まで「おまけ」フォルダの中に入れておきましたので、連番で使ってください。さらにもっと表示したい場合は、GeekToolでImageのGeekletを作ってImageのURLの欄に「file:///private/tmp/img_weather_hour_18.png」から連番で設定して画像を置いてください。AccuWeatherが何時間先まで表示できる仕様になっているかはわかりませんが、少なくとも翌日の現在時刻まで(25時間分)は可能です。

画像が多いと位置を変更した時の並び替えが大変なので、画像を並べるためのAppleScriptアプリ「時間単位の画像整列.app」を「おまけ」フォルダに入れておきました。初回の起動時は右クリックから「開く」を選んで起動してください。あとは指示の通りに画像の位置や間隔や大きさを入力していけば画像を一括で並べることができます。
注意点としては、GeekToolの仕様で画像の位置や大きさをAppleScriptで変更してもファイルに保存されないようなので、GeekToolを終了した場合は次に開いた時はまた元の位置に戻ってしまいます。これを防ぐためには、画像を並べた後に位置をドラッグしてちょこっとだけ移動してから元に戻せば位置情報が保存されます。面倒なのですが、最初から全部手動でやるよりは楽でしょう。

最後に

表示の不具合などありましたら、コメント欄やTwitterなどでお気軽にご連絡をいただけると助かります。

更新履歴

2020/7/16 「現在の気温と天気」「現在・日中・夜間・明日」「MinuteCast」「今後数日間」「週間天気」でAccuWeatherの仕様変更にとりあえず対処。今回は比較的大きな仕様変更だったので動作に不具合があるかもしれません。お気づきの点などありましたらコメント欄やTwitterなどでお知らせいただければ幸いです。
2020/7/5 「時間天気」でAccuWeatherの仕様変更にとりあえず対処。私的にはかなり厳しい変更だったので、雨量と風向の表示はとりあえず英語と日本語だけの対応としています。他の言語での表示もやればできなくはないので、ご希望があればコメント欄やTwitterなどでお知らせください。
2020/5/21 「現在の気温と天気」「現在・日中・夜間・明日」「週間天気」「時間天気」でAccuWeatherの仕様変更に対処。Geekletをいちいち入れ替えるのが面倒な場合は、スクリプト内の「img class」という部分を「class」に書き換えるだけでもOKです。画像が表示されない場合は、「/tmp」ディレクトリの中で名前に「weather_」がついている画像ファイルを手動で全て削除してみてください。
2020/5/6 「現在の気温と天気」でAccuWeatherの仕様変更に対処。Geekletをいちいち入れ替えるのが面倒な場合は、スクリプト内の「-A25」という部分を「-A30」に書き換えるだけでもOKです。画像が表示されない場合は、「/tmp」ディレクトリの中で名前に「weather_」がついている画像ファイルを手動で全て削除してみてください。
2019/12/20 「現在・日中・夜間・明日」でAccuWeatherの仕様変更に対処。
2019/12/4 「現在・日中・夜間・明日」と「時間天気」で降雪量も表示できるように変更。デフォルトでは表示しない設定になっているので、スクリプト内のコメントを参考にして設定を書き換えてください。
2019/12/3 「現在の気温と天気」「現在・日中・夜間・明日」「MinuteCast」「気象警報」「降水確率、紫外線、雨量、風向など」でAccuWeatherの仕様変更に対処。「週間天気」で若干の修正。
2019/11/24「週間天気」の多国語表示対応。ドイツ語やフランス語などでの表示も可能になりました。
2019/11/22 「週間天気」でAccuWeatherの仕様変更に対処。その他のGeekletには変更はありません。
2019/11/5 AccuWeatherの仕様変更に対処。ひとまずは応急処置です。時間単位の天気は日本語を等倍表示できるフォント(Osaka等幅、Ricty、Myrica M、MSゴシック、MS明朝など)を使ってください。日本語対応ではない等幅フォント(Andale Mono、Courier、Menlo、Monacoなど)を使いたい場合はスクリプト内のコメントに従って設定を変えてください。22時より前にアップしたものにはバグがあるので最新版に入れ替えてください。
2019/10/31 表示関係などの微細な修正。記事にスクリプトへのリンクを追記。
2019/10/29 AccuWeatherの仕様変更により、「最大紫外線、雲量、雨量、風速・風向き」の記事を削除。
2019/10/25 Geekletや記事の細かな修正。
2019/10/23 記事作成。以前公開していたGeekletとは互換性がない部分もありますので、スクリプトを入れ替えて画像が表示されない場合は画像Geekletも入れ替えてください。