セージ の メモ書き

メモこそ命の恩人だ

C# - OpenWeatherMap

OpenWeatherMap

openweathermap.org

  • 気象データを取得できるサービス。
  • WEB API により取得。API キーの取得が必要。
  • 都市名や郵便番号などを指定して取得できる。

API キーの取得

  • OpenWeatherMap でアカウントを作成する。

  • メールで API キーを取得できる。サインイン後の画面からも確認できる。


API の利用方法

openweathermap.org

  • 上記リンクを参照。
  • 各サービスの仕様が公開されている。
  • リクエスト/レスポンスの仕様がわかる。

以下、現在の気象データを取得する方法。

openweathermap.org

パラメータ 内容
q "都市名,国コード Tokyo,jp
units 測定単位 metric (メートル法)
lang 言語 ja
appid APIキー 32桁の英数字

ブラウザ or curl で確認。

http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp&units=metric&lang=ja&appid=APIキー

以下のデータを取得できたことを確認。

{"coord":{"lon":139.6917,"lat":35.6895},"weather":[{"id":801,"main":"Clouds","description":"薄い雲","icon":"02d"}],"base":"stations","main":{"temp":35.04,"feels_like":40.38,"temp_min":29.75,"temp_max":37.66,"pressure":1005,"humidity":49},"visibility":10000,"wind":{"speed":9.77,"deg":190},"clouds":{"all":20},"dt":1656135671,"sys":{"type":2,"id":2038398,"country":"JP","sunrise":1656098792,"sunset":1656151250},"timezone":32400,"id":1850144,"name":"東京都","cod":200}


C# からの利用

  • 取得データをデシリアライズする。
  • クラスは、JSON 文字列から自動生成する。 (Visual Stuido の機能)
public class Rootobject
{
    public Coord coord { get; set; }
    public Weather[] weather { get; set; }
    public string _base { get; set; }
    public Main main { get; set; }
    public int visibility { get; set; }
    public Wind wind { get; set; }
    public Rain rain { get; set; }
    public Clouds clouds { get; set; }
    public int dt { get; set; }
    public Sys sys { get; set; }
    public int timezone { get; set; }
    public int id { get; set; }
    public string name { get; set; }
    public int cod { get; set; }
}

public class Coord
{
    public float lon { get; set; }
    public float lat { get; set; }
}

public class Main
{
    public float temp { get; set; }
    public float feels_like { get; set; }
    public float temp_min { get; set; }
    public float temp_max { get; set; }
    public int pressure { get; set; }
    public int humidity { get; set; }
    public int sea_level { get; set; }
    public int grnd_level { get; set; }
}

public class Wind
{
    public float speed { get; set; }
    public int deg { get; set; }
    public float gust { get; set; }
}

public class Rain
{
    public float _1h { get; set; }
}

public class Clouds
{
    public int all { get; set; }
}

public class Sys
{
    public int type { get; set; }
    public int id { get; set; }
    public string country { get; set; }
    public int sunrise { get; set; }
    public int sunset { get; set; }
}

public class Weather
{
    public int id { get; set; }
    public string main { get; set; }
    public string description { get; set; }
    public string icon { get; set; }
}
using var client = new HttpClient();

var apikey = "********************************";
var responseMessage = await client.GetAsync($"http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp&units=metric&lang=ja&appid={apikey}");

if (!responseMessage.IsSuccessStatusCode) return;

var json = await responseMessage.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<Rootobject>(json);

var coord = result.coord;
var main = result.main;
var weather = result.weather.FirstOrDefault();
var summary =
    $"都市名:{result.name}, 経度:{coord.lon}, 緯度:{coord.lat}, " +
    $"温度:{main.temp}, 最高気温:{main.temp_max}, 最低気温:{main.temp_min}, " +
    $"湿度:{main.humidity}%, 大気圧:{main.pressure}, " +
    $"気象条件:{weather.description}";
Debug.WriteLine(summary);
// 都市名:東京都, 経度:139.6917, 緯度:35.6895, 温度:35.63, 最高気温:37.11, 最低気温:31.55, 湿度:46%, 大気圧:1004, 気象条件:薄い雲

// 気象データを取得できたことを確認。



以上