RubyでZaim APIを利用する

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

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

## １．Zaim Developers Centerにアクセスしてアプリケーションを作る
[Zaim Developers Center](https://dev.zaim.net/)にアクセス

ログインすると下記の画面が出るので、新しいアプリケーションを追加を選択
![スクリーンショット 2015-10-15 00.52.50.png](https://qiita-image-store.s3.amazonaws.com/0/67424/f4925665-b827-e8c8-5bd1-707f09dbf6cd.png)

名称とか組織とかサービスのURLは適当で良いっぽい？
![スクリーンショット 2015-10-15 00.54.39.png](https://qiita-image-store.s3.amazonaws.com/0/67424/55811b62-97a5-9246-9564-890e0472688a.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](https://qiita-image-store.s3.amazonaws.com/0/67424/a3a8d39c-f139-cc78-9a6b-8954cd317603.png)

ここで右クリック→ページのソースの表示でソースを見ます。
そこでverifyで検索してください。すると何やらトークンのようなものが見つかるはずです。

それをコンソールにコピペしてください。（上記のプログラムを実行すると入力待ちになっているはず）
すると、２行文字列が表示されます。
上の文字列が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リファレンス](https://dev.zaim.net/home/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