zshのプロンプトにお天気表示してみた
【この記事は旧ブログから移転しています】
どうもみなさんこんにちは、@kanufyです。
今日はきっとエンジニアのみなさんが
一番目にする場所であろうシェルをいじろうと思います。
プロンプトに天気でてきたらかわいい気がする。
うんきっとかわいいに違いない。
お天気を調べる
天気調べるなにかがあるはず
さくっとgoogle先生に質問したら、curl使ってlivedoorのお天気とってくるAPIしばいてる記事があったので参考に。
上記より
$ curl -s http://weather.livedoor.com/forecast/webservice/json/v1\?city\=XXXXXX | jq -r '.forecasts[] | select(.dateLabel == "今日").telop'
でお天気が表示されることが判明。
JSON見づらい
jqいれます。
brew intall jq
でサクッとインストール。
jqはJSONパーサーで結構フィルタリングいっぱいできて便利です。
- jq公式リファレンス
jq Manual (development version)
- ざっくり日本語訳してくれた記事
軽量JSONパーサー『jq』のドキュメント:『jq Manual』をざっくり日本語訳してみました | Developers.IO
お天気をだす
無事jqコマンドが使えるようになったので
curlするとこんなのが返ってきます。
曇時々晴...まてよこれって天気の種類めっちゃあるやつじゃ...
お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報
仕様に天気の種類のってないってことで
適当にいろんな都道府県の天気しらべてみて
こんくらいあったらなんとかなるでしょーくらいまででやめた(18種類くらい
返ってきた天気をシェルスクリプトの変数にぶちこむ。
WEATHER=$(curl -s http://weather.livedoor.com/forecast/webservice/json/v1\?city\=260010 | jq -r '.forecasts[] | select(.dateLabel == "今日").telop' );
ちなみにcityは260010は京都南部です。
東京は130010で滋賀は250010。
これもlivedoor天気の各都道府県の天気調べたらURLにかいてあるのでそれを参考に。
(一覧でだしてよねとかもちろん思ったり。)
この天気によって case文 で場合分け(めんどくさい)
時々は / 使って、のちは -> で表現してみました。
case $WEATHER in 曇時々晴) WE="☁ /☀";; 曇時々雨) WE="☁ /☂";; 曇時々雪) WE="☁ /☃";; 晴時々曇) WE="☀ /☁";; 晴時々雨) WE="☀ /☂";; 雨時々曇) WE="☂ /☁";; 晴のち曇) WE="☀ ->☁";; 晴のち雨) WE="☀ ->☂";; 曇のち晴) WE="☁ ->☀";; 曇のち雨) WE="☁ ->☂";; 雨のち晴) WE="☂ ->☀";; 雨のち曇) WE="☂ ->☁";; 雪のち曇) WE="☃ ->☁";; 曇のち雪) WE="☁ ->☃";; 雨) WE="☂";; 晴れ) WE="☀";; 曇り) WE="☁";; 雪) WE="☃";; *) WE="♡";; esac
これでだいたい準備はおっけーです。
登録されてない天気がでると♡がでるので
そんなときは
echo $WEATHER
なりして調べて追加してください(糞設計でごめんなさい)
プロンプトに表示させる
天気を $WE に入れたので、プロンプトに入れます。
tmp_prompt="%{${fg[cyan]}%}%n%{${reset_color}%} %{${fg[red]}%}${WE}%{${reset_color}%} %{${fg[magenta]}%}>%{${reset_color}%}"
私の場合、kanae 天気 >にしてるので、ユーザ名 %n をシアンではさんでます。
%{${fg[cyan]}%}%n%{${reset_color}%}ここまでで1つ。
色は%{${fg[cyan]}%}でつけて%{${reset_color}%}で色を戻す。
天気毎に色変えたかったんですがすごくめんどそうだったので諦めて全部赤色に。
%{${fg[red]}%}${WE}%{${reset_color}%}の部分ですね。
ちなみに色つけるためにはautoload -U colors; colorsをかかないとダメです。
さてこれでプロンプトにお天気がでたはずです!
確認はコマンドラインで
exec -l $SHELL
つかうとシェル再起動できるので
あたらしく開いてたしかめなくていいので便利です。
ついでにシェルスクリプトについても調べたりしてたので参考に。
シェルスクリプト入門 書き方のまとめ | Memo on the Web
以下私の.zshrcのお天気部分とプロンプト表示部分抜粋
ネットで漁った.zshrcをベースにしてます。
ちなみに右プロンプトにはカレントディレクトリだしてます。
明日の天気とかにしたければcurlの(.dateLabel == "今日")を明日にするとできます。
[お天気をzshのプロンプトに表示させる部分の.zshrc](https://gist.github.com/63d3e899face3677f781)