Linuxコマンドで天気予報を取得&表示するワンライン(on Mac)
MacのターミナルでYahoo!天気予報を取得、データを整形して表示するまでを行います。
Linuxコマンドで実現するので、Macじゃない人でもコマンドが使えたら真似できます。
はじめに
Macの人なら問題なく動作するはずです。Linux系なら問題ないです。
zsh on Macでしか動作チェックしてませんが、他の環境でもちょっと文字がずれるとか改行コードが違うくらいだと思うので、適宜調節してください。
GitHubで公開しているので、こちらからどうぞ。
https://github.com/arabian9ts/weather
zshrcなどに書いておけば、ログインしたタイミングで天気予報を確認できます╭( ・ㅂ・)و ̑̑ グッ !
プレビュー
完成図はこんな感じになります。コード
ワンラインなのでコードというのは仰々しいですが、、、
curl -s https://weather.yahoo.co.jp/weather/jp/40/8210/40133/8100001.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*明日' | tr ' ' '\n' | grep -v '^$' | head -47 | tr '\n' '\t' | awk '{sub("時刻", "\n時刻 ");sub("天気", "\n天気 ");sub("気温(℃)", "\n気温(℃)");sub("湿度(%)", "\n湿度(%)");sub("降水量(mm/h)", "\n降水量(mm/h)");print}'
解説
パイプで区切ってあるコマンド単位で順に解説を書きます。
- curlでYahoo!天気予報のhtmlファイルの情報を取得
- htmlタグ消去のために改行コードを空文字に置換(
>
が行頭にくる可能性を潰す) -
<
ではじまり>
で終わる箇所をすべて消去(タグ消去) -
- *月**日
というヘッドラインから明日の天気
までの情報を切り出す - 空文字を改行コードに戻す
- 空行を削除
- 必要な行までを抽出
- 以降データ整形
正規表現について
-
grep -v ^$
の^
は次に来る文字が行頭にあるという意味($
は行末) -> 空行 -
[^>]
は[]
で囲まれたグループを含まないという意味(行頭ではないから使い分け注意)