OpenWeatherMap APIにアクセスしてみたのでメモ。今のところ安定して動いているし無料サービスにしては内容も精度も必要十分かなと思います。天気予報取れるし。
AFNetworking使ったサンプルですみません。
// OpenWeatherMapの天気出力APIエンドポイント
NSString *kOpenWeatherMap3HoursForecastAPI @"http://api.openweathermap.org/data/2.5/weather?units=metric&lat=%f&lon=%f";
// 適当な緯度経度
CLLocationDegrees latitude = 39.01;
CLLocationDegrees longitude = 141.68;
NSString *urlString = [NSString stringWithFormat:kOpenWeatherMap3HoursForecastAPI, latitude, longitude];
[[AFHTTPRequestOperationManager manager] GET:urlString
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
OpenWeatherMapで定義された JSON形式のWeatherオブジェクトが取得できます。
{
base = "cmc stations";
clouds = {
all = 8;
};
cod = 200;
coord = {
lat = "39.01";
lon = "141.68";
};
dt = 1386343001;
id = 2111530;
main = {
"grnd_level" = "1003.63";
humidity = 100;
pressure = "1003.63";
"sea_level" = "1024.69";
temp = "-1.631";
"temp_max" = "-1.631";
"temp_min" = "-1.631";
};
name = Ofunato;
sys = {
country = JP;
message = "0.0047";
sunrise = 1386279482;
sunset = 1386313849;
};
weather = (
{
description = "sky is clear";
icon = 02n;
id = 800;
main = Clear;
}
);
wind = {
deg = "281.503";
speed = "2.31";
};
}
Weatherオブジェクトデータ形式
キー | 意味 | 出力するかどうか |
---|---|---|
id | 街のID | 常に出力 |
dt | データの時刻。GMTのunixtime形式(いわゆるEPOCH) | 常に出力 |
coord.lat coord.lng | 街の緯度経度 | 常に出力 |
name | 街名 | 常に出力 |
main.temp | 気温(ケルビン)。摂氏に変換するには273.15を引く。 | 常に出力 |
main.humidity | 湿度(%) | 常に出力 |
main.temp_min main.temp_max | 最低気温、最高気温 | オプション |
main.pressure | 気圧(hPa) | 常に出力 |
wind.speed | 風速(meter / sec) | 常に出力 |
wind.deg | 風向き (度。meteorological 時計回り?) | 常に出力 |
clouds.all | 雲の割合?(Cloudiness in %) | 常に出力 |
weather | 気象状態 | オプション |
rain.3h | 3時間毎の降水量 | オプション |
snow.3h | 3時間ごとの降雪量 | オプション |
weather.description(天気の概要)、name(土地名)は多言語化されているようなのですが、残念ながら日本語はサポートされていません。
単位について
imperial
, metric
を選択することが出来ます。先の例ではunits=metric
を指定して摂氏で取得しています。
項目 | default | imperial | metric |
---|---|---|---|
温度 | ケルビン | 華氏 | 摂氏 |
気圧 | hPa | hPa | hPa |
風速 | メートル / 秒 | 不明 | メートル / 秒 |
単位指定が無い場合は気温がケルビンになる点に注意。
単位にimperial
を指定した際の風速はノットでもないしmile / secでもないしバグってるかも?(Bug #111 Wrong wind speed value with imperial units)