Posted at

OpenWeatherMapでTwitterに天気予報botを作る

More than 3 years have passed since last update.


動機

天気予報見てなかったら洗濯物が全滅した


OpenWeatherMap


使い方

解説はすでにあるので悩んだところだけ

Freeのプランで選択できるのはCurrent weather data5 day / 3 hour forecastWeather map layersの三つ。今回は予報がしたいので5 day / 3 hour forecastを選択。

$json = file_get_contents("http://api.openweathermap.org/data/2.5/forecast/city?id=(都市のID)&APPID=(APIのキー)");

$row_data = json_decode($json,true);

とすれば簡単に配列に予報データが入る。

array(5) {

["city"]=>array(6) {
["id"]=>int(都市ID)
["name"]=>string(11) "都市名"
["coord"]=>array(2) {
["lon"]=>float(経度)
["lat"]=>float(緯度)
}
["country"]=>string(2) "JP"
["population"]=>int(0)
["sys"]=>array(1) {
["population"]=>int(0)
}
}
["cod"]=>string(3) "200"
["message"]=>float(0.0207)
["cnt"]=>int(37)
["list"]=>array(37) { //ここのlistに予報データが全部格納されてる
[0]=>array(8) {
["dt"]=>int(1464858000)
["main"]=>array(8) {
["temp"]=>float(22.91)
["temp_min"]=>float(21.32)
["temp_max"]=>float(22.91)
["pressure"]=>float(1015.57)
["sea_level"]=>float(1019.24)
["grnd_level"]=>float(1015.57)
["humidity"]=>int(51)
["temp_kf"]=>float(1.58)
}
["weather"]=>array(1) {
[0]=>array(4) {
["id"]=>int(800)
["main"]=>string(5) "Clear"
["description"]=>string(9) "clear sky"
["icon"]=>string(3) "01d"
}
}
["clouds"]=>array(1) {
["all"]=>int(0)
}
["wind"]=>array(2) {
["speed"]=>float(7.51)
["deg"]=>float(356.006)
}
["rain"]=>array(0) {
}
["sys"]=>array(1) {
["pod"]=>string(1) "d"
}
["dt_txt"]=>string(19) "2016-06-02 09:00:00"
}
以下略

["list"]以下に単純に番号が振られて予報データが入っている。["dt_txt"]でほしいデータを見分けないといけない。

今回ほしかったのは["weather"]["id"]。ほしいデータは選んで取得できないので全部取ってこないといけない(当然)。

["cod"]がステータスなので、200以外だったらエラーなのかもしれない。あと時間はUTCなのでそこも注意。

これで天気IDが取得できるので、


http://openweathermap.org/weather-conditions


を参考にswitch-caseとか使っていい感じに。

800番台なら晴れorくもり

700番台なら霧とか砂嵐とか

600番台なら雪

500番台なら雨

300番台なら霧雨

200番台なら雷雨

900番台ならやばい

900番台は起こり得るのかな?天気アイコンもないみたいだし、天気じゃなくて風とかだし無いのかも。


Twitter

Twitterに投稿するところはmpywさんのTwistOAuthを使えば一瞬なので省略。


参考

http://qiita.com/tsunet111/items/9309801cd3e3bcf6e32a#comment-c9e56af1c481560cb642


ほんとはOpenWeatherMap側が提供している天気アイコンの画像付きでツイッターに投稿しようかなと考えていたのですが、毎回同じ画像をアップロードするのもなぁと思ってやめました。絵文字で代用できるしね。同じ画像を複数の投稿で共有って無理かな、無理だよね。


まとめ

超簡単に天気予報bot作れました。あまり参考にならないかもしれませんが、ほんとにこれだけです。