MENU
Apple製品を今お得に購入するなら!詳細はこちら CLICK!

Zaim APIとPythonでcsvデータから家計簿を作ろう!

本ページにはプロモーションが含まれています。
Zaim API アイキャッチ
Fuyutsuki

家計簿を作るのに悩んでいる方、ここではZAIM APIとPythonを使ってcsvデータを取り出し、家計簿を作る方法について解説します。

目次

無料家計簿アプリZaimのAPIを活用する

Fuyutsuki

以下の手順でZAIM APIを利用できるようにしましょう。

以下の流れでZaim APIの利用が開始できます。

STEP
Zaim Develpersに登録

Zaim Developer Center(https://dev.zaim.net/home)にログインします。

※事前にアプリ等でZaimアカウントの作成は完了しておきましょう。

Zaim Developersにログイン
STEP
Zaim Develpersからコンシューマ IDとコンシューマシークレットを取得する

ログインが完了したら、アプリケーションの「新しいアプリケーションを追加」をクリックしましょう。

Zaim Developersで登録_

アプリケーションを登録画面で、下記の例を参考に入力しましょう。

サービスのURLは任意のURLを入力します。

Zaim Developersでアプリケーションを登録_

登録が完了すると以下の画面になります。

Zaim Developers 登録済みのアプリケーション

「詳細を表示」をクリックし、

コンシューマ IDとコンシューマシークレットを控えておきましょう。

以上でZaim APIの登録作業は完了です。

STEP
Pythonでアクセストークンとアクセスシークレットを取得する

まずは必要なPythonライブラリをインストールします。

pip install requests requests-oauthlib

Pythonのライブラリインストール手順についてはこちらの記事をご参照ください。

Zaimのデータを取得および操作するためのPythonパッケージを取得しましょう。

pip install pyzaim

リクエストトークンを取得します。

from requests_oauthlib import OAuth1Session

CONSUMER_KEY = "あなたのConsumerKey"
CONSUMER_SECRET = "あなたのConsumerSecret"
REQUEST_TOKEN_URL = "https://api.zaim.net/v2/auth/request"
AUTHORIZE_URL = "https://auth.zaim.net/users/auth"
ACCESS_TOKEN_URL = "https://api.zaim.net/v2/auth/access"

# OAuth1Sessionを作成
oauth = OAuth1Session(CONSUMER_KEY, client_secret=CONSUMER_SECRET, callback_uri="oob")

# リクエストトークン取得
fetch_response = oauth.fetch_request_token(REQUEST_TOKEN_URL)
resource_owner_key = fetch_response.get("oauth_token")
resource_owner_secret = fetch_response.get("oauth_token_secret")

print("認可URLにアクセスしてください:")
print(f"{AUTHORIZE_URL}?oauth_token={resource_owner_key}")

verifier = input("PINコードを入力してください:")

oauth = OAuth1Session(
    CONSUMER_KEY,
    client_secret=CONSUMER_SECRET,
    resource_owner_key=resource_owner_key,
    resource_owner_secret=resource_owner_secret,
    verifier=verifier
)

# アクセストークン取得
oauth_tokens = oauth.fetch_access_token(ACCESS_TOKEN_URL)
access_token = oauth_tokens["oauth_token"]
access_token_secret = oauth_tokens["oauth_token_secret"]

print("Access Token:", access_token)
print("Access Token Secret:", access_token_secret)

ターミナルに表示される「認可URLにアクセス」してください。

Zaim 連携を許可

「ログインして許可する」をクリックすると、PINコードを取得できます。

取得したPINコードを

verifier = input("PINコードを入力してください: ")

でターミナルに入力し、Enterを押しましょう。

これにより、

・Access Token

・Access Token Secret
を取得することができます。

・Access Token
・Access Token Secret
は控えておけば、次回以降はPIN入力は不要になります。

Zaimからcsvデータで取得する

家計簿データを取得する

先ほど控えたAccess Token、Access Token Secretを元に以下のコードを実行しましょう。

from requests_oauthlib import OAuth1Session

ACCESS_TOKEN = "取得したAccess Token"
ACCESS_TOKEN_SECRET = "取得したAccess Token Secret"

oauth = OAuth1Session(
    CONSUMER_KEY,
    client_secret=CONSUMER_SECRET,
    resource_owner_key=ACCESS_TOKEN,
    resource_owner_secret=ACCESS_TOKEN_SECRET
)

params = {
    "mapping": 1,
    "start_date": "2024-01-01",   # 取得開始日 (YYYY-MM-DD)
    "end_date":   "2024-12-31",   # 取得終了日
    "limit": 100                  # 1回の取得件数(最大100)
}

response = oauth.get("https://api.zaim.net/v2/home/money", params=params)
print(response.status_code, response.url)     # 実際に投げたURLを確認
print(response.json())      

取得したデータをcsvに保存する

先程取得したデータをcsvに保存しましょう。

pip install pandas

でpandasをインストールします。

Fuyutsuki

以下のコードを実行すればcsv出力が完了です!

import pandas as pd

data = response.json()["money"]
df = pd.DataFrame(data)
df.to_csv("zaim_data.csv", index=False, encoding="utf-8-sig")
print("CSV出力完了")

Zaim APIを活用したコード例

Fuyutsuki

Zaim APIを活用したデータ出力のアイデアとして、下記のコードもご紹介します。

csvに出力する項目を希望の形に設定することができます。

import csv
import os
from datetime import datetime, timedelta
from requests_oauthlib import OAuth1Session

# =======================
# 事前に取得した4つのキーを設定
# =======================
CONSUMER_KEY = "あなたのCONSUMER_KEY"
CONSUMER_SECRET = "あなたのCONSUMER_SECRET"
ACCESS_TOKEN = "あなたのACCESS_TOKEN"
ACCESS_TOKEN_SECRET = "あなたのACCESS_TOKEN_SECRET"

# =======================
# OAuth1 セッション作成
# =======================
oauth = OAuth1Session(
    CONSUMER_KEY,
    client_secret=CONSUMER_SECRET,
    resource_owner_key=ACCESS_TOKEN,
    resource_owner_secret=ACCESS_TOKEN_SECRET
)

# =======================
# 1. 日付範囲を設定(直近1年間)
# =======================
end_date   = datetime.today().date()
start_date = end_date - timedelta(days=365)

# Zaim API は YYYY-MM-DD 形式
start_str = start_date.strftime("%Y-%m-%d")
end_str   = end_date.strftime("%Y-%m-%d")

# =======================
# 2. 家計簿データを取得
# =======================
money_url = (
    f"https://api.zaim.net/v2/home/money"
    f"?mapping=1&start_date={start_str}&end_date={end_str}"
)
res = oauth.get(money_url)
res.raise_for_status()
money_list = res.json()["money"]

# =======================
# 3. カテゴリ・ジャンル・口座一覧を取得
# =======================
def fetch_dict(api_path, key):
    r = oauth.get(f"https://api.zaim.net/v2/{api_path}")
    r.raise_for_status()
    data = r.json()[key]
    return {int(item["id"]): item["name"] for item in data}

category_map = fetch_dict("category", "categories")
genre_map    = fetch_dict("genre",    "genres")
account_map  = fetch_dict("account",  "accounts")

# =======================
# 4. IDを名称に置換 & 日本語カラム
# =======================
converted = []
for m in money_list:
    row = {}
    row["日付"]       = m["date"]
    row["方法"]       = m["mode"]
    row["カテゴリ"]   = category_map.get(int(m["category_id"]), "")
    row["カテゴリの内訳"] = genre_map.get(int(m["genre_id"]), "")
    row["支払元"]     = account_map.get(int(m["from_account_id"]), "-")
    row["入金先"]     = account_map.get(int(m["to_account_id"]), "-")
    row["品目"]       = m["name"]
    row["メモ"]       = m["comment"]
    row["お店"]       = m["place"]
    row["通貨"]       = m["currency_code"]

    amount = m["amount"]
    row["収入"] = amount if m["mode"] == "income"   else 0
    row["支出"] = amount if m["mode"] == "payment"  else 0
    row["振替"] = amount if m["mode"] == "transfer" else 0

    converted.append(row)

# =======================
# 5. CSV 出力
# =======================
filename = f"zaim-backup-{start_str}_to_{end_str}.csv"
fieldnames = ["日付","方法","カテゴリ","カテゴリの内訳","支払元","入金先",
              "品目","メモ","お店","通貨","収入","支出","振替"]

with open(filename, "w", encoding="utf-8-sig", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(converted)

print(f"直近1年間のデータを出力しました → {os.path.abspath(filename)}")

まとめ

今回はZaim APIとPythonを使ってcsvデータを取り出し、家計簿を作る方法について解説しました。

Fuyutsuki

csvファイルまで出力できたら、そこからpythonで家計簿を作成してきましょう。

csv出力後の家計簿作成方法はまた別の記事でご紹介しますので、楽しみにお待ちください!

最後まで読んでいただきありがとうございました。それではまた次の記事で!

Zaim API アイキャッチ

この記事が気に入ったら
フォローしてね!

この記事を書いた人

快適なデスク環境で作業効率アップをテーマに、様々なガジェットを紹介している20代エンジニアです。

作業効率化につながるようなプログラミングの情報についても発信中。

目次