先日OpenWeatherMapから天気情報を取得する方法を書きましたが、この手の天気情報を取得できるサイトとしてWorldWeatherOnlineというところがあります。
iOSやAndroidアプリなんかではよく利用されるところなのですが、こちらから天気情報を取得する方法を書いておこうかと思います。
環境:
- CentOS 6.6
- Zabbix 2.4.4
/
https://developer.worldweatheronline.com/auth/register
APIで取得できる情報については詳細が以下にあります。
APIでザラッと取得できる情報は以下の様な感じです。
{ "data": { "current_condition": [ { "cloudcover": "0", "FeelsLikeC": "6", "FeelsLikeF": "43", "humidity": "81", "lang_ja": [ { "value": "もや" } ], "observation_time": "12:17 PM", "precipMM": "0.0", "pressure": "1028", "temp_C": "6", "temp_F": "43", "visibility": "5", "weatherCode": "143", "weatherDesc": [ { "value": "Haze" } ], "weatherIconUrl": [ { "value": "http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0006_mist.png" } ], "winddir16Point": "NNE", "winddirDegree": "22", "windspeedKmph": "0", "windspeedMiles": "0" } ], "request": [ { "query": "London, United Kingdom", "type": "City" } ], "weather": [ { "astronomy": [ { "moonrise": "05:59 AM", "moonset": "06:38 PM", "sunrise": "06:04 AM", "sunset": "06:13 PM" } ], "date": "2015-03-20", "hourly": [ { "chanceoffog": "0", "chanceoffrost": "0", "chanceofhightemp": "0", "chanceofovercast": "0", "chanceofrain": "0", "chanceofremdry": "0", "chanceofsnow": "0", "chanceofsunshine": "53", "chanceofthunder": "0", "chanceofwindy": "0", "cloudcover": "47", "DewPointC": "3", "DewPointF": "37", "FeelsLikeC": "-1", "FeelsLikeF": "31", "HeatIndexC": "3", "HeatIndexF": "38", "humidity": "96", "lang_ja": [ { "value": "所により曇り" } ], "precipMM": "0.0", "pressure": "1031", "tempC": "3", "tempF": "38", "time": "0", "visibility": "10", "weatherCode": "116", "weatherDesc": [ { "value": "Partly Cloudy" } ], "weatherIconUrl": [ { "value": "http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png" } ], "WindChillC": "-1", "WindChillF": "31", "winddir16Point": "NNE", "winddirDegree": "26", "WindGustKmph": "27", "WindGustMiles": "17", "windspeedKmph": "15", "windspeedMiles": "9" }, ], "maxtempC": "15", "maxtempF": "59", "mintempC": "5", "mintempF": "40", "uvIndex": "3" } ] } }
とても多いです。
いくつかの取得部に分かれていますが、「current_condition
」、「weather
」、「astronomy
」、「hourly
」があるよーというのを抑えておけばよいかと。
今回もシェルスクリプトを用意しました。
先に言うと、WorldWeatherOnlineは日本語化された情報を返してくれるので、以前のOpenWeatherMapのようにあれこれ変換する必要はないのがありがたいです。
また華氏と摂氏を同時に取得できるのでこちらについても変換等は必要ありません。
APIKEY="" URL="https://api.worldweatheronline.com/free/v2/weather.ashx?" CURLOPTS="-s" CITY=$1 WEATHER=$2 APIOPTS="&format=json&showlocaltime=yes&lang=ja&num_of_days=1&date=today&tp=1" DATA="" case $WEATHER in "weather") # Weather condition description DATA=`curl ${CURLOPTS} "${URL}q=${CITY}${APIOPTS}&key=${APIKEY}" | jq -r ".data.current_condition[].lang_ja[].value"` echo $DATA ;;
相変わらず必要部分をjqのフィルタリングで取得するようにしています。
OWMと比較しても随分とシンプルに出来ると思います。
"winddir16Point") # Wind direction in 16-point compass DATA=`curl ${CURLOPTS} "${URL}q=${CITY}${APIOPTS}&key=${APIKEY}" | jq -r ".data.current_condition[].winddir16Point"` echo $DATA ;;
風向きについても英字ながら16方位で情報を取得できるので、特に変換等は必要ないかと。どうしても日本語化されていないと辛いという方は、Caseなどで日本語に割り振ったりするのがいいかもしれませんね。
"windspeedKmph") # Wind speed in kilometres per hour trans m/s DATA=`curl ${CURLOPTS} "${URL}q=${CITY}${APIOPTS}&key=${APIKEY}" | jq -r ".data.current_condition[].windspeedKmph"` echo "scale=1; ${DATA}/3.6" | bc ;;
風速はkm/hというあまり日本では馴染みのない単位になるので、私はm/sに変換しなおしています。
これぐらいでしょうか。
気圧がミリバールだったりするので、hPaとは厳密には違うはずですが、まあ私はとりあえずそのまま取得するようにしています。
スクリプトは以下にとりあえず置いてあります。
なお、APIについてはWebサイトにAPI ExplororとしてGUIから情報を確認することができるので、そちらを確認しながら設定するのが良いと思います。
あとは、OpenWeatherMapのときと同様、Zabbix側では外部チェックとしてシェルスクリプトを実行するようにします。
WorldWeatherOnlineは、OpenWeatherMapとは違いサクッとAPIを返してくれます。
週間予報なども取得できるので、アプリやWebサイトに掲載するなどのときには便利だと思います。
また個人的Tipsとなりますが、取得したい都市について、街名で与えるよりも座標情報で与えたほうが、取得したい場所の天気情報の確度が高まると思います。
不明な点や、もっとこうしたほうがいいよ、などありましたらご指摘ください。
この辺りはボランティアベースのOpenWeatherMapとは違うようです。