Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

RubyでZaim APIを利用する

More than 5 years have passed since last update.

RubyでZaim APIを利用する

クレジットカード連携していてかつAPIを公開している家計簿サイトを探していたんだけど、MoneyForwardとかMoneyTreeは無理だった。
ZaimができそうなのでAPI叩くメモ
Gemがあったけど使えなかったのでOauthでアクセスする方法を記載する

手順

  1. Zaim Developers Centerでの登録
  2. OAuthのトークンを取得
  3. APIを叩く

1.Zaim Developers Centerにアクセスしてアプリケーションを作る

Zaim Developers Centerにアクセス

ログインすると下記の画面が出るので、新しいアプリケーションを追加を選択
スクリーンショット 2015-10-15 00.52.50.png

名称とか組織とかサービスのURLは適当で良いっぽい?
スクリーンショット 2015-10-15 00.54.39.png

この後出てくる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

これを実行するとブラウザが開きます。
ログインボタンを押して認証してください

ただ、なぜか下記のようなログイン完了画面が出ますがどんだけ待っても移動しません
スクリーンショット 2015-10-15 01.03.38.png

ここで右クリック→ページのソースの表示でソースを見ます。
そこで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

seteen
Angularを広めたいエンジニア Ruby, Angularが好きです。
https://twitter.com/yazumoto
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away