EDINET API の使い方
kabukit は、httpx を使った非同期設計になっており、Jupyter や marimo のような非同期処理を直接扱えるノートブック環境で快適に利用できます。
このガイドでは、kabukit が提供する高レベルなモジュール関数と、より詳細な制御が可能な EdinetClient
の使い方を解説します。
認証設定
API を利用するには、事前にコマンドラインで EDINET API の API キーを設定しておく必要があります。詳細は、CLIの使い方の「認証設定」セクションを参照してください。
環境変数 EDINET_API_KEY
に直接 API キーを設定することも可能です。
モジュールレベル関数
kabukit は、手軽に EDINET API からデータを取得できるモジュールレベル関数を提供します。これらの関数は内部で非同期処理を並列実行するため、効率的に情報を取得できます。
書類一覧 (get_entries
)
kabukit.get_entries
関数は、提出書類一覧を取得します。
日付 (YYYY-MM-DD) を指定すると、指定した日付に提出された書類一覧を取得できます。
from kabukit import get_entries
df = await get_entries("2025-10-10")
df.select("Date", "Code", "docID", "filerName", "pdfFlag", "csvFlag").tail()
Date | Code | docID | filerName | pdfFlag | csvFlag |
---|---|---|---|---|---|
date | str | str | str | bool | bool |
2025-10-10 | "76030" | "S100WUON" | "ジーイエット株式会社" | true | true |
2025-10-10 | "23450" | "S100WULQ" | "株式会社クシム" | true | true |
2025-10-10 | null | "S100WUB2" | "リ・ジェネレーション株式会社" | true | true |
2025-10-10 | "26870" | "S100WT9S" | "株式会社シー・ヴイ・エス・ベイエリア" | true | true |
2025-10-10 | "26870" | "S100WT9U" | "株式会社シー・ヴイ・エス・ベイエリア" | true | false |
複数の提出日の書類一覧を一度に取得することもできます。このとき、EDINET API へのリクエストは非同期で並列に行われます。
df = await get_entries(["2025-10-10", "2025-10-14", "2025-10-15"])
df.select("Date", "Code", "docID", "filerName", "pdfFlag", "csvFlag").tail()
Date | Code | docID | filerName | pdfFlag | csvFlag |
---|---|---|---|---|---|
date | str | str | str | bool | bool |
2025-10-15 | "99820" | "S100WV4Z" | "タキヒヨー株式会社" | true | true |
2025-10-15 | "99870" | "S100WUM2" | "株式会社スズケン" | true | true |
2025-10-15 | "99870" | "S100WTVO" | "株式会社スズケン" | true | true |
2025-10-14 | "99930" | "S100WUKL" | "株式会社ヤマザワ" | true | true |
2025-10-14 | "99930" | "S100WUKN" | "株式会社ヤマザワ" | true | false |
戻り値のデータフレームは、銘柄コード (Code
)、日付 (Date
) の順でソートされます。
過去のある日数あるいは年数に渡る提出日の書類一覧を取得することもできます。
df = await get_entries(days=10)
df.select("Date", "Code", "docID", "filerName", "pdfFlag", "csvFlag").head()
Date | Code | docID | filerName | pdfFlag | csvFlag |
---|---|---|---|---|---|
date | str | str | str | bool | bool |
2025-10-14 | null | "S100WN8K" | "野村アセットマネジメント株式会社" | true | true |
2025-10-14 | null | "S100WQLZ" | "三井住友DSアセットマネジメント株式会社" | true | true |
2025-10-14 | null | "S100WU3P" | "ACTWELL合同会社" | true | true |
2025-10-14 | null | "S100WV2H" | "株式会社友" | true | true |
2025-10-14 | null | "S100WUPC" | "株式会社ナルミヤ・インターナショナル" | true | false |
df_years = await get_entries(years=1)
df_years.select("Date", "Code", "docID", "filerName", "pdfFlag", "csvFlag").head()
Date | Code | docID | filerName | pdfFlag | csvFlag |
---|---|---|---|---|---|
date | str | str | str | bool | bool |
2024-10-21 | null | "S100UJMY" | "三井住友トラスト・アセットマネジメント株式会社" | true | true |
2024-10-21 | null | "S100UKC0" | "ストーク株式会社" | true | true |
2024-10-21 | null | "S100UKB8" | "牧 寛之" | true | true |
2024-10-21 | null | "S100UK8Y" | "SBIインベストメント株式会社" | true | true |
2024-10-21 | null | "S100UKBK" | "Ontario合同会社" | true | true |
書類本文 (get_documents
)
kabukit.get_documents
関数は、書類本文を取得します。書類一覧で取得した書類 ID (docID
) を引数にとります。
from kabukit import get_documents
df = await get_documents("S100WUKL")
df.select("docID", "要素ID", "項目名", "値").head()
docID | 要素ID | 項目名 | 値 |
---|---|---|---|
str | str | str | str |
"S100WUKL" | "jpcrp_cor:IndependentAuditorsR… | "独立監査人の報告書、連結 [テキストブロック]" | " 独立監査人の中間連結財務諸表に対する期中レビュー報告書 … |
"S100WUKL" | "jpcrp_cor:AuditFirm1Consolidat… | "監査法人1、連結" | "EY新日本有限責任監査法人" |
"S100WUKL" | "jpcrp_cor:CPA1AuditFirm1Consol… | "公認会計士1、監査法人1、連結" | "佐 藤 晶" |
"S100WUKL" | "jpcrp_cor:CPA2AuditFirm1Consol… | "公認会計士2、監査法人1、連結" | "大 倉 克 俊" |
複数の書類 ID を与えて、非同期に並列取得することもできます。
from polars import col as c
doc_ids = df_years.filter(c.csvFlag)["docID"] # CSV形式を提供する書類を選択
df = await get_documents(doc_ids, max_items=3)
df.select("docID", "要素ID", "項目名", "値").head()
docID | 要素ID | 項目名 | 値 |
---|---|---|---|
str | str | str | str |
"S100UJMY" | "jplvh_cor:TotalNumberOfFilersA… | "提出者及び共同保有者の総数(名)、表紙" | "2" |
"S100UJMY" | "jpdei_cor:NumberOfSubmissionDE… | "提出回数、DEI" | "1" |
"S100UJMY" | "jplvh_cor:StocksOrInvestmentSe… | "株券又は投資証券等、法第27条の23第3項本文" | "-" |
"S100UJMY" | "jplvh_cor:StocksOrInvestmentSe… | "株券又は投資証券等、法第27条の23第3項第1号" | "-" |
"S100UJMY" | "jplvh_cor:StocksOrInvestmentSe… | "株券又は投資証券等、法第27条の23第3項第2号" | "1621200" |
Info
EDINETの書類は、すべてが CSV 形式 (XBRL) で提供されるわけではありません。csvFlag
が True
の書類のみ、表形式の構造化データとして取得できます。
pdf
キーワード引数を True
に指定すると、書類本文を PDF 形式で取得できます。データフレームのカラム名は "pdf"
、データ型は polars.Binary
です。バイナリファイルとして保存すれば、PDF 形式の書類を閲覧することができます。
doc_ids = df_years.filter(c.pdfFlag)["docID"] # PDF形式を提供する書類を選択
df = await get_documents(doc_ids, max_items=3, pdf=True)
df.select("docID", "pdf").tail()
docID | |
---|---|
str | binary |
"S100UJMY" | b"%PDF-1.5\x0d\x0a%\xe2\xe3\xcf\xd3\x0d\x0a1\x200\x20obj\x0d\x0a<</C"… |
"S100UKB8" | b"%PDF-1.5\x0d\x0a%\xe2\xe3\xcf\xd3\x0d\x0a1\x200\x20obj\x0d\x0a<</C"… |
"S100UKC0" | b"%PDF-1.5\x0d\x0a%\xe2\xe3\xcf\xd3\x0d\x0a1\x200\x20obj\x0d\x0a<</C"… |
Info
EDINETの書類は、すべてが PDF 形式で提供されるわけではありません。pdfFlag
が True
の書類のみ、PDF の原本を取得できます。
EdinetClient
EdinetClient
は、より詳細な制御(例: タイムアウト設定、リトライポリシーの変更など)
が必要な場合に直接利用します。特に、EdinetClient.client
属性は httpx.AsyncClient
のインスタンスであるため、httpx が提供する豊富なメソッドや設定に直接アクセスすることが可能です。
ノートブックで kabukit.EdinetClient
をインポートしてインスタンスを作成します。
from kabukit import EdinetClient
client = EdinetClient()
# ここで API を呼び出す
await client.aclose() # 最後に手動でセッションを閉じる
async with
構文を使うことで、セッションを安全に管理できます。
async with EdinetClient() as client:
# このブロック内で API を呼び出す
pass
# 自動でセッションが閉じられる
書類一覧 (get_entries
)
EdinetClient.get_entries
メソッドは、日付を指定して、提出された書類のメタデータを取得します。
df = await client.get_entries("2025-10-10")
df.select("Date", "Code", "docID", "filerName", "pdfFlag", "csvFlag").tail()
Date | Code | docID | filerName | pdfFlag | csvFlag |
---|---|---|---|---|---|
date | str | str | str | bool | bool |
2025-10-10 | "76030" | "S100WUON" | "ジーイエット株式会社" | true | true |
2025-10-10 | "23450" | "S100WULQ" | "株式会社クシム" | true | true |
2025-10-10 | null | "S100WUB2" | "リ・ジェネレーション株式会社" | true | true |
2025-10-10 | "26870" | "S100WT9S" | "株式会社シー・ヴイ・エス・ベイエリア" | true | true |
2025-10-10 | "26870" | "S100WT9U" | "株式会社シー・ヴイ・エス・ベイエリア" | true | false |
書類本文 (get_document
)
EdinetClient.get_document
メソッドは、文書 ID を指定して、書類本文を取得します。
df = await client.get_document("S100WUKL")
df.select("docID", "要素ID", "項目名", "値").head()
docID | 要素ID | 項目名 | 値 |
---|---|---|---|
str | str | str | str |
"S100WUKL" | "jpcrp_cor:IndependentAuditorsR… | "独立監査人の報告書、連結 [テキストブロック]" | " 独立監査人の中間連結財務諸表に対する期中レビュー報告書 … |
"S100WUKL" | "jpcrp_cor:AuditFirm1Consolidat… | "監査法人1、連結" | "EY新日本有限責任監査法人" |
"S100WUKL" | "jpcrp_cor:CPA1AuditFirm1Consol… | "公認会計士1、監査法人1、連結" | "佐 藤 晶" |
"S100WUKL" | "jpcrp_cor:CPA2AuditFirm1Consol… | "公認会計士2、監査法人1、連結" | "大 倉 克 俊" |
pdf
キーワード引数を True
に指定すると、書類本文を PDF 形式で取得できます。
df = await client.get_document("S100WUKL", pdf=True)
df.select("docID", "pdf").tail()
docID | |
---|---|
str | binary |
"S100WUKL" | b"%PDF-1.5\x0d\x0a%\xe2\xe3\xcf\xd3\x0d\x0a1\x200\x20obj\x0d\x0a<</C"… |
Note
モジュール関数は複数の書類を一度に取得できるので、get_documents
(複数形)です。一方、EdinetClient
のメソッドは単一の書類を取得するので、get_document
(単数形)です。
データ形式について
kabukit.get_documents
関数および
EdinetClient.get_document
メソッドで取得される書類本文は、EDINET が提供する CSV 形式のデータ(元のデータは XBRL 形式)を
Polars DataFrame に変換したものです。