Python

【Python】EDINETのAPI v2を使って決算書類データをダウンロードする

この記事は約8分で読めます。

 

今回は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から可能です

Loading...

 

また登録には、電話番号が必要となります。

電話番号入れるときには、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を活用することで、企業の公式な財務情報を効率的に取得し、分析やモニタリングの自動化が可能です。投資家や分析担当者にとって、リアルタイムでのデータアクセスは大きなメリットとなります。

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました