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

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

C#で東京メトロオープンデータAPIを使って駅情報を取得する

C# 鉄道

さて、今回も東京メトロオープンデータAPIを使ってみましょう。

タイトルでは駅情報を取得するとなっていますが、正しくはodpt:Stationで指定する東京メトロ駅情報を取得するです。

東京メトロ駅情報を取得する

東京メトロの駅情報は、JSON.NETを使って取得したJSON-LD形式のデータをパース(デシリアライズ)させます。その時、型を指定しますので事前に下記のようにStationクラスを定義しておきましょう。

using Newtonsoft.Json;
using System;

namespace TokyoMetro.Apis
{
    public class Station
    {
        [JsonProperty("@context")]
        public string Context { get; set; }

        [JsonProperty("@id")]
        public string Id { get; set; }

        [JsonProperty("@type")]
        public string type { get; set; }

        [JsonProperty("owl:sameAs")]
        public string SameAs { get; set; }

        [JsonProperty("dc:date")]
        public DateTime Date { get; set; }

        [JsonProperty("dc:title")]
        public string Title { get; set; }

        [JsonProperty("ug:region")]
        public string Region { get; set; }

        [JsonProperty("odpt:operator")]
        public string Operator { get; set; }

        [JsonProperty("odpt:railway")]
        public string Railway { get; set; }

        [JsonProperty("odpt:connectingRailway")]
        public string[] ConnectingRailway { get; set; }

        [JsonProperty("odpt:Facility")]
        public string Facility { get; set; }

        [JsonProperty("odpt:passengerSurvey")]
        public string[] PassengerSurvey { get; set; }

        [JsonProperty("odpt:stationCode")]
        public string StationCode { get; set; }

        [JsonProperty("odpt:exit")]
        public string[] Exit { get; set; }
    }

}

第1回目の時に、東京メトロオープンデータを扱うためのTokyoMetroApiクラスを作っていたのでメソッドを追加してみましょう。第1回目で実装済みのGetTrainInformationメソッドの実装については「C#で東京メトロオープンデータAPIを使って遅延時間(遅延情報)を取得する - 酢ろぐ!」を、第2回目で実装済みのGetRailwayメソッドについては「C#で東京メトロオープンデータAPIを使って路線情報を取得する - 酢ろぐ!」をご覧ください。

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Net;

namespace TokyoMetro.Apis
{
    public class TokyoMetroApi
    {
        public string ConsumerKey { get; private set; }

        public string EndPointUrl { get; private set; }

        public TokyoMetroApi(string consumerKey)
        {
            ConsumerKey = consumerKey;
            EndPointUrl = "https://api.tokyometroapp.jp/api/v2/datapoints/";
        }

        public IEnumerable<TrainInformation> GetTrainInformation()
        {
            // 第1回の記事を参照してください
        }

        public IEnumerable<Railway> GetRailway()
        {
            // 第2回の記事を参照してください
        }

        public IEnumerable<Station> GetStations()
        {
            var parm = new Dictionary<string, string>();
            parm["rdf:type"] = "odpt:Station";
            parm["acl:consumerKey"] = ConsumerKey;

            var url = string.Format("{0}?{1}", EndPointUrl,
                string.Join("&", parm.Select(p => string.Format("{0}={1}", p.Key, p.Value))));

            // JSON-DLを取得する
            var client = new WebClient()
            {
                Encoding = System.Text.Encoding.UTF8
            };
            var json = client.DownloadString(url);

            return JsonConvert.DeserializeObject<Station[]>(json);
        }
   }
}

さて、実際に使う際には下記のようにコンシューマキーを指定して、TokyoMetroApiクラスのインスタンスを生成してGetStationsメソッドを実行します。

var consumerKey = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
var api = new TokyoMetroApi(consumerKey);

var stations = api.GetStations();

下図のように東京メトロ駅情報が取得できます。

f:id:ch3cooh393:20140923193521p:plain

関連記事:C#で扱う東京メトロオープンデータAPI