Uncategorized

PythonでEDINETへアクセスするサンプル

売上高のタグにアクセスするところまで追記

*mainを関数化

import requests
from bs4 import BeautifulSoup  ##スクレイピング用
import json  ##Python3 で JSON 形式のデータを扱う方法
import re
import os
from xbrl_proc import read_xbrl_from_zip

def get_Edinet_doclist(date:str) -> list:
  """
  get_Edinet_doclist
  Edinetからドキュメント一覧のLISTを取得しリターンする。

  Args:
  <date> <str>:
    提出した日付

  Returns:
   <type>:list
     ドキュメント一覧リスト

  """
  retdoclist = []
  # 書類一覧APIのエンドポイント
  url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"

  # 書類一覧APIのリクエストパラメータ
  params = {
    "date" : date,
    "type" : 2
  }

  # 書類一覧APIの呼び出し
  res = requests.get(url, params=params, verify=False)
  jsn = json.loads(res.text)

  # レスポンス(JSON)の表示
  print(type(jsn))
  print(len(jsn))
  print(jsn.keys())
  #print(jsn)

  for value in jsn['results']:
    if isinstance(value['secCode'],str) and isinstance(value['docTypeCode'],str) and value['docTypeCode']=='120':
        retdoclist.append(value)

  return retdoclist



def fn_getzipfile(docid:str) -> str:
  url2 = "https://disclosure.edinet-fsa.go.jp/api/v1/documents/" + docid
  params2 = { "type" : 1}
  fname = docid + ".zip"
  print('■'+ str(fname))

  # EDINET API_2:提出書類のZIP取得
  res = requests.get(url2, params=params2)

  # ファイルへ出力
  zip_fname = os.getcwd() + "\\" + fname
  if res.status_code == 200:
     with open(zip_fname, 'wb') as f:
      for chunk in res.iter_content(chunk_size=1024):
        f.write(chunk)
      return zip_fname


def main():
  #関数呼び出しとメイン処理
  getlist = get_Edinet_doclist("2019-06-19")

  for value in getlist:
    if isinstance(value['filerName'],str):
      match = re.search(r'本田技研',value['filerName'])
      if match:
        print('証券コード:' + value['secCode'][0:4])
        print('会社名:' + value['filerName'])
        zip_fname = fn_getzipfile(value['docID'])
        df_list = read_xbrl_from_zip(zip_fname)
        for df in df_list:
          print(type(df))
          tagname = "NetSales"
          contextname = "CurrentYearDuration_NonConsolidatedMember"
          uri_data = df.query('tag == @tagname and context == @contextname').to_dict(orient='list')
          print(str(uri_data['値'][0]))

if __name__ == '__main__': main()

まだ未完成

*

-Uncategorized