この記事はhttps://arkey22.com/?p=1472のQiita用書き出しです。
(本当はこのような使い方は良くないと思うのですが、Qiita記事に比べてblogが埋もれてしまうため、記載してみてます。ちょっとしたチャレンジです。
概要

- 気象庁が発表しているアメダスの情報から最新の気温を抽出する
- 抽出した気温データをZabbixで収集する
- Zabbixで収集したデータを可視化する(上記画像の緑の数値がアメダスから取得した外気温です)
取得対象

スクレイピング行為について
今回は上記の通りタイムラグがあるため、1分に1回のアクセスで最新の気温データを取得します。過去にLibrahack事件などもありましたが、この程度のアクセスは問題無いはず。
ちなみに、気象庁がこの「表形式」のデータをWebで公開してから10年以上経ちますが、テーブルの構造が全く変わっていません。あくまで推測ですが、気象庁が暗に自動収集している人や団体を認めているのではないかと思っています。構造を変えるとスクレイピング出来なくなってしまうので。もちろん、現状の表形式で十分だからという理由もあるとは思いますが。推測です、推測。
気象庁が発表しているアメダスの情報から気温のみ抽出する
[arkey22@zabbix4]$ cat outside_temp.sh
# !/bin/bash
temperature_c=`curl -s 'https://www.jma.go.jp/jp/amedas_h/today-43056.html?areaCode=000&groupCode=29' | grep 'block middle' | tail -n +2 | tr -d '\t' | grep -oP "^<td class=\"block middle\">\-?[0-9]?[0-9]\.[0-9]" | grep -oP "\-?[0-9]?[0-9]\.[0-9]" | tail -n 1`
/usr/bin/echo ${temperature_c} > /tmp/outside_temp
[arkey22@zabbix4]$
[arkey22@zabbix4]$ cat /tmp/outside_temp
7.4
[arkey22@zabbix4]$
[arkey22@zabbix4]$ crontab -l | grep outside_temp.sh
*/1 * * * * /usr/local/src/outside_temp.sh > /dev/null 2>&1
[arkey22@zabbix4]$
さて、対象と頻度を決めたところで、データを取得していきます。いつものごとくbashです。肝心の気温が掲載されている表のHTMLを見ると、読みにくいです。パイプをつなぎまくって最新の気温を取得してみましたが、可読性がクソを極めています。ここに時間をあまりかけたくなかったので今回はこれで良しとしますが、もっとうまく書けないもんかと、ちょっと落ち込みました。
取得間隔はcronで設定し、1分ごとにスクリプトを実行して取得します。
さて、上記スクリプトですが、気温の出力先として/tmp/outside_tempに上書きしています。/tmp/outside_tempに吐き出された値をzabbixの vfs.file.contents を使って数値を収集します。
抽出した気温データをZabbixで取得する


値が正常に取得出来ると、このような感じに1時間ごとの気温がZabbixで収集されます。
Zabbixで取得したデータを可視化する


お疲れさまでした。