RESAS-APIのクライアントをJavaでつくってみました


RESAS APIのクライアントをJavaで書いてみました

RESAS APIでいろいろデータを公開してもらっていますが、
なかなかデータをとるのは一苦労です。

そして一度作ったらみんなでシェアしたほうが便利だとおもったので
作ってみました。
そしてgithubに公開したのですが、いまいち検索に引っかからないので、
記事にしてみました。

※ 注意:RESASのみで、法人インフォはまだ対応していません。

RESAS-Client Java

githubにあげていますので、こちらからgit cloneするか zipでダウンロードして利用してください。

RESASのAPI一覧へのリンク

https://opendata.resas-portal.go.jp/docs/api/v1/index.html
https://opendata.resas-portal.go.jp/docs/api/v1/detail/index.html

簡単な使い方の説明 内水面漁船隻数を例に

各クラスにRequestとResultと、テスト用のクラスがあります。
テスト用のクラスで、手で僕がテストしてとれるのをみたぐらいになっています。
サンプル的にどうぞ
(一部のテストクラスはまとまっちゃっていますが、ご了承ください スマヌ(-人-;))

RESAS APIの送受信をURLをベースにクラス名と変数を作成しています。

URLに沿った名前とそれにRequest/Result/RequetTestみたいな感じのクラスになっています。

内水面漁船隻数のAPIからデータを取得したいとするとURLが以下のようになります。

  • api/v1/fishery/riverBoat/forStacked

クラス名をURLに合わせてつくっているので、クラスはFisheryRiverBoatForStacked***というなまえになっています。

***の部分は、送信用のパラメータを持つクラスはRequest、受信用のパラメータを持つクラスはResultとなっています。

- HTTPのリクエストのパラメータをもつクラス FisheryRiverBoatForStackedRequest
- 受け取るクラス  FisheryRiverBoatForStackedResult
- テストでつかった送信クラス FisheryRiverBoatForStackedRequestTest

 送信とAPIのキー

送信するには、以下のクラスを使います。

  • ResasHttpAccess httpのリクエストをするクラス
    sendStringにRequestのurlとパラメータを渡します。
    このクラスのなかにAPIのキーをかくところがありまが、実行時にjavaの引数に-DXPIKEY=******という形で渡します。

  • ResasUtil パラメータをセットするクラス
    Requestにlistにしたパラメータ名と値をそれぞれ渡します

合わせてみてみる

gitcloneしてきてもらい
FisheryRiverBoatForStackedRequestTestを見てみてください。

テストクラスにサンプルがあるのでみてみてください。以下抜粋です。


    @Test
    public void test() throws ParseException, IOException {
        ObjectMapper om = new ObjectMapper();

        List<String> paramNames = new ArrayList<String>();
        paramNames.add("prefCode");

        List<String> paramValues = new ArrayList<String>();

        paramValues.add("1");

        StringBuffer params = ResasUtil.addParameters(paramNames, paramValues);

        String result = ResasHttpAccess.sendString("api/v1" + FisheryRiverBoatForStackedRequest.url, params.toString());

        System.out.println(result);
        FisheryRiverBoatForStackedResult resultData = om.readValue(result,
                FisheryRiverBoatForStackedResult.class);

FisheryRiverBoatForStacked a = resultData.getResult();
    }

最後に

一通りのクラスがあるので、ご利用くださいませ。
また、まだまだ抽象化や簡単にできるところがあるので皆さんのリクエストやヘルプお待ちしております。

(゚∀゚)地元が素敵な街になりますよう