都道府県コードや産業分類など、地域の情報(地域経済分析システム)を取得するやり方のひとつに RESAS がある。
RESAS は、2015 年から内閣府の地方創生推進室が開始したサービスで、2016 年から API の提供を開始しており、利用目的などのユーザー登録をすれば誰でも無料で利用できます。
中には都道府県コードなどの単純なデータもあるので、とりあえず使ってみるサンプルです。
都道府県コード
都道府県コードを取得するサンプルはこんな感じ。
public class ResasClient { private string _BaseUrl = "https://opendata.resas-portal.go.jp/"; public async Task<IEnumerable<Prefecture>> GetPrefecturesAsync(string key) { string prefecturesUri = "api/v1/prefectures"; string url = _BaseUrl + prefecturesUri; string response = await GetHttpResponse(key, url); ApiResult<Prefecture>? result = null; if (response != null) { var options = new JsonSerializerOptions(); result = JsonSerializer.Deserialize<ApiResult<Prefecture>>(response, options); } return result?.Result ?? new List<Prefecture>(); } private async Task<string> GetHttpResponse(string key, string url) { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("X-API-KEY", key); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response1 = await client.GetAsync(url); var response2 = await response1.Content.ReadAsStringAsync(); return response2; } } }
以下のような API からは以下の JSON データが返却されるので、丁度良いクラスで受け取るとよいです。
{ "message":null, "result":[{ "prefCode":1,"prefName":"北海道"}, ... {"prefCode":46,"prefName":"鹿児島県"}, {"prefCode":47,"prefName":"沖縄県"} ] }
JSON 対応クラスの例
public class ApiResult<T> { [JsonPropertyName("message")] public string Message { get; set; } = ""; [JsonPropertyName("result")] public IEnumerable<T>? Result { get; set; } } public class Prefecture { /// <summary> /// 都道府県コードを取得または設定します。 /// </summary> [JsonPropertyName("prefCode")] public int Code { get; set; } = 0; /// <summary> /// 都道府県名を取得または設定します。 /// </summary> [JsonPropertyName("prefName")] public string Name { get; set; } = ""; }
テスト
RESAS API を利用するためにはユーザーごとの API キーが必要です。 API キーの管理については、過去に記述したとおり、アプリケーションでの利用に気をつけてください。
安易に API キーをコード中に含めないことを強く推奨します。(テストコードでも)
public class Tests { private string ApiKey { get; set; } = ""; [OneTimeSetUp] public void OneTimeSetUp() { // var api = Environment.GetEnvironmentVariable("RESAS_API", EnvironmentVariableTarget.User); DotNetEnv.Env.Load(".env"); var key = DotNetEnv.Env.GetString("RESAS_API"); ApiKey = key; } [Test] public async Task RESAS_都道府県コード() { var client = new ResasClient(); var prefectures1 = await client.GetPrefecturesAsync(ApiKey); Assert.AreEqual(prefectures1.Count(), 47); } }
サンプル
GitHub にサンプルを公開しています。サンプルでは、産業大分類を追加しています。
単純にテキストファイルから読み込む例も追加。(ネットから正しくデータを取得できなかった場合などに利用するとよいかも)