前回の僕のブログが(フランス革命歴)時報だったから、電話番号似ているつながりと言うわけでもないですが、今回は天気予報を取ってくるという話があったので、そのときにやったことをメモしておきます。
天気予報情報はここ。OpenWeatherMap.orgを使いました。
https://openweathermap.org/
いろいろ英語で書いてあって苦手な人は大変ですが、とりあえず必要なことは
- Sign Upから登録
- API keysから文字列を持ってくる
だいたいこんなところです。Subscribeは今のところ必要ない感じです。(月額ですし)
こちら側でやる必要があることはだいたい、
- 持ってきた文字列を含むHTTPリクエストをURLに投げる
- JSONを受け取る
あとはお好きなように使う、といったところです。
/** * 定数、配列定義 */ //アクセス用APIキー define('API_KEY','/*ここに取得したAPIキー*/'); //アクセス用URL define('API_URL','http://api.openweathermap.org/data/2.5/forecast?units=metric&id=1853908&APPID='.API_KEY);//大阪のcity idを使用 /* HTTPリクエストを投げる感じのクラスHttpRequestも用意しておく */ /*ここから取得*/ $http = new HttpRequest(API_URL,HttpRequest::REQ_HTTP_GET); $code = $http->sendRequest(); if($code!=200){ echo 'Error:データの取得に失敗した'; exit; } $rawWeather=$http->getResponseBody();
ここで、$rawWeather
の中身はこんな感じ
{ "cod":"200", "message":0.021, "cnt":39, "list":[ { "dt":1491793200, "main":{ "temp":12.43, "temp_min":8.35, "temp_max":12.43, "pressure":892.44, "sea_level":1032.22, "grnd_level":892.44, "humidity":78, "temp_kf":4.08 }, "weather":[{ "id":500, "main":"Rain", "description":"light rain", "icon":"10d" }], "clouds":{"all":68}, "wind":{"speed":1.06,"deg":217.002}, "rain":{"3h":0.155}, "snow":{}, "sys":{"pod":"d"}, "dt_txt":"2017-04-10 03:00:00" }, { ...以下、3時間ごと5日分の予報... } ] "city":{ "id":1853908, "name":"Osaka", "coord":{"lat":35.95,"lon":137.2667}, "country":"JP" } }
天気の内容はlist[n].weather.main
に、気温や気圧はlist[n].main
に出ています。list[n].dt_txt
は世界標準時なので、日本時間では4月10日正午の天気ってことになります。URLにunits=metric
をつけることで、気温の単位は摂氏として送られてきます。リクエスト文字列をいじると華氏にもできたりするそうです。
月額のないAPIだと1分間に60回までしか呼べないとかあったりしますけど、とりあえず試す分には十分でしょう。天気予報が必要になったら、こういう方法に頼れる、と言う話でした。