Windows Formsで作る天気取得アプリ

― Web API × JSON × Dictionary を体験する ―


はじめに

今回は、Windows Forms を使った

天気取得アプリ を題材に、

  • Dictionary(連想配列)
  • Web API へのアクセス
  • JSONの解析
  • PictureBoxで画像表示

をまとめて理解していきます。

このサンプルは、

「デスクトップアプリがインターネットとつながる」

最初の体験になります。


1. アプリの全体構造

処理の流れはとてもシンプルです。

① 都道府県を選択

② Webサービスにアクセス

③ JSONデータを受信

④ アイコンURLを取得

⑤ PictureBoxに表示

つまり、

UI → 通信 → データ解析 → 表示

という構造です。


2. Dictionaryで都市コードを管理する

Dictionary<string, string> cityNames;

これは、

KeyValue
東京都3
大阪府1
愛知県2
福岡県10

のように、

「名前」と「コード」をセットで管理する

ための仕組みです。

初期化

this.cityNames = new Dictionary<string, string>();

this.cityNames.Add("東京都", "3");
this.cityNames.Add("大阪府", "1");
this.cityNames.Add("愛知県", "2");
this.cityNames.Add("福岡県", "10");

ComboBoxへ追加

foreach (KeyValuePair<string, string> data in this.cityNames)
{
    areaBox.Items.Add(data.Key);
}

表示しているのは Key(都道府県名)だけです。


3. Web APIへアクセスする

string cityCode = cityNames[areaBox.Text];

string url = "https://********/weatherCheck.php?city=" + cityCode;

HttpClient client = new HttpClient();
string result = client.GetStringAsync(url).Result;

ここがポイント

  • HttpClient → Web通信を行うクラス
  • GetStringAsync → 非同期で取得
  • .Result → 強制的に同期処理

本来は async/await を使いますが、

今回は流れを理解する段階です。


4. JSONデータを解析する

Webから返ってくるデータはJSON形式です。

例:

{
  "url": "https://example.com/icon.png"
}

JSONを解析するコード

JObject jobj = JObject.Parse(result);

string todayWeatherIcon = (string)((jobj["url"] as JValue).Value);

分解して理解

部分意味
jobj[“url”]urlの値を取得
as JValue型変換
.Value実際の中身を取得
(string)文字列へ変換

ここは少し難しいですが、

JSONはそのままstringではない

という点を押さえましょう。


5. 画像を表示する

weatherIcon.ImageLocation = todayWeatherIcon;

PictureBox の ImageLocation にURLを入れるだけで、

  • 自動でダウンロード
  • 自動で表示

してくれます。

とても便利です。


6. よくあるつまずきポイント

① cityNames[areaBox.Text] でエラー

未選択のまま実行すると例外が出ます。

対策例:

if (!cityNames.ContainsKey(areaBox.Text))
{
    MessageBox.Show("都市を選択してください");
    return;
}

② 通信エラー

ネット接続がない場合、例外が発生します。

本来は try-catch を入れます。


③ .Result の問題

UIが固まることがあります。

実務では:

await client.GetStringAsync(url);

を使います。


7. 実務とのつながり

この構造は実務で頻出です。

  • 株価取得アプリ
  • 為替情報取得
  • AI API接続
  • 地図表示
  • 在庫管理システム

すべて、

「Webからデータを取得して表示する」

という同じ構造です。


まとめ

今回のサンプルは、

Windowsアプリ × Web通信 × JSON解析

という、非常に実務的な構造です。

ここまで理解できれば、

「画面を作れる人」から

「アプリを作れる人」へ一歩進みます。


訪問数 17 回, 今日の訪問数 17回

記事下広告