Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

目的

家計簿アプリ(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

utsuki
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