Day5

# -*- coding:utf-8 -*-
#! usr/bin/env python3.7

import requests
import json
import zipfile
import glob
from bs4 import BeautifulSoup


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

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

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

# resultデータ取得
res_text = json.loads(res.text)
results = res_text["results"]

# 決算データに絞る
kessan = []
for result in results:
    if result['docDescription'] is not None:
        if '四半期' in result['docDescription']:
            kessan.append(result)


# zipファイルの取得
docid = kessan[0]['docID']
url = 'https://disclosure.edinet-fsa.go.jp/api/v1/documents/' + docid
pramas = {
  "type" : 1
}
res = requests.get(url, params=params, verify=False)

# ファイルへの出力
filename = docid + ".zip"
if res.status_code == 200:
    with open(filename, 'wb') as f:
        for chunk in res.iter_content(chunk_size=1024):
            f.write(chunk)


# zipファイル解凍
with zipfile.ZipFile(filename) as existing_zip:
    existing_zip.extractall(docid)


# 対象htmの取得
filepath = docid + '/XBRL/PublicDoc'
files = glob.glob(filepath + '*.htm')
files = sorted(files)
target_file = files[1]

with open(target_file, encoding='utf-8') as f:
    html = f.read()

# htmデータの取得
soup = BeautifulSoup(html, 'html.parser')

tag_p = soup.find_all('p')
for p in tag_p:
    print(p.text)

・エンドポイント.....ネットワークにつながっているパソコンとかサーバとかスマホのこと。ネットワークにつながっている端末のこと。ネットワークの端っこ、末端にいる端末。エンドポイントと言ったら、クライアント側のコンピュータとサーバーも含むよ。

・params の verify=FalseとはSSL証明書の検証に使うらしい!verify=FalseだとSSLErrorになるのを無視するよん。

JSON.....JSONとはjavascript objects notionのことでテキストベースのデータフォーマットのこと。Javascriptのオブジェクト表記構文のサブセットとなっている。XMLと比べると簡潔に構造化されたデータを記述することができるため、記述が容易で人間が理解しやすいデータフォーマットらしい。
JSONってなにもの? | Think IT(シンクイット)

json.loads(params)......JSON形式の文字列を辞書に変換するために使う。

・if res.status_code == 200........res.status_codeとはHTTPステータスコードのことで、100番台が処理中、200番台が成功、300番台がリダイレクト、400番台クライアントエラー、500番台がサーバーエラーのこと。
PythonでWebページを取得できたかどうかのエラーチェックと安全な中止の仕方

・chunk......ひとまとまりのデータのこと。

・zipfile.ZipFile(filename)..........ZipFileオブジェクトを通して、zipファイルにアクセスする

・.extractall...............これで解凍される。

・files = glob.glob(filepath + '*.htm')........glob関数を使うことで特定のパターンにマッチするファイルを取得することができる。特定のファイルの「かたまり」を取得するイメージ。
【初心者向け】Pythonのglobを徹底解説!正規表現の書き方も説明 | TechTeacher Blog


・files = sorted(files).......まずソートとは、既存のリストの要素を並び替えるもので、これはリストに対してしか使えない。そして、sorted関数はリスト以外にも、タプル、辞書、集合に使うことができる。
Pythonでリストをソートするsortとsortedの違い | note.nkmk.me
Pythonのsortメソッドとsorted関数の使い方の詳しい解説 | HEADBOOST


本日のコードはこれ!ありがとうございました!
【Python】企業の決算情報をEDINET APIで取得する | 無次元日記