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



以下の手順でZAIM APIを利用できるようにしましょう。
以下の流れでZaim APIの利用が開始できます。
ログインが完了したら、アプリケーションの「新しいアプリケーションを追加」をクリックしましょう。


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


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


「詳細を表示」をクリックし、
以上でZaim APIの登録作業は完了です。
まずは必要な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にアクセス」してください。


「ログインして許可する」をクリックすると、PINコードを取得できます。
取得したPINコードを
verifier = input("PINコードを入力してください: ")
でターミナルに入力し、Enterを押しましょう。
これにより、
・Access Token
・Access Token Secret
を取得することができます。
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をインストールします。



以下のコードを実行すれば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を活用したコード例



Zaim APIを活用したデータ出力のアイデアとして、下記のコードもご紹介します。
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データを取り出し、家計簿を作る方法について解説しました。



csvファイルまで出力できたら、そこからpythonで家計簿を作成してきましょう。
csv出力後の家計簿作成方法はまた別の記事でご紹介しますので、楽しみにお待ちください!
最後まで読んでいただきありがとうございました。それではまた次の記事で!