Pythonで国内の銀行コードと支店コードを取得する
WEBアプリケーションの中には、銀行口座の引き落としや振込などのために、銀行口座を入力してもらう必要があると思います。
ユーザーに自身の銀行口座を入力してもらう際には、銀行名や支店名が間違っていないかなどのバリデーションチェックなどが必要だと思います。
アプリケーションによっては銀行コードと支店コードを入力させて、その銀行コードと支店コードが本当に存在するか。
また、入力した銀行コードと支店コードをもとに自動で銀行名と支店名を取得して自動入力させるといった機能があるとより便利です。
そのためにも全ての銀行コードと支店コードが必要になりますが、どこからそれを取得するかに悩みます。
以下のようなサイトがあるので、そこからスクレイピングなどをしてリストを作るか。それでは時間がかかります。
DjangoなどPythonのWEBフレームワークなどで開発をしたいとして、いいライブラリが無いかと探してみると、zengin-pyという非常に便利なライブラリがあります。
このライブラリは定期的にCIを回して、銀行コードと支店コードを更新しているため、常に最新の状態を保っています。
ライブラリのインストール
まずは以下のpipインストールでzengin-pyをインストールします。
$ pip install zengin_code
全ての銀行コードを取得する
全ての銀行の銀行コードと銀行名を表示させるコードです。
ここでは全ての銀行コード、銀行名、銀行名のひらがなを表示させています。
from zengin_code import Bank
for code in Bank.all:
bank = Bank[code]
# 銀行コードと銀行名を出力
print({
"code": code,
"name": bank.name,
"kana": bank.kana
})
Bank
クラスが持つフィールドは以下の6つになります。
- branches : 支店情報が入ったOrderedDictオブジェクト
- code : 銀行コード
- name : 銀行名
- hira : 銀行名(ひらがな)
- kana : 銀行名(カタカナ)
- roma : 銀行名(ローマ字)
# みずほ銀行
code = "0001"
bank = Bank[code]
print(bank.code)
print(bank.hira)
print(bank.kana)
print(bank.name)
print(bank.roma)
ここではみずほ銀行
の銀行コードを指定して、フィールドを全て表示させている例になります。
0001
みずほ
ミズホ
みずほ
mizuho
指定した銀行コードの支店コードを取得
銀行名は取れたので、その銀行名の支店情報を全て取得してみます。
ここの例では上記同様にみずほ
銀行を例にします。
from zengin_code import Bank
bank_code = "0001" # みずほ銀行
bank = Bank[bank_code]
if bank:
branches = bank.branches
for code in branches:
branch = branches[code]
print({
"code": code,
"bank": branch.bank.name,
"name": branch.name,
"hira": branch.hira,
"kana": branch.kana,
"roma": branch.roma,
})
Branch
クラスが持つフィールドは以下の6つになります。
- bank : 所属している銀行のBankオブジェクト
- code : 支店コード
- name : 支店名
- hira : 支店名(ひらがな)
- kana : 支店名(カタカナ)
- roma : 支店名(ローマ字)
上記のコードを実行してみると以下のように支店情報の一覧が表示されるはずです。
{'code': '001', 'bank': 'みずほ', 'name': '東京営業部', 'hira': 'とうきよう', 'kana': 'トウキヨウ', 'roma': 'toukiyou'}
{'code': '004', 'bank': 'みずほ', 'name': '丸の内中央', 'hira': 'まるのうちちゆうおう', 'kana': 'マルノウチチユウオウ', 'roma': 'marunouchichiyuuou'}
......
銀行名を元に全ての支店名を取得する(応用編)
少し応用編です。
銀行コードではなく、銀行名を入力して、それを元に全ての支店名と銀行の情報を取得するコードです。
更に少し応用すれば自動入力をするためのサジェスト機能も作れると思います。
from zengin_code import Bank
bank_name = "みずほ" # みずほ銀行
branches = []
for code in Bank.all:
bank = Bank[code]
if ((bank.name == bank_name) or \
(bank.hira == bank_name) or \
(bank.kana == bank_name) or \
(bank.roma == bank_name)
):
branches = bank.branches
break
if branches:
print("bank name", bank.name)
for code in branches:
branch = branches[code]
# print("branch", branch)
# 支店コードと支店名を出力
print({
"code": code,
"name": branch.name,
"hira": branch.hira,
"kana": branch.kana,
"roma": branch.roma,
})
bank_name
には銀行名を入れます。
条件分岐式にはひらがな、カタカナ、ローマ字のどれかに完全一致したら、ループを抜け出して支店情報を取得するようにします。
if ((bank.name == bank_name) or \
(bank.hira == bank_name) or \
(bank.kana == bank_name) or \
(bank.roma == bank_name)
):
branches = bank.branches
break
実行すると以下のように表示されるはずです。
bank name みずほ
{'code': '001', 'name': '東京営業部', 'hira': 'とうきよう', 'kana': 'トウキヨウ', 'roma': 'toukiyou'}
{'code': '004', 'bank': 'みずほ', 'name': '丸の内中央', 'hira': 'まるのうちちゆうおう', 'kana': 'マルノウチチユウオウ', 'roma': 'marunouchichiyuuou'}
......
参考資料
Discussion