TimesBlog
TimesBlog
null256code

null256code

私はどこにでもいるエンジニアです。 このページは自作ブログです。

タグ検索

環境構築 (3)
好き (1)
技術 (1)

ZaimのAPIで遊んだ時のメモ

2024/5/18

結構前に家計簿アプリのデータで遊べないかなと思い、ZaimのAPIを触ったことがあった。
ある程度触ったあとにクレジットカードの履歴などが取得できないことに気づき、問い合わせたところ 金融機関との自動連携で取得したデータは法人向けの API のみ開放しております。 とのことだったので当初の目的は果たせなかったのだが、何点か備忘用のメモを残しておく。(当時のtimesから引っ張ってきた)

ちなみに「課金したら金融機関のデータも取得できる」という記事も調べたら出るが、問い合わせた結果上の回答だったということを改めて書いておく。

Zaim

  1. ZaimのAPIで遊んだ時のメモ - 2/3

    Zaim APIの認証に関してドキュメントには以下のように書いてあり、 OAuth 1.0a 使ってねという旨が書いてあった。

    Check the format of OAuth 1.0a in this page: http://oauth.net/core/1.0a/
    
    Zaim OAuth format is nearly the same with Twitter API: https://dev.twitter.com/docs/auth/oauth
    
    Zaim API requires that all OAuth requests be signed using the HMAC-SHA1 algorithm.

    (内容が当時から更新されていない感は少しある)

    どう実装するかと思ったが、ScribeJavaを用いると比較的簡単に実装できた。
    ScribeJavaのサンプルにある .build(TwitterApi.instance()); のようなサービス別のクラスは使えないので、以下のように OAuth10aService を Overrideして使った。

    @Configuration
    class ZaimApiClientConfig(
        @Value("\${consumer_key}") private val consumerKey: String,
        @Value("\${consumer_secret}") private val consumerSecret: String,
    ) {
        companion object {
            const val API_BASE_URL = "https://api.zaim.net/v2"
        }
    
        @Bean
        fun zaimOAUthClient(): OAuth10aService = ServiceBuilder(consumerKey).apiSecret(consumerSecret)
            .build(object : DefaultApi10a() {
                override fun getRequestTokenEndpoint() = "${API_BASE_URL}/auth/request"
                override fun getAccessTokenEndpoint() = "${API_BASE_URL}/auth/access"
                override fun getAuthorizationBaseUrl() = "https://auth.zaim.net/users/auth"
            })
    }
    Zaim
    ScribeJava
  2. ZaimのAPIで遊んだ時のメモ - 3/3

    Zaimのアプリケーション名だが、先頭に数字を使うことができないようだ。
    アプリケーション作成時に先頭に数字を入力した場合は以下のようなエラー表示になった。

    見た限り上記の制約は書かれていなかったのと、エラー表示も不適切なため最初は何故アプリケーションが作成できないのか分からず時間をかなり使ってしまった…。

    Zaim