さて、今回も東京メトロオープンデータ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();
下図のように東京メトロ駅情報が取得できます。