PHP
OpenWeatherMap

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

More than 1 year has 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作れました。あまり参考にならないかもしれませんが、ほんとにこれだけです。