05.4.2
EDINET
documents.json に日付 2024-02-09 と type=2 を渡して、その日に提出された全書類のメタデータを requests で受け取り、pd.DataFrame にして docDescription に「四半期報告書」を含む行、さらに filerName に「商船三井」を含む行へと絞り込みます。見つかった docID(S100STH6)を documents/{docID} に type=2 で渡すと PDF のバイナリが返るので、open(..., "wb") で保存して表示します。読み終えると、「日付で一覧 → 条件で絞る → docID で本体を取る」という EDINET API の 3 段階の使い方が分かり、CSV や XBRL を取る次のページにそのまま進めます。直感 #
EDINET の書類は 1 件ごとに S100STH6 のような docID で管理されていて、本体(PDF・XBRL・CSV)は docID が分からないと取れません。docID を知る唯一の入口が「ある日に提出された書類の一覧」を返す documents.json で、2024 年 2 月 9 日のように日付を指定すると、その日の提出分が数百件まとめて返ります。その中から書類の種類(docDescription)と提出者名(filerName)で目的の 1 件を見つけ、docID で本体を取りに行く、という 3 段階が EDINET API の基本の流れです。
EDINET の API を使用してみる #
Python で四半期報告書の PDF を取得するために EDINET を使います。以下のコンテンツでは EDINET閲覧サイト から取得できる情報をもとにデータを加工して作成しています。コードの実行や取得したデータの利用については EDINET の利用規約を確認し理解した上で行ってください。Version 2 の API を使う際はログイン認証と API キーの発行が必要で、発行したキーは環境変数 EDINET_API_KEY に入れておきます。
| |
書類一覧 API のリクエスト URL #
「11_EDINET_API仕様書」に従い、2024 年 2 月 9 日に提出された書類の一覧を取得します。
| |
取得データの確認 #
返ってきた JSON の results には、その日の全書類が 1 件 1 行で入っています。四半期報告書だけが欲しいので、文書の説明(docDescription)に「四半期報告書」を含む行だけを抽出します。
| |
| seqNumber | docID | edinetCode | secCode | JCN | filerName | fundCode | ordinanceCode | formCode | docTypeCode | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | S100SSMQ | E04505 | 95070 | 9470001001933 | 四国電力株式会社 | None | 010 | 043000 | 140 |
| 2 | 3 | S100SSHR | E01441 | 59730 | 5122001016280 | 株式会社トーアミ | None | 010 | 043000 | 140 |
| 5 | 6 | S100SQAH | E30982 | 71750 | 9220001001223 | 今村証券株式会社 | None | 010 | 043000 | 140 |
| 6 | 7 | S100SPH6 | E03562 | 83600 | 3090001002315 | 株式会社 山梨中央銀行 | None | 010 | 043000 | 140 |
| 10 | 11 | S100SRF2 | E00783 | 40910 | 7010701015826 | 日本酸素ホールディングス株式会社 | None | 010 | 043000 | 140 |
5 rows × 29 columns
DocID の確認 #
提出者名(filerName)に「商船三井」を含む行に絞ると 1 行だけ残り、その docID 列が次の取得に使う ID です。
| |
| seqNumber | docID | edinetCode | secCode | JCN | filerName | fundCode | ordinanceCode | formCode | docTypeCode | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1307 | 1308 | S100STH6 | E04236 | 91040 | 4010401082896 | 株式会社商船三井 | None | 010 | 043000 | 140 |
1 rows × 29 columns
四半期報告書の取得 #
見つけた docID(S100STH6)を書類取得 API に渡します。type で取得する形式を選び、PDF なら仕様書どおり type=2 です。
| |
ダウンロードした PDF を表示する #
保存した sample.pdf をノートブックの中に埋め込んで表示します。
| |
(PDF の表示は省略します)
使いどころと落とし穴 #
documents.json は 1 回の呼び出しで 1 日分しか返さないので、過去 1 年分の四半期報告書を集めたいときは日付を 1 日ずつ回して呼ぶ必要があり、1 リクエストごとに数秒待つのが礼儀です。type=2 の PDF は人が読むための形式で、売上高や配当の数値を機械的に取り出すには向きません。数値が欲しい場合は同じ documents/{docID} に type=5(CSV)や type=1(XBRL)を指定します(EDINET② で扱います)。Subscription-Key をコードに直書きして公開リポジトリに上げると第三者に使われるので、必ず環境変数から読みます。
まとめ #
EDINET API v2 の使い方は、documents.json に日付と type=2 を渡して一覧を取り、pd.DataFrame にして docDescription と filerName で 1 件に絞り、その docID を documents/{docID} に渡して本体を取る、という 3 段階です。PDF は type=2 でバイナリとして返るので open("sample.pdf", "wb") に書き出すだけで保存できます。API キーは環境変数 EDINET_API_KEY に置き、利用規約の範囲で呼び出し回数を抑えて使ってください。