Skip to content

Zaimのデータを取得・操作するPythonパッケージ

License

Notifications You must be signed in to change notification settings

liebe-magi/pyzaim

Repository files navigation

pyzaim

PyPI version All Contributors

logo

Zaimのデータを取得・操作するPythonパッケージ

概要

大きくわけて2つの処理を行うパッケージです。

  • Zaim APIのラッパークラス
    • Zaim APIのアクセストークンの発行
    • Rest APIとして提供されている処理の実行
  • Seleniumを用いたデータ取得
    • Zaimにはクレジットカードや銀行口座から自動でデータ取得する機能があるが、APIではそれらのデータにはアクセスできない
    • これらの情報を取得するため、Seleniumのwebdriver(Chrome)を用いてデータを取得

インストール

pip install pyzaim

準備

  • Zaimアカウントの作成

  • Zaim Developersでのアプリケーションの登録 (コンシューマID、コンシューマシークレットの発行)

    1. https://dev.zaim.net/users/login にアクセスし、新しいアプリケーションを追加
    2. ブラウザアプリを選択し、サービスのURLに以下を入力
      http://127.0.0.1:5000/callback
      
    3. コンシューマID、コンシューマシークレットが発行される
  • Google Chromeおよびseleniumの導入

使い方

Zaim APIのラッパークラスの使い方

  • アクセストークンの発行
from pyzaim import get_access_token

get_access_token()

# コンシューマIDとコンシューマシークレットを聞かれるので入力
# 認証ページのURLが表示されるので、アクセスして許可
# 遷移先ページのcopyボタンを押して、oauth_verifierをコピー
# コピーしたoauth_verifierを入力
# 問題なければアクセストークンとアクセスシークレットが表示される
  • APIを利用してデータを取得・操作
from pyzaim import ZaimAPI

api = ZaimAPI('コンシューマID', 'コンシューマシークレット',
              'アクセストークン', 'アクセスシークレット', 'verifier')

# 動作確認 (ユーザーID等のデータが取得されて、表示されればOK)
print(api.verify())

# データの取得
data = api.get_data()

# 支払いデータの登録
api.insert_payment_simple('日付(datetime.date型)', '金額(int)', 'ジャンル名',
                          '口座名', 'コメント', '品名', '店舗名') # 後半4つは任意入力

# 使用できるジャンル名は以下で確認できる
print(api.genre_itos)

# 使用できる口座名は以下で確認できる
print(api.account_itos)

# 支払いデータの更新 (更新対象データのIDはapi.get_data()で確認)
api.update_payment_simple('更新対象データのID', '日付(datetime.date型)', '金額(int)',
                          'ジャンル名', '口座名', 'コメント', '品名', '店舗名') # 後半4つは任意入力

# 支払いデータの削除
api.delete_payment('削除対象のデータのID')

seleniumを用いたデータ取得

from pyzaim import ZaimCrawler

# Chrome Driverの起動とZaimへのログイン、ログインには少し時間がかかります
crawler = ZaimCrawler('ログインID', 'ログインパスワード',
                    driver_path='Chrome Driverのパス'(PATHが通っていれば省略可),
                    headless=False) # headlessをTrueにするとヘッドレスブラウザで実行できる

# データの取得 (データの取得には少し時間がかかります、時間はデータ件数による)
data = crawler.get_data('取得する年(int)', '取得する月(int)', progress=True) # progressをFalseにするとプログレスバーを非表示にできる

# 終了処理
crawler.close()

ブランチの運用について

本リポジトリのブランチについては以下の運用といたします。

main

  • リリース用ブランチ。
  • このブランチにマージした時点で新たにタグを打ち、PyPIにアップロードします。
  • このブランチには直接PRを出さないでください。

develop

  • 開発用の常駐ブランチ。
  • すべてのコミットはこのブランチに一度マージし、動作を確認した上でmainにマージします。
  • PRはこのブランチに対して行ってください。

feature-*

  • 新規開発用のブランチ。
  • 必ずdevelopから分岐し、developにマージする。
  • *には開発やバグ修正などの対応内容を簡潔に記入。
    • 例: feature-add-headless-mode

Contributors ✨

Thanks goes to these wonderful people (emoji key):

りーべ
りーべ

📆 👀 💻 📖
Ponk02
Ponk02

💻
zenjiro
zenjiro

💻 👀
omatsu555
omatsu555

💻
Y.Tory
Y.Tory

💻
o-matsu
o-matsu

💻
kefi550
kefi550

💻
tra (とら) (Taisuké)
tra (とら) (Taisuké)

💻
日高 凌
日高 凌

💻

This project follows the all-contributors specification. Contributions of any kind welcome!