![見出し画像](https://assets.st-note.com/production/uploads/images/141255863/rectangle_large_type_2_13b5236fd2e66ff368338de1755a91b2.png?width=1200)
【Python】EDINETのAPI v2を使って決算書類データをスクレイピングするサンプルコード
今回はEDINETのAPI v2を使用して上場企業の決算情報をダウンロードする方法について紹介します
EDINETとは
EDINET(Electronic Disclosure for Investors' NETwork)は、日本の金融庁が運営する電子開示システムです。このシステムを通じて、企業や法人は有価証券報告書や四半期報告書などの開示書類を電子的に提出し、一般の投資家を含む利用者がこれらの文書を自由に閲覧できるようになっています。EDINETのAPI v2は、これらの開示情報をプログラムを通じて自動的に取得するためのインターフェースを提供します。
EDINETのAPIについて
EDINET API v2 の概要
EDINET API v2はRESTfulなAPIで、JSON形式でデータを提供します。このAPIを使うことで、ユーザーは手動でウェブサイトから情報をダウンロードすることなく、プログラムを用いて直接、企業の開示情報を取得できます。APIを利用する主な目的は、自動化された環境で大量の開示情報を効率的に処理することです。
前準備
EDINETからは、APIを使ってデータをダウンロードすることができます。
APIを使うためには、
アカウントの作成
APIキーの発行
が必要になります。
APIの取得方法
EDINETのAPIはv2から利用の際にAPI鍵が必要になっています
API鍵を取得するにはまず以下のURLからユーザー登録を行う必要があります
ユーザー登録は下記のURLから可能です
https://api.edinet-fsa.go.jp/api/auth/index.aspx?mode=1
また登録には、電話番号が必要となります。
電話番号入れるときには、080-XXXX-XXXXという番号の場合、 +81(Japan)を選ぶので、フォームのところには80-XXXX-XXXXと入れないとMessage届きません。
電話番号認証をクリアしアカウントが登録出来たらAPI鍵が発行されます
アカウント画面がうまく開くことができない場合
なぜかこのサイトはログイン後リダイレクトしたホップアップにユーザー情報が表示される使用であるため、ホップアップをブロックするようにしているとAPI鍵の画面が表示されません(恐らく大半のブラウザはそうなっていると思います)
なのでChromeの場合は 「設定」 → 「プライバシーとセキュリティ」→「サイトの設定」→「ホップアップとリダイレクト」にアクセスして以下のURLを許可リストに追加する必要があります
https://api.edinet-fsa.go.jp
入力した後再度サイトにアクセスすると、ホップアップ画面にAPIキーが表示されます。
API経由で決算情報を取得する
決算情報を取得するには、まず提出された書類の一覧を取得し、その中から決算関連の書類(有価証券報告書など)を特定します。次に、その書類IDを使用して具体的な内容をダウンロードします。
import requests
import pandas as pd
# APIのエンドポイント
url = 'https://disclosure.edinet-fsa.go.jp/api/v2/documents.json'
# パラメータの設定(例: 2024年5月17日の書類を取得)
params = {
'date': '2024-05-17',
'type': 2, # 2は有価証券報告書などの決算書類
"Subscription-Key":"発行したAPI鍵"
}
# APIリクエストを送信
response = requests.get(url, params=params)
# レスポンスのJSONデータを取得
data = response.json()
data
<実行結果>
{'metadata': {'title': '提出された書類を把握するためのAPI',
'parameter': {'date': '2024-05-17', 'type': '2'},
'resultset': {'count': 258},
'processDateTime': '2024-05-19 00:01',
'status': '200',
'message': 'OK'},
'results': [{'seqNumber': 1,
'docID': 'S100TDUA',
'edinetCode': 'E14601',
'secCode': None,
'JCN': '2010401079382',
'filerName': 'PayPayアセットマネジメント株式会社',
'fundCode': 'G13514',
'ordinanceCode': '030',
'formCode': '07A000',
'docTypeCode': '120',
'periodStart': '2023-08-26',
'periodEnd': '2024-02-26',
'submitDateTime': '2024-05-17 09:00',
'docDescription': '有価証券報告書(内国投資信託受益証券)-第9期(2023/08/26-2024/02/26)',
'issuerEdinetCode': None,
'subjectEdinetCode': None,
'subsidiaryEdinetCode': None,
'currentReportReason': None,
'parentDocID': None,
'opeDateTime': None,
'withdrawalStatus': '0',
'docInfoEditStatus': '0',
'disclosureStatus': '0',
'xbrlFlag': '1',
'pdfFlag': '1',
'attachDocFlag': '1',
'englishDocFlag': '0',
'csvFlag': '1',
'legalStatus': '1'},
こんな感じで決算書類の情報を取得できます
ここからJSONのレスポンスをデータフレームにまとめるならこんな感じです
# データフレームに変換
documents = data['results']
df = pd.DataFrame(documents)
# 特定のカラムだけを選択
df_filtered = df[['docID', 'secCode','edinetCode', 'filerName', 'docDescription', 'submitDateTime']]
# 決算情報のみをフィルタリング
df_financial = df_filtered[df_filtered['docDescription'].str.contains('有価証券報告書')]
df_financial
<実行結果>
DocIDから決算書をZIPファイルとしてダウンロードする
これで各書類のDocIDが確認できたので、ここからこれらをZIPファイルとしてダウンロードします
コードは下記になります
(ノートブック形式で上記のコードで変数「df_financial」が定義されている前提で話を進めます)
import urllib.request
import sys
# APIキーの設定
api_key = '自分のAPI鍵'
# ドキュメントのダウンロード
for index, doc in df_financial.iterrows():
docID = doc['docID']
url = f'https://api.edinet-fsa.go.jp/api/v2/documents/{docID}?type=5&Subscription-Key={api_key}'
print(doc['edinetCode'], doc['docID'], doc['filerName'], doc['docDescription'], doc['submitDateTime'], sep='\t')
try:
# ZIPファイルのダウンロード
with urllib.request.urlopen(url) as res:
content = res.read()
output_path = f'{docID}.zip'
with open(output_path, 'wb') as file_out:
file_out.write(content)
except urllib.error.HTTPError as e:
if e.code >= 400:
sys.stderr.write(e.reason + '\n')
else:
raise e
これで各書類をZIPファイルとして取得することができました。では~
EDINET API v2を活用することで、企業の公式な財務情報を効率的に取得し、分析やモニタリングの自動化が可能です。投資家や分析担当者にとって、リアルタイムでのデータアクセスは大きなメリットとなります。