📝
【Python】EDINETの書類管理番号(docid)を取得する
2024年4月よりEDINETのAPIの仕様がversion2に変更になっています。
docidの取得については、以下のリンクをご確認ください。
はじめに
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