LoginSignup
4
9

More than 5 years have passed since last update.

ZaimAPIを利用して月々の収支を見える化する

Last updated at Posted at 2018-08-03

目的

家計簿アプリ(Zaim)への入力を自動化することで家計の見える化の労力を削減を目指します。

利用サービス・言語

・ZaimAPI(https://dev.zaim.net/home)
家計簿アプリへの入出力を提供しているAPIになります。

OAuth1.0
GoogleAPIとかはOAuth2だった気がする
違いがいまいちわかってないのでいつか記事にできたらと思います。

・Python3(https://docs.python.jp/3/tutorial/index.html)
説明は不要だと思います。

準備

・アクセストークンの取得
こちらを参考にさせていただきました。
http://qiita.com/kosystem/items/7728e57c70fa2fbfe47c

・カテゴリIDの取得
入力時、支出のカテゴリIDが必要になります。
今回はあらかじめ取得しておき、辞書型でglobalに置いておきます。
pythonからRestで取得する場合はこちら

get_category.py
def category():
    endpoint = 'https://api.zaim.net/v2/category'
    r = requests.get(endpoint, auth=auth)
    return r.text

コード

Zaim.py
consumer_key = '**************************'
consumer_secret = '**************************'
access_token = '**************************'
access_secret = '**************************'


auth = OAuth1(consumer_key, consumer_secret, access_token, access_secret)

def register_payment(payment_list):
    endpoint = "https://api.zaim.net/v2/home/money/payment"
    company = '備考とかコメントとか'
    for pay in payment_list:
        data = {'mapping': 1, 'category_id': pay['category_id'],
                'genre_id': pay['genre_id'],
                'amount': pay['salary'], 'date': pay['salary_day'],
                'place': company, 'comment': pay['comment']}
        # print(data)

    # 出費を入力
    r = requests.post(endpoint, data=data, auth=auth)
    return r.text


def main():
    # 引き落とし日
    day = '20XX-0X-XX'
    # 出費の一覧
    out = {
            "社会保険":100,
            "生命保険":100,
            "所得税":100,
            "住民税":100,
            "電気代":100,
            "水道代":100,
            "携帯費":100,
            "Wifi費":100,
            "家賃":100
        }

    # 出費科目に対するジャンルとカテゴリの一覧
    spending_list = {
                    '社会保険':{'genre_id':'11301','category_id':'113'},
                    '生命保険':{'genre_id':'11301','category_id':'113'},
                    '所得税':{'genre_id':'11302','category_id':'113'},
                    '住民税':{'genre_id':'11304','category_id':'113'},
                    '電気代':{'genre_id':'10502','category_id':'105'},
                    '水道代':{'genre_id':'10501','category_id':'105'},
                    '家賃':{'genre_id':'10602','category_id':'106'},
                    '携帯費':{'genre_id':'10403','category_id':'104'},
                    'Wifi費':{'genre_id':'10403','category_id':'104'},
                    }
    # 出費科目と金額の取得
    for genre, salary in out.items():
      salary = str(salary)
      # print(genre, salary)
      category_id = spending_list[genre]['category_id']
      genre_id =  spending_list[genre]['genre_id']

      if not salary == '0':
        payment = [{'category_id': category_id, 'salary': salary, 'genre_id':genre_id,
                    'salary_day': day, 'comment': ''}, ]
        register_payment(payment)

解説

Get、Postはここを参考にさせてもらいました
http://d.hatena.ne.jp/wwwcfe/20120511/python_requests_oauth

開発を行っているSublimeText3上でinput()の入力を受ける方法を知らないのでテキストファイルからの読み込みにしています。
コマンドプロンプトからの実行で毎回手入力をする場合は読み込み部分をinput()に書き換えてください。

POSTは引数Paramsじゃなくてdata

課題

Webから見るとデータは即時反映されますがスマホアプリからだと反映が遅いと感じました。
→再ログインを促されるのでログインしなおすと反映されていました。

普段の買い物の記録を入れ忘れると貯金がたまっていっているように見える
→普段の買い物をすべてクレジット・デビッドカードにしてWEB通帳から入出金履歴を抜いてこれば解決する?

参考
http://qiita.com/kosystem/items/7728e57c70fa2fbfe47c

4
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
9