EDINETのAPI仕様書を読んでみたPart1
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