LoginSignup
4
5

More than 5 years have passed since last update.

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

Posted at

動機

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

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

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5