RubyでZaim APIを利用する
クレジットカード連携していてかつAPIを公開している家計簿サイトを探していたんだけど、MoneyForwardとかMoneyTreeは無理だった。
ZaimができそうなのでAPI叩くメモ
Gemがあったけど使えなかったのでOauthでアクセスする方法を記載する
手順
- Zaim Developers Centerでの登録
- OAuthのトークンを取得
- APIを叩く
1.Zaim Developers Centerにアクセスしてアプリケーションを作る
ログインすると下記の画面が出るので、新しいアプリケーションを追加を選択
この後出てくるConsumer Key, Consumer Secretなどをメモっておく
2. OAuthのトークンを取得
require 'oauth'
CONSUMER_KEY = '1で取得したConsumer Key'
CONSUMER_SECRET = '1で取得したConsumer Secret'
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET,
site: 'https://api.zaim.net',
request_token_path: '/v2/auth/request',
authorize_url: 'https://auth.zaim.net/users/auth',
access_token_path: '/v2/auth/access')
request_token = consumer.get_request_token(oauth_callback: 'http://google.com')
system('open', request_token.authorize_url)
print "Verifierを入力してください:"
oauth_verifier = gets.chomp.strip
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)
p access_token.token
p access_token.secret
これを実行するとブラウザが開きます。
ログインボタンを押して認証してください
ただ、なぜか下記のようなログイン完了画面が出ますがどんだけ待っても移動しません
ここで右クリック→ページのソースの表示でソースを見ます。
そこでverifyで検索してください。すると何やらトークンのようなものが見つかるはずです。
それをコンソールにコピペしてください。(上記のプログラムを実行すると入力待ちになっているはず)
すると、2行文字列が表示されます。
上の文字列がACCESS TOKEN、下の文字列がACCESS TOKEN SECREETです。これもメモリます
3. APIを叩く
下記のようなプログラムを作ってみました。
require 'oauth'
require 'json'
CONSUMER_KEY = '1で取得したCONSUMER KEY'
CONSUMER_SECRET = '1で取得したCONSUMER SECRET'
ACCESS_TOKEN = '2で取得したACCESS TOKEN'
ACCESS_TOKEN_SECRET = '2で取得したACCESS TOKEN SECRET'
API_URL = 'https://api.zaim.net/v2/'
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET,
site: 'https://api.zaim.net',
request_token_path: '/v2/auth/request',
authorize_url: 'https://auth.zaim.net/users/auth',
access_token_path: '/v2/auth/access')
access_token = OAuth::AccessToken.new(consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# 認証できているかを確認
verify = access_token.get("#{API_URL}home/user/verify")
p JSON.parse(verify.body)
# カテゴリの取得
categories = access_token.get("#{API_URL}home/category")
p JSON.parse(categories.body)
# ジャンルの取得
genres = access_token.get("#{API_URL}home/genre")
p JSON.parse(genres.body)
# 出金(食料品)
access_token.post("#{API_URL}home/money/payment", category_id: 101, genre_id: 10101, amount: 12345)
APIリファレンスを元に作れば色々やれそうです。
おわり
参考にしたサイト
http://webcache.googleusercontent.com/search?q=cache:EFodIPiebBwJ:debulog.com/%3Fp%3D64+&cd=4&hl=ja&ct=clnk&gl=jp
http://webcache.googleusercontent.com/search?q=cache:qxrk9yuIAA4J:hatamon.blogspot.com/2014/04/oinknotezaim.html+&cd=1&hl=ja&ct=clnk&gl=jp