コンテンツへスキップ

Weather.php:Yahoo!JAPANのWeatherAPI利用

Weather.php概要

Yahoo!JAPANの気象情報APIを用いて、指定した緯度経度の雨の強さを取得します。取得した絵、現在時刻の降水強度実測値から、60分後までの降水強度予測値をもとに、今後の雨予報を行います。

スクリプト仕様

  • Yahoo!JAPANの気象APIより現在の降水量実測値と60分後までの降水量を取得します
  • 降水量予測は、10分単位で取得を行います。
    https://map.yahooapis.jp/weather/V1/place?interval=10&output=json&coordinates=139.745451,35.658577&appid=@YAHOO_API_ID@

    以下、XMLで取得した際のサンプル。

    <YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" firstResultPosition="1" totalResultsAvailable="1" totalResultsReturned="1">
    <ResultInfo>
    <Count>1</Count>
    <Total>1</Total>
    <Start>1</Start>
    <Status>200</Status>
    <Latency>0.003471</Latency>
    <Description/>
    <Copyright>(C) Yahoo Japan Corporation.</Copyright>
    </ResultInfo>
    <Feature>
    <Id>201907082015_139.74545_35.658577</Id>
    <Name>
    地点(139.74545,35.658577)の2019年07月08日 20時15分から60分間の天気情報
    </Name>
    <Geometry>
    <Type>point</Type>
    <Coordinates>139.74545,35.658577</Coordinates>
    </Geometry>
    <Property>
    <WeatherAreaCode>4410</WeatherAreaCode>
    <WeatherList>
    <Weather>
    <Type>observation</Type>
    <Date>201907082015</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082025</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082035</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082045</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082055</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082105</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    <Weather>
    <Type>forecast</Type>
    <Date>201907082115</Date>
    <Rainfall>0.00</Rainfall>
    </Weather>
    </WeatherList>
    </Property>
    </Feature>
    </YDF>
  • 現在(observation)の雨量(Rainfall)を取得し、将来(forecast)の雨量を順番に見てゆきます。雨判定のしきい値を超えた時点で、雨予報のトリガーを実施します。(home-api.phpへ通知します)
  • このままだと、checkインターバルにもよりますが通知回数が多くなるので、通知間隔を調整する設定値を準備しております。
    雨が降り始めても、止むことなく降り続ける場合は少ないので、少し時間が空いた後の、雨の降り始めが通知出来るようにしております。
  • 雨トリガー実行、現時点の雨や60分先までの雨を検知した時点の時間を記憶し、インターバル時間以上の雨検知まで、雨トリガーを抑制します。
    インターバルを70分と設定した場合。
    雨トリガー実施08:00(次回09:10以降の雨検知までトリガー抑止)→数十分先の雨を検知08:40(次回9:50以降の雨検知までトリガー抑止)
    雨が降り続いている限り(70分以上の雨検知がなくなるまで)、雨トリガーは抑止されます。

動作定義

  • @URL4HOMEAPI@:home-api.phpのURLを登録 home-api.php V1
  • @APIKEY@:home-api.php のAPI KEYを登録 home-api.php V1
  • @YAHOO_API_ID@:Yahoo! JAPANのアプリケーションID
    Yahoo!JAPANアプリケーションの管理
  • @PLACE@:経度・緯度の順番で、コンマ区切りで指定
    例:https://www.geocoding.jp/?q=東京都港区芝公園4丁目2−8
    東京都港区芝公園4丁目2−8 座標(WGS84) 緯度: 35.658577 経度: 139.745451
    139.745451,35.658577
//ログのファイル名
define("HOME_API_LOG_NAME","log-weather");
//前回通知時間記録ファイル
define("HOME_API_TEMP_NAME","temp");
//home-api-key
define("HOME_API_URL","http://@URL4HOMEAPI@/home-api.php");
define("HOME_API_KEY","@APIKEY@");
//動作設定
//雨判定閾値(通常0.5mm/hが雨(小雨))
define("MIN_RAIN_VALUE",0.55);
//雨判定閾値(小雨以上の雨、通常1.0mm/h以上)
define("STD_RAIN_VALUE",1.0);
//雨アナウンス後の次アナウンスまでの間隔(分) アナウンスなし期間の小雨以上判定で期間延長
define("NO_NOTICE_TIME",70);

//Yahoo API Infromation
$appid = '@YAHOO_API_ID@';
$coordinates ='@PLACE@';

スクリプトファイル

Gist

https://gist.github.com/kenichimiki/42fb1736da90a911dd9c3bffda4a8f10