Pythonから金融庁のEDINET APIを使って有価証券報告書を取得する

金融庁は電子開示システム「EDINET」のWeb APIを公開しています。この記事は、PythonからEDINET APIを使って有価証券報告書を検索したり、有価証券報告書を取得する方法を紹介しています。

requestsモジュールのインストール

PythonからWeb APIを呼び出すには、requestsモジュールをインポートする。そのため、初めに一度だけrequestsモジュールをインストールする必要がある。

Pythonのrequestsモジュールをインストールするには、次のコマンドを実行する。

pip install requests

または、次のコマンドを実行する。

python -m pip install requests

メタデータの取得

メタデータとは、日付ごとの提出書類一覧に関する基礎情報のことである。メタデータには、件数や更新日時などが含まれる。

EDINETからメタデータを取得するには、書類一覧APIを使う。

EDINET書類一覧API
エンドポイント https://disclosure.edinet-fsa.go.jp/api/バージョン/documents.json
HTTPメソッド GET
応答形式 JSON
暗号化 TLS (Transport Layer Security)
クロスドメイン通信 許可しない

EDINET書類一覧APIのリクエストパラメータは、次のとおり。

EDINET書類一覧APIのリクエストパラメータ
パラメータ名 項目名 必須 設定値 説明
date ファイル日付 Yes 日付(YYYY-MM-DD形式) 出力対象とする提出書類一覧のファイル日付を指定します。
type 取得情報 No 1 メタデータのみを取得します。指定が無い場合のデフォルト値です。
2 提出書類一覧及びメタデータを取得します。

PythonからEDINET書類一覧APIを使ってメタデータを取得するサンプルは、次のとおり。

import requests

# 書類一覧APIのエンドポイント
url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"

# 書類一覧APIのリクエストパラメータ
params = {
  "date" : "2019-04-25"
}

# 書類一覧APIの呼び出し
res = requests.get(url, params=params, verify=False)

# レスポンス(JSON)の表示
print(res.text)

上記のサンプルプログラムを実行すると、次のように表示される。

{
  "metadata":
    {
      "title": "提出された書類を把握するためのAPI",
      "parameter":
        {
          "date": "2019-04-25",
          "type": "1"
        },
      "resultset":
        {
          "count": 370
        },
      "processDateTime": "2019-04-29 00:02",
      "status": "200",
      "message": "OK"
    }
}

提出書類一覧及びメタデータの取得

提出書類一覧及びメタデータを取得するには、書類一覧APIのリクエストパラメータtypeに2(提出書類一覧及びメタデータを取得)を指定する。

PythonからEDINET書類一覧APIを使って提出書類一覧及びメタデータを取得するサンプルは、次のとおり。

import requests

# 書類一覧APIのエンドポイント
url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"

# 書類一覧APIのリクエストパラメータ
params = {
  "date" : "2019-04-25",
  "type" : 2
}

# 書類一覧APIの呼び出し
res = requests.get(url, params=params, verify=False)

# レスポンス(JSON)の表示
print(res.text)

上記のサンプルプログラムを実行すると、次のように表示される。

{
  "metadata":
    {
      "title": "提出された書類を把握するためのAPI",
      "parameter":
        {
          "date": "2019-04-25",
          "type": "1"
        },
      "resultset":
        {
          "count": 370
        },
      "processDateTime": "2019-04-29 00:02",
      "status": "200",
      "message": "OK"
    }
  "results": [
    {
      "seqNumber": 1,
      "docID": "S100FIZV",
      "edinetCode": "E11764",
      "secCode": null,
      "JCN": "1010401064261",
      "filerName": "T&Dアセットマネジメント株式会社",
      "fundCode": "G08875",
      "ordinanceCode": "030",
      "formCode": "07A000",
      "docTypeCode": "120",
      "periodStart": "2018-07-26",
      "periodEnd": "2019-01-25",
      "submitDateTime": "2019-04-25 09:00",
      "docDescription": "有価証券報告書(内国投資信託受益証券)-第13期(平成30年7月26日-平成31年1月25日)",
      "issuerEdinetCode": null,
      "subjectEdinetCode": null,
      "subsidiaryEdinetCode": null,
      "currentReportReason": null,
      "parentDocID": null,
      "opeDateTime": null,
      "withdrawalStatus": "0",
      "docInfoEditStatus": "0",
      "disclosureStatus": "0",
      "xbrlFlag": "1",
      "pdfFlag": "1",
      "attachDocFlag": "1",
      "englishDocFlag": "0"
    },
    {
      "seqNumber": 2,
      "docID": "S100FNKK",
      "edinetCode": "E12448",
      "secCode": null,
      "JCN": "8010401040306",
      "filerName": "明治安田アセットマネジメント株式会社",
      "fundCode": "G08415",
      "ordinanceCode": "030",
      "formCode": "995000",
      "docTypeCode": "180",
      "periodStart": null,
      "periodEnd": null,
      "submitDateTime": "2019-04-25 09:00",
      "docDescription": "臨時報告書(内国特定有価証券)",
      "issuerEdinetCode": null,
      "subjectEdinetCode": null,
      "subsidiaryEdinetCode": null,
      "currentReportReason": "第29条第2項第4号",
      "parentDocID": null,
      "opeDateTime": null,
      "withdrawalStatus": "0",
      "docInfoEditStatus": "0",
      "disclosureStatus": "0",
      "xbrlFlag": "1",
      "pdfFlag": "1",
      "attachDocFlag": "0",
      "englishDocFlag": "0"
    },
(中略)
  ]
}

EDINET書類一覧APIのレスポンス(応答)データは、次のとおり。

EDINET書類一覧APIの出力データ内容
項目名 項目ID 説明
連番 seqNumber number ファイル日付ごとの連番です。
書類管理番号 docID string 書類管理番号が出力されます。
提出者EDINETコード edinetCode string 提出者のEDINETコードが出力されます。
提出者証券コード secCode string 提出者の証券コードが出力されます。

書類の取得

EDINET APIで書類を取得するには、書類取得APIを使う。

EDINET書類取得API
エンドポイント https://disclosure.edinet-fsa.go.jp/api/バージョン/documents/書類管理番号
HTTPメソッド GET
応答形式 ZIP、PDF、JSON
暗号化 TLS (Transport Layer Security)
クロスドメイン通信 許可しない

書類取得APIのリクエストパラメータは、次のとおり。

EDINET書類一覧APIのリクエストパラメータ
パラメータ名 項目名 必須 設定値 説明
type 必要書類 Yes 1 提出本文書及び監査報告書を取得します。
2 PDFを取得します。
3 代替書面・添付文書を取得します。
4 英文ファイルを取得します。

ZIPファイルの取得

PythonからEDINET書類取得APIを使ってZIPファイルを取得するサンプルは、次のとおり。

import requests

# 書類管理番号
docid = "S100FIZV"

# 書類取得APIのエンドポイント
url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents/" + docid

# 書類取得APIのリクエストパラメータ
params = {
  "type" : 1
}

# 出力ファイル名
filename = docid + ".zip"

# 書類取得APIの呼び出し
res = requests.get(url, params=params, verify=False)

# ファイルへ出力
if res.status_code == 200:
  with open(filename, 'wb') as f:
    for chunk in res.iter_content(chunk_size=1024):
      f.write(chunk)

上記サンプルプログラムを実行すると、ZIPファイルが作成される。

PDFファイルの取得

PythonからEDINET書類取得APIを使ってPDFファイルを取得するサンプルは、次のとおり。

import requests

# 書類管理番号
docid = "S100FIZV"

# 書類取得APIのエンドポイント
url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents/" + docid

# 書類取得APIのリクエストパラメータ
params = {
  "type" : 2
}

# 出力ファイル名
filename = docid + ".pdf"

# 書類取得APIの呼び出し
res = requests.get(url, params=params, verify=False)

# ファイルへ出力
if res.status_code == 200:
  with open(filename, 'wb') as f:
    for chunk in res.iter_content(chunk_size=1024):
      f.write(chunk)

上記サンプルプログラムを実行すると、PDFファイルが作成される。

関連記事

Linuxのcurlコマンド

JuliaのHTTP.jlパッケージ

参考文献

金融庁(2021)EDINET