【初心者向け】10行以内のスクリプト(6.wgetでライブドアの東京・大阪・名古屋の天気情報を表示)
pythonで色々なライブラリを使えば、「少ないコードでもちょっとした事が出来て、少なければ5行程でもちょっとしたスクリプトが作れ、便利だな。」と思ったので、pythonやその他、コマンドを羅列しただけのものも出てくるかも知れませんが、10行程のスクリプトを不定期で投稿してみようと思います。
第6回として、wgetでライブドアの天気情報を表示するスクリプトを投稿したいと思います。
ウェブから情報を抽出したりダウンロードする場合は、python等を使う事が多いと思いますが、ここはブラウザとLinuxのディストリビューションに含まれていると思われる、伝統的なUNIXのツールでやってみようと思います。
簡単なものであれば、CUIのブラウザやwget、curl等を使ったほうが、手軽で動作が軽い様にも思います。
私も、少し前からpythonを独習し始め、pandasのdatareaderで為替相場をスクリプト中で、ダウンロードしてみたりしてみていますが、wgetやgrep等を使うほうが手軽です。
1.東京・大阪・名古屋の天気情報をダンロード、抽出・表示するスクリプト
データは、以下のライブドアさん公開のWeb-APIを使用しました。
weather_report_api='http://weather.livedoor.com/forecast/rss/index.xml'
数日間の情報を表示する場合は、このAPIのリンク先に各地の情報もあります。
【環境】
Linux: LinuxMint19.3
shell: bash4.4.20
w3m: 1.19.4
grep: GNU grep3.1
awk: 1.4.4
wgetで任意のファイルに出力する基本の使用方法は、以下の通り。
(-Oは、アルファベットのオーです)
wget 「接続するurl」 -O 「出力先のファイル名」
東京・大阪・名古屋の天気情報をダンロード、抽出・表示するスクリプト
# !/usr/bin/env bash
#
###############################################################
# livedoorの天気情報表示
#
# 全国の天気
# http://weather.livedoor.com/forecast/rss/index.xml
#
# ファイルから条件を抽出するコマンド
# cat livedoor.txt |grep -e "東京" -e "大阪" -e "名古屋" | awk '{print $2 ,$4 ,$6 ,$8}'
#
# out_file = './livedoor_weather_report.txt'
#
###############################################################
# ライブドアの全国の天気のrss
weather_report_api='http://weather.livedoor.com/forecast/rss/index.xml'
# 出力するファイル
out_file='./livedoor_weather_report.txt'
# ライブドアの全国の天気のrssをwgetでダンプ
echo ''
# w3m -dump $weather_report_api > $out_file
wget -q $weather_report_api -O $out_file
echo '今日の天気' ; date
echo ''
# ファイルから条件を抽出して終了
cat $out_file | grep -e "東京" -e "大阪" -e "名古屋" | awk '{print $4 ,$6 ,$8}'
echo ''
【抽出・表示の結果】
今日の天気
2020年 5月 4日 月曜日 22:31:00 JST
東京 曇り 最高気温22℃
名古屋 晴時々曇 最高気温24℃
大阪 晴のち曇 最高気温25℃
非常に簡単でワンライナーで良いぐらいのもので、詳しく説明するほどのものでも無いのですが
2.構成を2部に分けるとすると
【1】wgetで、rss「http://weather.livedoor.com/forecast/rss/index.xml」に接続して、ファイルに出力
・実際の利便性を考えると、このAPIのリンク先に各地の情報を数日間の予報表示する事例が多いと思いますが、ここでは全国的な情報が見えるこちらに接続しました。
・出力先のファイルは、カレントディレクトリの「livedoor_weather_report.txt」としました。
・オプションの「-q」で、標準出力を無効にしました。
# ライブドアの全国の天気のrss
weather_report_api='http://weather.livedoor.com/forecast/rss/index.xml'
# 出力するファイル
out_file='./livedoor_weather_report.txt'
# ライブドアの全国の天気のrssをwgetでダンプ
echo ''
wget -q $weather_report_api -O $out_file
【2】ファイルから、パターンマッチで条件を抽出
cat 出力したファイル | grep -e "東京" -e "大阪" -e "名古屋" | awk '{print $カラム ,$カラム ,$カラム}'
として、grepとawkで検索をしています。
grepで検索するキーワード毎で、「-e」のオプションを使用して一度のコマンドで検索しています。
次にパイプで結果を、「awk」に渡して、4番目、6番目、8番目のフィールドを抽出しています。
# ファイルから条件を抽出して終了
cat $out_file | grep -e "東京" -e "大阪" -e "名古屋" | awk '{print $4 ,$6 ,$8}'
echo ''
テキストベースのブラウザやUNIXのテキスト処理のツールは強力で、他のコマンドに結果を渡すフィルターとして使用できるものがほとんどだと思います。
私がスクリプトにしたものもパイプで、wgetとawkやgrep等を並べているだけですが、例えばawkでは、テキストファイルのカラムの順番を並べ替えたり、する事が簡単に出来ます。
csvで渡されたファイルのカラムを並べ替えたり、抽出したりする事も簡単で、実は演算等も出来る様です。
以上、6.wgetでライブドアの東京・大阪・名古屋の天気情報を表示でした。