RでEDINETから財務データを入手・分析する~③書類取得編~

記事一覧

はじめに

本記事はdocID取得編の続きであり、3番目の記事にあたる。本記事で行う作業は、前記事で取得したdocIDに紐づく書類のXBRLデータを入手し、zipファイルとして保存することである。EDINETで公開されている『EDINET API仕様書』を読んでいることを前提とする。

また、本ブログの執筆に際してこちらの記事を参考にさせていただいた。

書類取得API

手順は前記事とおおむね同じである。docIDとリクエストパラメータを加えたリクエストにより、指定した書類のバイナリデータを取得する。

取得情報

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

  • type=1

    • 提出本文書及び監査報告書を取得する。本ブログでは有価証券報告書を利用するため、このパラメータを指定する。
  • type=2

    • PDFを取得する。企業の有報サンプルが多数ほしい場合は有用であるが、使ったことはない。
  • type=3

    • 代替書面と添付文書を取得する。使ったことはない。
  • type=4

    • 英文ファイルを取得する。使ったことはない。

注意事項

本記事においては"2019-06-28"に提出された361の有報を取得する。for文により取得するが、その際は過剰アクセスを避けるために、1つにつき10秒のクールタイムを設ける。また、参考にしたこちらの記事に倣い、Rのコードはコピペでそのまま動かないようになっている。具体的には、書類取得APIのURLとリクエストパラメータについて省いている。それらは『EDINET API仕様書』に記載されているため、本記事の手順はそちらを読まなければ再現不可能である。

Rによる実装

手順

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

  1. URLとリクエストパラメータ、docIDを指定し、クールタイムを挟んでからリクエストを行う。

  2. レスポンスのバイナリーデータを変数に格納後、zipファイルとして保存する。ファイル名は"docID.zip"とする。

  3. 書類を取得できた企業の名前、docID等を別途(ファイル構造としての)zipファイル内に"downloaded_XBRL.csv"として保存する。これは書類の取得に伴い更新されていく。

  4. インプットであるdocIDのベクトルの、何番目までを取得できたかについてConsoleに表示する。

  5. 変数をクリーンアップする。

  6. 1~5の手順を、インプットであるdocIDのベクトルの長さだけ繰り返す。

なお、途中でエラーが発生し書類の取得が中断された場合に備え、インプットであるdocIDのベクトルの、任意の場所から開始できるようにしている。

コード

上記手順に倣った関数を以下に与える。

data_tidy <- 
  read_csv(dir(path_filing, ".csv", full.names = TRUE))  # 前記事のdocID.csvを読み込む

docID <-
  data_tidy %>% 
  purrr::pluck("docID")


get_zip_via_EDINET <- function(data_tidy, docID, path_zip,
                               start, end) {
  
  url_api <- "URL"
  
  url_type <- "リクエストパラメータ"

  i <- as.integer(start - 1L)
  
  for(id in docID[start:end]) {
    
    ## 過剰アクセス注意 ##
    
    Sys.sleep(10)
    
    ##                ##
    
    i <- i + 1L
    
    get_binary <- getBinaryURL(str_c(url_api, id, url_type))
    
    writeBin(get_binary, str_c(path_zip, "/", id, ".zip"))    
    
    if(file.exists(str_c(path_zip, "/downloaded_XBRL.csv"))) {
      
      data_tidy %>% 
        filter(docID == id) %>% 
        write_excel_csv(path = str_c(path_zip, "/downloaded_XBRL.csv"),
                        append = TRUE)
      
    } else {
      
      data_tidy %>% 
        filter(docID == id) %>% 
        write_excel_csv(path = str_c(path_zip, "/downloaded_XBRL.csv"),
                        append = FALSE)
      
    }
    
    print(str_c(i, now(), sep = ", "))
    
    rm(get_binary)
    
  }
  
  rm(list = ls(pattern = "^url|^id$"))
  
}

get_zip_via_EDINET(data_tidy, docID, path_zip,
                   start = 1L, end = length(docID))

zipフォルダ内に、書類のzipファイルと"downloaded_XBRL.csv"が保存されていれば成功である。

おわりに

次回の記事では、本記事で取得した書類のzipファイルを分析可能な形に整頓していく前処理を行う。