技術ブログ

群馬オープンデータのラッパーAPIをGo言語で作ってみました

author: yterajimadate: 2016-04-25tags: golang, gunma, open-data

きっかけ

群馬県 - 群馬県オープンデータサイト

群馬県のオープンデータがある程度整備されたようで専用サイトが公開されました。ファイルフォーマットはデータによってまちまちですが, プログラム的に加工すればどうにか使えるようにはなっているようです。

とりあえず CSV データを取得して加工, JSON を返す Web API になるように Go 言語でいじってみました。

データソースは 2 公共機関・公共施設情報市町村役場 の CSV になります。

この記事で登場する該当の CSV データの著作権は 群馬県 に帰属し, クリエイティブ・コモンズ・ライセンス 表示4.0.国際 によって公開されています。

ライセンスの詳細については 群馬県 - 群馬県オープンデータサイト利用規約 を参照してください。

コード

gunma-opendata-go-samples/yakuba-api

動作確認

vendoring に gom を使っているので $ gom run main.go で起動し, curljq コマンドで取得結果を確認しています。

役場API

JSON データが取得できることが確認できました。

処理内容

元データが cp932 の CSV なので少し面倒でした。

  1. CSV データの取得
  2. 文字コードを cp932 から utf-8 に変換
  3. gocsv を使って CSV を構造体に変換
  4. 各市町村役場の URL 情報がなぜか HTML の a タグなので URL 部分を正規表現で抽出し変換
  5. 構造体を JSON に変換しつつレスポンス出力

NOTICE: アクセスの度に CSV データを取得しに行くので実用する場合にはデータのキャッシュ処理が必要です。

データを使ってみて感じたこと

  • せめて cp932 に加えて utf-8 のデータを用意して欲しい
    • プログラムで処理する場合文字コード変換処理が必要
  • CSV の各フィールドはできれば英語がいい
  • 緯度, 経度については x, y ではなく Latitude, Longtitude のようにきちんと書いて欲しい
  • URL 情報が a タグなのは明らかにおかしいので直して欲しい
    • 前橋市役所の場合, <a href=""http://www.city.maebashi.gunma.jp/"" target=""_blank"" >ホームページへ</a> になっている

最後に

データは公開されるようになったので周辺環境の整備が必要になるかなと思います。例えばラッパー API を開発して保守する動きや API 情報の整備が必要になりそうです。

Code for Gunma の人たちはそういうことしたりするのだろうか?