[zabbix][外部チェック] WorldWeatherOnlineから天気データを取得してZabbixに格納する。

    • 2015/03/23 10:38
    • Category: zabbix
    Related Posts Plugin for WordPress, Blogger...

    先日OpenWeatherMapから天気情報を取得する方法を書きましたが、この手の天気情報を取得できるサイトとしてWorldWeatherOnlineというところがあります。
    iOSやAndroidアプリなんかではよく利用されるところなのですが、こちらから天気情報を取得する方法を書いておこうかと思います。

    環境:
    CentOS 6.6
    Zabbix 2.4.4

    WorldWeatherOnlineにて、情報を取得するためにはユーザー登録が必要です。
    無料でも利用できますが、APIについては毎秒5回まで、1日1,000回までに制限されています。
    また、予報については3時間毎までしか取得できないので、それ以上必要になるようであれば、有料アカウントにする必要があります。

    /
    https://developer.worldweatheronline.com/auth/register

    APIで取得できる情報については詳細が以下にあります。

    Local Weather API /
    http://www.worldweatheronline.com/api/docs/local-city-town-weather-api.aspx


    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」があるよーというのを抑えておけばよいかと。

    current_conditionが現在の天気なので、基本的にはこの部分しか気にしないのではないかと思います。
    weatherには、一日の最高気温、最低気温、UV指数もあったりして季節に依っては便利かもしれません。
    hourlyは(基本)3時間毎天気情報になります。パラメータの指定により6時間や12時間なども選ぶことができます。

    今回もシェルスクリプトを用意しました。
    先に言うと、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とは厳密には違うはずですが、まあ私はとりあえずそのまま取得するようにしています。

    スクリプトは以下にとりあえず置いてあります。

    zabbix_weather_check/check_weather_wwo.sh at master · kometchtech/zabbix_weather_check /
    https://github.com/kometchtech/zabbix_weather_check/blob/master/check_weather_wwo.sh

    なお、APIについてはWebサイトにAPI ExplororとしてGUIから情報を確認することができるので、そちらを確認しながら設定するのが良いと思います。

    あとは、OpenWeatherMapのときと同様、Zabbix側では外部チェックとしてシェルスクリプトを実行するようにします。

    第1引数は場所、第2引数は取得したい天気情報、になります。

    Snip20150320_1.png

    WorldWeatherOnlineは、OpenWeatherMapとは違いサクッとAPIを返してくれます。
    # この辺りはボランティアベースのOpenWeatherMapとは違うようです。

    週間予報なども取得できるので、アプリやWebサイトに掲載するなどのときには便利だと思います。

    また個人的Tipsとなりますが、取得したい都市について、街名で与えるよりも座標情報で与えたほうが、取得したい場所の天気情報の確度が高まると思います。

    不明な点や、もっとこうしたほうがいいよ、などありましたらご指摘ください。




    Pagination

    Trackback

    Trackback URL

    http://kometchtech.blog.fc2.com/tb.php/1802-229f1875

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometch

    Author:kometch
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    07 | 2017/08 | 09
    - - 1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31 - -

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FC2カウンター

    現在の閲覧者数

    現在の閲覧者数:

    Amazon アフィリエイト

    スポンサードリンク

    Latvia Time

    IPv4/IPv6

    月間ページランキング

    ブログパーツ

    サイトランキング

    スポンサードリンク