Zaim をいつも使ってます。他の家計簿サービスもすごくいいんですが、差し迫ってくる感じ、意識の高そうな感じがなんとなく合わず。最も家計簿を家計簿として使えそうなZaimを使わせてもらっています。
APIが使えた
ノーマークだったんですが、実は公開されているAPIがありせっかくなので使ってみようという記事です。
手順
事前にzaimに登録してある程度使っておきます(readとかできる内容がないとおもしろくない)。
https://dev.zaim.net にアクセスします。すると下記の画面のように遷移するので、求められるままに情報を出していきます。
アクセストークンの取得
規約をみてログインを押す

zaimを使っているユーザのログイン情報を入力

新しいアプリケーションを追加 を選択

求められるままにチェックを入れる「永続的に許可する」を選択しておくと定期的に情報を更新しなくていいらしい(セキュリティには気をつけて)

アプリケーションが作られる

データが作成される。ほぼモザイク。URLとかは多分固定だと思うんだけど、ログイン後に見れる情報のようだったので一応モザイクに。

Rubyでデータを取得
以下、下記の記事の写経。
faradayでoauthを実行しようとしたら、2個ほど他にもライブラリが必要で面倒になりそのままこちらのおせわになりました。
RubyでZaim APIを利用する(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
下記の画面が表示されるのでログインすると、次のページ遷移先のソースに oauth_verifier
という項目がありそこに記載されたものを上記のコードの oauth_cerifier
に代入する。

これでアクセストークンが得られる。
require 'oauth'
require 'json'
CONSUMER_KEY = '<上記コードで得られたもの>'
CONSUMER_SECRET = '<上記コードで得られたもの>'
ACCESS_TOKEN = '<上記コードで得られたもの>'
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)
# 認証の確認
JSON.parse(verify.body)
# 入力データの確認
moneys = access_token.get("#{API_URL}home/money")
JSON.parase(moneys.body)
以上でデータの取得までできた。目的は毎月発生する金額の一括入力なので、それは作業したら追記するようにしたい。
(たぶんzaimアプリ内でできるっぽいのだけど、いまいち自分には方法がわからないかった。めちゃくちゃデータが追加されてハイパー赤字になった)
ほぼ、 こちらの記事と同じ内容となったためぜひそちらをご覧になっていただくことをおすすめしたい。