読者です 読者をやめる 読者になる 読者になる

1.21 jigowatts

Great Scott!

C#で天気予報のWeb API(Weather Hacks)を使ってみる~コンソールアプリケーション

概要

夏なので毎日暑い日が続きます。今日の天気と最高気温が気になるので、Livedoorの気象データ配信サービス「Weather Hacks」のお天気WebサービスLivedoor Weather Web Service / LWWS)から情報を取得し、コンソールに出力してみます。

API仕様の詳細は以下から。weather.livedoor.com
Q&Aによると商用利用は不可です。

環境

Microsoft Visual Studio Community 2013

実装

東京の天気を取得します。
コンソールアプリなので引数でいろいろ制御してもいいですね!

using Codeplex.Data;
using System;
using System.Net;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        const string NO_VALUE = "---";

        static void Main(string[] args)
        {
            Console.WriteLine(GetWeatherText());
            Console.ReadKey();
        }

        private static string GetWeatherText()
        {
            var url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010";
            var req = WebRequest.Create(url);

            using (var res = req.GetResponse())
            using (var s = res.GetResponseStream())
            {
                dynamic json = DynamicJson.Parse(s);

                //天気(今日)
                dynamic today = json.forecasts[0];

                string dateLabel = today.dateLabel;
                string date = today.date;
                string telop = today.telop;

                var sbTempMax = new StringBuilder();
                dynamic todayTemperatureMax = today.temperature.max;
                if (todayTemperatureMax != null)
                {
                    sbTempMax.AppendFormat("{0}℃", todayTemperatureMax.celsius);
                }
                else
                {
                    sbTempMax.Append(NO_VALUE);
                }

                var sbTempMin = new StringBuilder();
                dynamic todayTemperatureMin = today.temperature.min;
                if (todayTemperatureMin != null)
                {
                    sbTempMin.AppendFormat("{0}℃", todayTemperatureMin.celsius);
                }
                else
                {
                    sbTempMin.Append(NO_VALUE);
                }

                //天気概況文
                var situation = json.description.text;
                
                //Copyright
                var link = json.copyright.link;
                var title = json.copyright.title;

                return string.Format("{0}\n天気 {1}\n最高気温 {2}\n最低気温 {3}\n\n{4}\n\n{5}\n{6}",
                    date,
                    telop,
                    sbTempMax.ToString(),
                    sbTempMin.ToString(),
                    situation,
                    link,
                    title
                    );
            }

        }
    }
}

Weather Hacksのサイトに以下の記述がある通り、JSONデータを返してくれます。

Weather Hacksでは、今日・明日・あさっての天気予報をJSONデータで取得できるWebサービスLivedoor Weather Web Service / LWWS)を提供しています。

このJSONデータのパースはDynamicJsonが簡単そうだったので使ってみました。
Package Manager Consoleで以下を実行するとインストールされます。

PM> Install-Package DynamicJson

結果

今日は少し涼しいですね!
f:id:sh_yoshida:20150809121151p:plain