連載:VS 2005 Expressプログラミング

第2回 livedoor提供のお天気WebサービスをC#で使う

デジタルアドバンテージ 遠藤 孝信
2006/06/28
Page1 Page2 Page3 Page4

livedoor提供の「お天気Webサービス」

 続いては「今日の天気」アプリの“コア”となる、livedoor提供の、

「お天気Webサービス(Livedoor Weather Web Service / LWWS)」

を使って天気情報を取得する部分を作りましょう。まずはこのWebサービスについて簡単に説明しておきます。

■お天気Webサービスの概略

 livedoorでは天気情報をプログラム(コード)から直接取得可能にするお天気Webサービスを公開しています。このWebサービスが存在しなければ「今日の天気」アプリは実現できませんでした。まずは、このようなサービスを無償で提供しているlivedoorさんに感謝です。

 ところで、Webサービスというと.NETではSOAPと呼ばれる方式によるアクセスが一般的なのですが、このお天気Webサービスはそれとはだいぶ異なっていて、REST(REpresentational State Transfer)と呼ばれる方式でアクセスします。

 といっても難しいことは特になく、いくつかのパラメータを追加したURLにアクセスすると、その結果がXMLデータとして返ってくるというだけです。

 例えば、次のURLをクリックしてみてください。このURLでは「city=63」と「day=today」という2つのパラメータを指定していますが、これは「63:東京」の「今日」を意味します。

http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today

 次のようなXMLデータがブラウザに表示されるはずです。

お天気Webサービスで取得できる天気情報のXMLデータ
livedoorのお天気Webサービスはアクセス方式としてRESTを採用しており、パラメータを付加したURLにアクセスすることにより、結果をXMLデータとして取得できる。

 見て分かるように、このXMLデータは東京地方の今日の天気に関するデータです。以上がREST形式で提供されているお天気Webサービスのほとんどすべてといってよいでしょう。非常にシンプルです。

 指定可能なパラメータや、返ってくるXMLデータの項目の意味については「お天気Webサービス仕様」に詳しく記述されています。

 「今日の天気」アプリでは、設定ファイルである「cityid.txt」で指定された地域IDをURLに含めてお天気Webサービスにアクセスし、返ってきたXMLデータから必要な部分だけを切り出して利用しています。この、地域IDを指定してWebサービスにアクセスし、必要なデータを切り出すという処理を次に実装します。

■livedoorお天気Webサービス用のクラス

 お天気Webサービスからの天気情報の取得処理は、「今日の天気」アプリ本体とは完全に独立した内容です。ですので、この処理は1つのクラスとして記述しましょう。オブジェクト指向でいうところの「カプセル化」です。

 このクラスの名前は「LWWSクラス」とします。LWWSクラスに必要な仕様は次のようになります。

メソッド/プロパティ 概要
コンストラクタ 地域IDをパラメータに指定する。
Refreshメソッド お天気Webサービスにアクセスしてオブジェクトの内部状態を更新する。
Titleプロパティ 天気情報の見出しを文字列で取得する (例:「東京都 東京 - 今日の天気」)
Tenkiプロパティ 天気情報を文字列で取得する (例:「曇時々雨」)
Iconプロパティ 天気を表すアイコンをIconオブジェクトとして取得する
Linkプロパティ 該当するlivedoor天気情報のURLを文字列で取得する (例:「http://weather.livedoor.com/area/13/63.html?v=1」)
PublicTimeプロパティ 予報の発表日時をDateTimeオブジェクトとして取得する
Availableプロパティ 取得した天気情報が有効かどうかをBool値で取得する
LWWSクラスの仕様
コンストラクタに地域IDを指定してオブジェクトを作成し、Refreshメソッドを呼び出すことによりオブジェクトの内容を更新する。実際の天気情報は各プロパティから取得する。

 LWWSクラスでは、コンストラクタに地域IDを指定してオブジェクトを作成します。63番を指定してクラスを“New”すると東京地方用の「LWWSオブジェクト」が出来上がるといった具合です。

 そしてLWWSオブジェクトのRefreshメソッドが呼び出されると、実際にWebサービスにアクセスし、得られたXMLデータから必要な情報を抜き出し、オブジェクトのフィールドに保持しておきます。この時点でAvailableプロパティはtrueとなります。XMLデータが正しく取得できなかった場合には、Availableプロパティはfalseとします。

 各プロパティは、保持しているフィールドの内容を返すだけです。

■LWWSクラスの追加

 C# Expressで新しいクラスを追加するには、ソリューション・エクスプローラでプロジェクト名を右クリックし[追加]−[新しい項目]を実行します。次のようなダイアログが開きますので、テンプレートで「クラス」を選択し、ファイル名を「lwws.cs」として[追加]ボタンをクリックします。

[新しい項目の追加]ダイアログ
ソリューション・エクスプローラでプロジェクト名を右クリックし[追加]−[新しい項目]を実行して開く。プロジェクトに新しいクラス(のソース・コード)を追加するには、このダイアログで「クラス」を選択し、ファイル名を指定して[追加]ボタンをクリックする。

 さて、LWWSクラスの大枠のコードは次のようになります。ここではすでに、各フィールドとプロパティ、そしてコンストラクタとRefreshメソッドの一部を記述しています。

public class LWWS
{
  // フィールド
  string _tenki; // 例:曇時々雨
  string _title; // 例:東京都 東京 - 今日の天気
  string _link;  // 例:http://weather.livedoor.com/area/13/63.html?v=1
  bool _available; // データが正しく取得できればtrue
  DateTime _publicTime; // 予報の発表日時
  Icon _icon; // タスクトレイ用のアイコン

  // プロパティ
  public string Tenki { get { return _tenki; } }
  public string Title { get { return _title; } }
  public string Link { get { return _link; } }
  public bool Available { get { return _available; } }
  public DateTime PublicTime { get { return _publicTime; } }
  public Icon Icon { get { return _icon; } }

  string lwwsUrl; // お天気WebサービスのURL

  // コンストラクタ
  public LWWS(int id)
  {
    string lwws = "http://weather.livedoor.com/forecast/webservice/rest/v1?city={0}&day=today";
    lwwsUrl = String.Format(lwws, id);
  }

  public void Refresh()
  {
    _available = false;

    // XMLデータの取得と解析
    // アイコンの作成

    _available = true;
  }
}
LWWSクラスの大枠のコード

 コンストラクタ(LWWSメソッド)では、パラメータで地域IDを受け取り、お天気Webサービス用のURLを変数lwwsUrlに格納しています。

 以下では、 の「XMLデータの取得と解析」部分と、 の「アイコンの作成」部分について解説していきます。


 INDEX
  VS 2005 Expressプログラミング
  第2回 livedoor提供のお天気WebサービスをC#で使う
    1.プロジェクトの作成
    2.フォームの設定/タスクトレイ・アイコン
  3.livedoor提供の「お天気Webサービス」
    4.XMLデータの取得と解析/天気アイコンの作成
 
インデックス・ページヘ  「VS 2005 Expressプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間