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が提供されている。

  1. 提出された書類を把握するためのAPI

    • 本記事で利用するAPIである。指定した日付に提出された書類の件数及びその一覧などを取得できる。有価証券報告書書類管理番号(以下、docID)を保持するのが本記事の目標である。
  2. 提供された書類を取得するためのAPI

    • 次回以降に利用するAPIである。今回の記事で入手したdocIDをもとに、有価証券報告書XBRLデータのzipファイルを取得する。

取得情報

設定可能なリクエストパラメータとして、以下の2つがある。

  • type=1

    • メタデータのみを取得する。指定日に何件の書類が提出されたのかのみを知りたいのであればこちらを使えばよい。デフォルトはこちらであり、パラメータの省略が可能である。
  • type=2

    • 提出書類一覧及びメタデータを取得する。本記事の目的はdocIDの取得であるからこちらを指定する。

その他の特記事項

  • docIDは開示書類ごとに一意に定められている。同一企業、同一年度であっても書類が異なればdocIDは異なる。

  • 金融商品取引法に定める縦覧期間(5年)を過ぎると、書類は非開示となる。

Rによる実装

手順

詳細な流れは以下の通りである。

  1. 日付を指定し、type=2のリクエストを行う。

  2. レスポンスはjsonデータなのでlistに直しつつ、指定日に書類が提出されているか判断する。なければエラーを返す。

  3. tibbleに変形後、書類の中で「有価証券報告書」のみを抽出する*1。「訂正有価証券報告書」は様式を異にするため除外する。

  4. 上場企業のみを抽出する。secCode(銘柄コード)を持っているかで判断する。

  5. 以下の変数のみを保持する。なお、保存領域に余裕があるならばこの操作は不要である。

    • docID
    • edinetCode:提出者EDINETコード
    • filerName:提出者名
    • secCode
    • periodEnd:期末日
  6. filerNameについて様式を統一するため、"株式会社"という文言とスペースを除去する。

  7. 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()を挟みクールタイムを設けて、相手側に負担をかけないよう配慮する。

おわりに

次回の記事では、本記事で取得したdocIDをもとに、有報のXBRLデータのzipファイルを取得する。

*1:有価証券届出書、臨時報告書、四半期報告書などもあるが、本ブログで扱わない。