RでEDINETから財務データを入手・分析する~②docID取得編~
記事一覧
はじめに
本記事は導入編の続きであり、2番目の記事にあたる。本記事で行う作業は、書類の提出日を指定し、各書類に紐づけられたdocIDを入手することである。EDINETで公開されている『EDINET API仕様書』を読んでいることを前提とする。
EDINET APIの概要
EDINET APIとは
EDINET APIの概要について、以下、『EDINET API仕様書 Version 1』の文章を引用する。
EDINET APIは、利用者がEDINETの画面からではなく、プログラムを介してEDINETのデータベースから効率的にデータを取得できるAPI(アプリケーション・プログラミング・インターフェース)です。EDINET APIにより、EDINET利用者は効率的に開示情報を取得することが可能となります。
提供されているAPI
2つのAPIが提供されている。
取得情報
設定可能なリクエストパラメータとして、以下の2つがある。
type=1
- メタデータのみを取得する。指定日に何件の書類が提出されたのかのみを知りたいのであればこちらを使えばよい。デフォルトはこちらであり、パラメータの省略が可能である。
type=2
- 提出書類一覧及びメタデータを取得する。本記事の目的はdocIDの取得であるからこちらを指定する。
その他の特記事項
docIDは開示書類ごとに一意に定められている。同一企業、同一年度であっても書類が異なればdocIDは異なる。
金融商品取引法に定める縦覧期間(5年)を過ぎると、書類は非開示となる。
Rによる実装
手順
詳細な流れは以下の通りである。
日付を指定し、type=2のリクエストを行う。
レスポンスはjsonデータなのでlistに直しつつ、指定日に書類が提出されているか判断する。なければエラーを返す。
tibbleに変形後、書類の中で「有価証券報告書」のみを抽出する*1。「訂正有価証券報告書」は様式を異にするため除外する。
上場企業のみを抽出する。secCode(銘柄コード)を持っているかで判断する。
以下の変数のみを保持する。なお、保存領域に余裕があるならばこの操作は不要である。
- docID
- edinetCode:提出者EDINETコード
- filerName:提出者名
- secCode
- periodEnd:期末日
filerNameについて様式を統一するため、"株式会社"という文言とスペースを除去する。
filingフォルダ内に保存する。
コード
上記手順に倣った関数を以下に与える。
get_json <- function(date_filing) { url_api <- "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json?date=" url_type <- "&type=2" get_res <- httpGET(str_c(url_api, date_filing, url_type)) data_raw <- fromJSON(get_res) data_flag <- data_raw %>% purrr::pluck("metadata") %>% purrr::pluck("resultset") %>% purrr::pluck("count") if(data_flag == 0){ stop(str_c("Maybe ", date_filing, " is holiday!!")) } data_tidy <- data_raw %>% purrr::pluck(2) %>% as_tibble() %>% slice(str_which(.$docDescription, "有価証券報告書")) %>% slice(str_which(.$docDescription, "訂正", negate = TRUE)) %>% filter(!is.na(secCode)) %>% select(docID, edinetCode, filerName, secCode, periodEnd) %>% mutate_at("filerName", str_remove, pattern = "株式会社") %>% mutate_at("filerName", str_squish) %>% distinct() data_tidy %>% write_excel_csv(str_c(path_filing, "/docID.csv")) ## API key word : docID rm(list = ls(pattern = "^url|get_res|^data")) } get_json(date_filing)
filingフォルダ内に"docID.csv"が保存されていれば成功である。以下にその例示を与える。
docID | edinetCode | filerName | secCode | periodEnd |
---|---|---|---|---|
S100G6IW | E03717 | 第一商品 | 87460 | 2019-03-31 |
S100G9AI | E03784 | 極東証券 | 87060 | 2019-03-31 |
S100GCOO | E05297 | ソフトフロントホールディングス | 23210 | 2019-03-31 |
S100G8Y7 | E03003 | ほくやく・竹山ホールディングス | 30550 | 2019-03-31 |
S100G9EX | E21955 | 川田テクノロジーズ | 34430 | 2019-03-31 |
注意事項
date_filing
を任意の日時に変更すれば以下同様にdocIDを取得することができる。その場合は、前回の記事にて定義したcreate_file_structure()
から実行する必要がある。
ただし、for文などで繰返し取得する場合は、Sys.sleep()
を挟みクールタイムを設けて、相手側に負担をかけないよう配慮する。