前回までのおさらい。
統計データを取得するには、
統計表情報取得によって得られる “統計表 ID ” と、
メタ情報取得によって得られる “項目コード” が必要でした。
統計表情報によって “統計表 ID” を得ることに成功したのが前回です。
今回はこの “統計表 ID” を使って、
その統計表に対するメタ情報を取得します。
メタ情報取得のリクエスト URL はつぎのようになります。
1 |
http://api.e-stat.go.jp/rest/2.0/json/getMetaInfo?appId=xxxxxx&statsDataId=0003080162 |
というわけで前回までのコードに追加する形で、
コード全体は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
namespace EstatSample { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; class Program { static void Main(string[] args) { var baseUrl = "http://api.e-stat.go.jp/rest/2.0/app/json/"; var appId = "xxxxxx"; // 自分のアプリケーション ID を貼り付けて下さい。 var getStatsList = baseUrl + "getStatsList?" + "appId=" + appId; var surveyYears = "&surveyYears=2012"; var statsCode = "&statsCode=00200524"; var requestUrl = getStatsList + surveyYears + statsCode; var json = RequestToAPI(requestUrl); if (json.Length >= 100) Console.WriteLine(json.Substring(0, 100)); var dic = Json.Parse(json) as Dictionary<string, object>; var table_inf = dic.GetValue("GET_STATS_LIST/DATALIST_INF/TABLE_INF"); object[] objects; if (table_inf.GetType().IsArray) objects = table_inf as object[]; else objects = new object[] { table_inf }; var tableList = objects != null ? objects.OfType<Dictionary<string, object>>().ToArray() : null; if (tableList == null) throw new System.NullReferenceException(); foreach (var table in tableList) { var id = table.GetValue("@id") as string; var title = table.GetValue("TITLE/$") as string; Console.WriteLine("id=" + id + " : " + title); } var dataId = tableList.First().GetValue("@id") as string; var getMetaInfo = baseUrl + "getMetaInfo?" + "appId=" + appId; var statsDataId = "&statsDataId=" + dataId; requestUrl = getMetaInfo + statsDataId; json = RequestToAPI(requestUrl); dic = Json.Parse(json) as Dictionary<string, object>; var meta_inf = dic.GetValue("GET_META_INFO/METADATA_INF/CLASS_INF/CLASS_OBJ"); if (meta_inf.GetType().IsArray) objects = meta_inf as object[]; else objects = new object[] { meta_inf }; var metaList = objects != null ? objects.OfType<Dictionary<string, object>>().ToArray() : null; if (metaList == null) throw new System.NullReferenceException(); foreach (var meta in metaList) { var id = meta.GetValue("@id") as string; var name = meta.GetValue("@name") as string; Console.WriteLine("id=" + id + " : " + name); } Console.Read(); } } } |
45 行目以降が今回追加したコードです。
前回までで取得した統計表に関するデータの一番最初の統計表 ID を使用するようにして、
メタ情報取得に関するコードを追加しています。
Json クラスや GetValue() 拡張メソッド等に関するコードは今回省略しています。
詳細は前回までの記事を確認して下さい。
CLASS_OBJ タグが、統計表に対する統計データの絞込条件となり、
統計データによってその数が異なります。
今回の例に示す、統計表 ID 0003080162 に対する統計データの絞込条件として、
cat01、cat02、cat03、area、time という条件があるということがわかりました。
しかし、例えば cat01 の “男女別・性比” で絞り込もうとしたとき、
どのような値があるのかがまだわかりません。
実は、それぞれの絞込条件 CLASS_OBJ の中にさらに CLASS タグがあり、
これが絞込条件の詳細情報となります。
というわけで CLASS_OBJ タグの中の CLASS タグも表示するように改良します。
先ほどのコードの 61 行目から始まる foreach 文の中を次のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
foreach (var meta in metaList) { var id = meta.GetValue("@id") as string; var name = meta.GetValue("@name") as string; Console.WriteLine("id=" + id + " : " + name); var classes = meta.GetValue("CLASS"); if (classes.GetType().IsArray) objects = classes as object[]; else objects = new object[] { classes }; var _class = objects != null ? objects.OfType<Dictionary<string, object>>().ToArray() : null; if (_class == null) throw new System.NullReferenceException(); foreach (var c in _class) { var code = c.GetValue("@code") as string; var class_name = c.GetValue("@name") as string; Console.WriteLine("\tcode=" + code + ", name=" + class_name); } } |
それぞれの CLASS_OBJ タグの中に CLASS タグが存在するので、
foreach 文の中で CLASS タグを探索するコードを書いています。
そして、CLASS タグは複数存在する場合もあるので、
基本的に object[] で取得するようにしています。
さらに foreach 文を書いて、すべての CLASS タグの中の
code および name 属性の中身をコンソール上に表示させています。
外側の foreach 文で出力しているコンソール文字列と区別がつくように、
内側の foreach 文でコンソールに出力するときは先頭に “\t” を付けることで、
インデントを追加しています。
出力結果はこちらになります。
縦長な画像ですが、実際はスクロールして確認できると思います。
これで晴れてすべての絞込条件の表題と詳細を把握することができました。
後はこれらの条件を組み合わせて
統計データ取得をおこなうだけです。
というわけで次回はいよいよ統計データ取得です。