🌟

【python】gBizINFO APIで企業分析が捗る

2024/01/27に公開

イントロダクション

gBizINFO(ジービズインフォ)は、「世界最先端IT国家創造宣言」に基づいて運用される政府の情報提供サイトです。約400万の国内法人情報が掲載されており、法人番号、法人名、本社所在地の基本情報に加え、府省との契約情報や表彰情報など、政府が公開する様々な法人活動情報を一括検索し、閲覧できます。
 gBizINFOの情報がAPIを通じて自由に活用できることにより、取引先の最新の活動情報を社内イントラネットに取り込むなど、ビジネスにおいて多様な使い方が可能となります。

今回のゴール

本ブログ記事では、国税庁法人番号公表サイトから入手可能な法人データとgBizINFOのAPIを用いて補助金取得情報を網羅的に抽出する手法について解説します。この記事は特に、Python初学者であるビジネスマンを対象としており、経営戦略策定のための外部環境分析などに活用することを念頭に置いています。

gBizINFO APIの利用申請とアクセストークン取得

https://info.gbiz.go.jp/index.html

必要情報を入力し、利用申請をしましょう。私は個人利用として申請しました。

申請すると登録完了のメールが来ますので、記載されたURLにアクセスすると以下のようにアクセストークンが取得できます。

続いて調べたい法人番号のデータを取得しましょう。

とりあえず今回はサクッと以下のサイトでcsvでダウンロードしたものを使用します。

全件データのダウンロード|国税庁法人番号公表サイト

pythonプログラム

さて、それでは本題のgBizINFO APIを使っていきましょう。

環境

Ubuntu 22.04.3 LTS
Python 3.10.12

ディレクトリ構成

project
├── settings.ini
├── data
├── tests
└── code
  └── program.py

環境変数定義ファイルを作成

settings.iniファイルを作成し、そこに環境変数定義ファイルを作成します

[api_credentials]
api_token = 取得したAPIトークンを入力してください
api_endpoint = https://info.gbiz.go.jp/hojin/v1/hojin/

法人番号ファイルを格納

取得した法人番号のcsvファイルを「data」ディレクトリに格納します。

プログラム実行ファイルを作成

「code」ディレクトリに以下のprogram.pyファイルを作成します。

使用するcsvファイルのファイル名を変更することを忘れずに。

import time
import os
import requests
import configparser
import pandas as pd
from datetime import datetime
from tqdm import tqdm

#csvファイルのファイル名を定義
csv_name = '使用するcsvファイルのファイル名を入力してください.csv'

# 設定ファイルの読み込み
config = configparser.ConfigParser()
config.read('../settings.ini')

# 設定ファイルからAPIトークンとエンドポイントを取得
token = config.get('api_credentials', 'api_token')
base_url = config.get('api_credentials', 'api_endpoint')

# HTTPヘッダー
headers = {
    "Accept": "application/json",
    "X-hojinInfo-api-token": token
}

# 補助金情報を取得する関数
def get_subsidy_info(corp_nums):
    results = []
    request_count = 0
    for corp_num in tqdm(corp_nums, desc="Processing"):
        try:
            r = requests.get(url=f"{base_url}{corp_num}/subsidy", headers=headers, timeout=300)
            if r.status_code == 200:
                res = r.json()["hojin-infos"][0]
                results.append(res)
            else:
                results.append({'error': r.status_code})
            request_count += 1

            # 5000リクエストごとに10分間休憩
            if request_count % 5000 == 0:
                time.sleep(600)
        except requests.exceptions.RequestException as e:
            results.append({'error': str(e)})
    return pd.json_normalize(results, errors='ignore')

# CSVファイルのパスを設定
current_directory = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(os.path.dirname(current_directory), 'data', csv_name)

# CSVファイルから全ての法人番号を読み込む
corp_data = pd.read_csv(csv_file_path, encoding='shift_jis')
all_corp_nums = corp_data.iloc[:, 1].tolist()

# 補助金情報を取得
df = get_subsidy_info(all_corp_nums)

# 今日の日付を取得
today_date = datetime.now().strftime('%Y%m%d')

# CSVに保存するファイル名とパスを設定(ファイル名に日付を追加)
csv_filename = f'all_subsidy_data_{today_date}.csv'
csv_path = os.path.join(os.path.dirname(current_directory), 'data', csv_filename)

# データフレームをCSVに保存
df.to_csv(csv_path, index=False)

print(f"Data saved to {csv_path}")

program.pyを実行します。

6000リクエストごとに10分間のアクセス制限がかかるようなので、5000リクエストごとに10分間の休止を入れる設定にしています。

結構時間がかかるので、時間の余裕のある時に実行してみてください。

このような形式でcsvファイルが出力されます。
「subsidy」列に各法人の取得した補助金情報が記載されています。

今回は補助金情報を取得しましたが、財務情報や調達情報などの情報が得られるようです。

ではまた。

Discussion