🦔

EDINETのAPI仕様書を読んでみたPart1

2024/12/22に公開

EDINETとは

企業の財務情報をAPIなどで提供する(政府の?)システムのこと。利用にあたって、APIキーの取得などが必要だったので、方法やインターフェースなどを調べていたら、v2の仕様書を見つけたのでメモがわりにまとめます。

EDINET APIの機能

二つのAPIを提供しています。

  • 書類一覧API
    • 「メタデータのみ」、「提出書類一覧及びメタデータ」の2パターンの呼び出し方がある
    • 日付などを指定
  • 書類取得API
    • 上で得られた書類情報から実際の書類データを取得するためのAPI

APIキーの発行

Chromeユーザー向け

筆者はChromeを使用しているので、こちらでのブラウザ側の設定変更について説明します。windowsのMicrosoft Edgeを利用している方はedinetの資料に書いてありますので、そちらを参照してください。こちらの設定を行わなかった場合、以降のサインアップ後に画面遷移がうまくいかないので、必ず設定してください。

右上の設定(3点リーダー)から「設定」を開いてください。(Command+,でも可能)

検索バーに「ポップアップ」と入力すると、「サイトの設定」とあるのでそちらをクリックしてください。

続いて「ポップアップとリダイレクト」をおし、以下のようにデフォルト設定部分を変更してください。

サインアップとAPIキー発行

こちらのページを開いてください。アカウントの新規作成、サインアップを行なってください。途中でメールの確認、パスワード設定、電話番号の確認などがありますので、手順に進めてください。以下のような画面に移ると思います。

必要項目を記入すると、apikeyが表示される画面に行きますので、apikeyをメモしておきましょう。こちらは、外部に公開しないことを心がけてください。(githubにコードを公開している場合は、環境変数などから読み出すようにして、gitにpushしないことに注意してください。)

APIを呼び出してみる

それでは、実際にedinetのapiの仕様を確認しながら進めていきましょう。
まず、書類一覧apiのエンドポイントは以下になります

https://api.edinet-fsa.go.jp/api/v2/documents.json

リクエストパラメータは以下の三つがあります。

Name NameJP Required Value Description
date ファイル日付 True 日付(YYYY-MM-DD形式) 書類の提出日
type 取得情報 False 1 or 2 1:メタデータのみ/2:メタデータ+書類一覧
Subscription-Key APIキー True 先ほど発行したもの 認証に利用

Pythonで簡単に呼び出してみましょう。

## zaimu.py
import requests
import os
import pandas as pd

END_POINT = 'https://disclosure.edinet-fsa.go.jp/api/v2'
API_KEY= os.getenv('EDINET_API_KEY')
submission_info_endpoint = f'{END_POINT}/documents.json'
submission_request_parameters = {
    'date': '2022-01-18',
    'type': 2,
    'Subscription-Key': API_KEY
}
submission_info_response = requests.get(
    submission_info_endpoint, submission_request_parameters
)
submission_info_json = submission_info_response.json()

raw_submission_info_df = pd.DataFrame(submission_info_json['results'])
print(raw_submission_info_df.columns)

API_KEYは環境変数に格納して、読み込むようにしています。よく分からないという方は、ターミナル上で以下を実行してから、上記コードを動かしてください。

export EDINET_API_KEY=ここにapikeyを貼り付ける

このコードでは、documentを一覧で読み込んで、pandasのデータフレームとして変換し、そのカラム情報を取り出しました。以下のように表示されたら成功です。

Index(['seqNumber', 'docID', 'edinetCode', 'secCode', 'JCN', 'filerName',
       'fundCode', 'ordinanceCode', 'formCode', 'docTypeCode', 'periodStart',
       'periodEnd', 'submitDateTime', 'docDescription', 'issuerEdinetCode',
       'subjectEdinetCode', 'subsidiaryEdinetCode', 'currentReportReason',
       'parentDocID', 'opeDateTime', 'withdrawalStatus', 'docInfoEditStatus',
       'disclosureStatus', 'xbrlFlag', 'pdfFlag', 'attachDocFlag',
       'englishDocFlag', 'csvFlag', 'legalStatus'],
      dtype='object')

続いて、先ほどのpythonコードに以下を追記してください。

submission_info_df = raw_submission_info_df[['docID', 'docTypeCode', 'edinetCode', 'secCode', 'filerName', 'docDescription']]
print(submission_info_df.head())

これにより、カラムを必要なものに絞り、データの先頭部分を表示しています。
以下のような表示ならokです。

      docID docTypeCode edinetCode secCode                filerName                                  docDescription
0  S100N8K1        None       None    None                     None                                            None
1  S100N5TR         160     E11518    None            三菱UFJ国際投信株式会社     半期報告書(内国投資信託受益証券)-第39期(令和3年4月20日-令和4年4月18日)
2  S100MXAV         120     E12444    None  三井住友トラスト・アセットマネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第8期(令和2年10月17日-令和3年10月18日)
3  S100N8O7        None       None    None                     None                                            None
4  S100MQ7D         120     E13591    None    新生インベストメント・マネジメント株式会社   有価証券報告書(内国投資信託受益証券)-第8期(令和3年4月17日-令和3年10月18日)

有価証券報告書に財務データが記載されているので、データを絞っていきましょう。ちなみにdocTypeCodeを以下で指定することで、他の書類の一覧も確認できます。

今回は有価証券報告書なので、docTypeCodeが120or130でフィルタしましょう。ただし、130は訂正有価証券報告書です。
日付を2022-01-24に変えて、以下のようにしてください。

submission_info_df = submission_info_df[submission_info_df['docTypeCode'].isin(["120", "130"])]
print(submission_info_df)

実行後が下記のようになれば成功です。(日付が土日だとエラーが出ると思う)

        docID docTypeCode edinetCode secCode               filerName                                  docDescription
6    S100N8BT         120     E12480    None      アライアンス・バーンスタイン株式会社   有価証券報告書(内国投資信託受益証券)-第2期(令和3年4月27日-令和3年10月25日)
12   S100N5DV         120     E12434    None     SOMPOアセットマネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第16期(令和3年4月27日-令和3年10月25日)
24   S100N65A         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第7期(令和2年10月27日-令和3年10月25日)
30   S100N1ID         120     E12441    None        岡三アセットマネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第4期(令和2年10月28日-令和3年10月27日)
36   S100N35D         120     E12448    None      明治安田アセットマネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第11期(令和3年4月27日-令和3年10月25日)
46   S100N95L         120     E06264    None  JPモルガン・アセット・マネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第8期(令和2年10月27日-令和3年10月25日)
47   S100N5ZE         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第18期(令和3年4月24日-令和3年10月25日)
49   S100N97D         120     E14601    None    PayPayアセットマネジメント株式会社  有価証券報告書(内国投資信託受益証券)-第1期(令和2年10月29日-令和3年10月25日)
53   S100N7DE         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第30期(令和3年4月27日-令和3年10月25日)
54   S100N6YK         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第19期(令和3年4月27日-令和3年10月25日)
60   S100N5P3         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第17期(令和3年4月27日-令和3年10月25日)
61   S100N7LW         120     E12566    None  イーストスプリング・インベストメンツ株式会社   有価証券報告書(内国投資信託受益証券)-第6期(令和3年4月27日-令和3年10月25日)
63   S100N6C1         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第17期(令和3年4月27日-令和3年10月25日)
67   S100N6LP         120     E11518    None           三菱UFJ国際投信株式会社  有価証券報告書(内国投資信託受益証券)-第8期(令和2年10月27日-令和3年10月25日)
71   S100N9CX         120     E05376   37330         株式会社ソフトウェア・サービス              有価証券報告書-第53期(令和2年11月1日-令和3年10月31日)
79   S100N9J5         130     E31504    None        マラヤン・バンキング・ベルハッド                                       訂正有価証券報告書
111  S100N9PP         130     E33807   92700      バリュエンスホールディングス株式会社              訂正有価証券報告書-第10期(令和2年9月1日-令和3年8月31日)

120を見ると、有価証券報告書と有価証券報告書(内国投資信託受益証券)があり、130を見ると訂正有価証券報告書となっているのがわかると思います。

有価証券報告書(内国投資信託受益証券)は今回不要ですので、descriptionで「受益証券」が含まれているものを除きましょう。

submission_info_df = submission_info_df[
    submission_info_df['docTypeCode'].isin(["120", "130"]) &
    ~submission_info_df['docDescription'].str.contains('受益証券', na=False)
]

print(submission_info_df)

すると

        docID docTypeCode edinetCode secCode           filerName                      docDescription
71   S100N9CX         120     E05376   37330     株式会社ソフトウェア・サービス  有価証券報告書-第53期(令和2年11月1日-令和3年10月31日)
79   S100N9J5         130     E31504    None    マラヤン・バンキング・ベルハッド                           訂正有価証券報告書
111  S100N9PP         130     E33807   92700  バリュエンスホールディングス株式会社  訂正有価証券報告書-第10期(令和2年9月1日-令和3年8月31日)

のようになれば成功です。

Discussion