📝

【Python】EDINETの書類管理番号(docid)を取得する

2022/07/17に公開

2024年4月よりEDINETのAPIの仕様がversion2に変更になっています。
docidの取得については、以下のリンクをご確認ください。
https://zenn.dev/robes/articles/f6dfcc5cfbbdb6

はじめに

EDINETは、金融庁が公開している有価証券報告書などの電子開示閲覧サイトです。
有価証券報告書をPDF形式でダウンロードしたり、XBRL形式でデータとして直接取得することも可能です。
ここではEDINETから有価証券報告書をPDF形式やXBRL形式で取得するために必要な書類管理番号(docid)を取得する方法をご紹介します、

1. ライブラリのインポート

必要なライブラリをインポートします

import datetime
import requests
import pandas as pd
import time

2. 提出日を期間指定

取得したい有価証券報告書の提出日(企業がEDINETに提出した日)をstart_dateとend_dateで期間指定します。

start_date = datetime.date(2023, 5, 1)
end_date = datetime.date(2023, 7,31)

3.日付リストを作成する

対象期間の日付リストを作成します

def create_day_list(start_date=start_date, end_date = end_date):
    period = end_date - start_date
    period = int(period.days)
    day_list = []
    for d in range(period):
        day = start_date + datetime.timedelta(days=d)
        day_list.append(day)

    day_list.append(end_date)

    return day_list

day_list = create_day_list()

4. docIDを含む書類一覧の取得

一連のプログラムの肝です。
対象期間にEDINETに提出された書類一覧(メタデータ)を取得します。


def create_report_list(day_list):

    report_list =[]
    for day in day_list:
        url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"
        params = {"date": day, "type": 2}
        res = requests.get(url, params=params)
        json_data = res.json()
        time.sleep(3)

        for num in range(len(json_data["results"])):
            ordinance_code= json_data["results"][num]["ordinanceCode"]
            form_code= json_data["results"][num]["formCode"]

            #form_code=030000:有報 050000:半報 043000:四半期報告書
            #f ordinance_code == "010" and (form_code =="043000" or form_code =="050000") :
            if ordinance_code == "010" and  form_code =="030000" :
                company_name=json_data["results"][num]["filerName"]
                edi={ '会社名':company_name,
                            '書類名':json_data["results"][num]["docDescription"],
                            'docID':json_data["results"][num]["docID"],
                            '証券コード':json_data["results"][num]["secCode"],
                            'EDINETコード':json_data["results"][num]["edinetCode"],
                            '決算期':json_data["results"][num]["periodEnd"],
                            '提出日': day             }
                report_list.append(edi)

    return report_list

report_list = create_report_list(day_list)

5.取得結果の表示

特定の決算期を指定し、4で作成したレポートリストをデータフレームにする

finance_date = "2023-03-31"
def create_docid_df(report_list,finance_date=finance_date):
    #reportlistに業種をつける
    df = pd.DataFrame(report_list)
    df = df[df["決算期"] == finance_date]
    return df

df = create_docid_df(report_list)
df

ちゃんととれています。

6.docIDの取得

あとは証券コードや会社名を指定してdocIDを取得します

docid =df[df['証券コード'] == '83160']['docID']
docid

7. さいごに

これで書類管理番号(docID)が取得できたので、実際にEDINETから有価証券報告書を取得していきます。

Discussion