oryou-sanのブログ

備忘録です

Edinet APIを使ってみる(書類取得API編 その1)

はじめに

Edinet APIPythonで使ってみる。
書類一覧APIと書類取得APIの2つがあるが、この記事では書類取得APIについて扱う。


まずは叩いてみる

pythonからgetメソッドでAPIを叩く。

import requests

doc_id = 'S100LF3R' #取得したい書類の書類管理番号

res = requests.get('https://disclosure.edinet-fsa.go.jp/api/v1/documents/'+doc_id+'?type=1')
res.content

#出力
#b'PK\x03\x04\x14\x00\x08\x00\x08\x00\xb2N\x83T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00\x00\x00XBRL/PublicDoc/0000000_header_jpcrp030000-asr-001_E03054-000_2021-03-31_01_2021-05-28_ixbrl.htm\xed][s\x1b\xc7\x95~\xcf\xaf@\xd1U\x9b\x97...'

仕様書の通り、取得したい書類のバイナリデータを取得できたので、
これをzipファイルに書き出す。

import shutil

with open(f'{doc_id}.zip','wb') as f:
    f.write(res.content)

これでカレントディレクトリに取得したい書類のzipが保存される。

提出本文書のxbrlのみを取り出す。

NLPで使いそうな提出本文書のxbrlのみを取り出してみる。
必要になる処理は主に以下の通り。

・カレントディレクトリ階下のtempフォルダにzipを保存&解凍
・中身のxbrlファイルをxbrlフォルダに移動
・tempフォルダに保存したzip&解凍後のファイルを削除
・for文で複数文書を取得

import requests
import shutil
import glob
import os

doc_ids = ['S100LF3R','S100LFJ8','S100LGMY']#取得したい書類の書類管理番号

for doc_id in doc_ids:
    res = requests.get('https://disclosure.edinet-fsa.go.jp/api/v1/documents/'+doc_id+'?type=1')
    with open(f'./temp/{doc_id}.zip','wb') as f:
        f.write(res.content)
    shutil.unpack_archive(f'./temp/{doc_id}.zip', f'./temp/{doc_id}')
    xbrl_temp =  glob.glob(f'./temp/{doc_id}/XBRL/PublicDoc/*.xbrl')
    os.rename(xbrl_temp[0], f'./xbrl/{doc_id}.xbrl')
    shutil.rmtree(f'./temp/{doc_id}')
    os.remove(f'./temp/{doc_id}.zip')


とりあえず今回はここまで。