XBRLの取得方法【有報キャッチャー】

有限会社プレシスの有報キャッチャーからXBRLを取得する方法です。ありがたいことに、有報キャッチャーは、XBRLを取得するための仕組みが提供されていましたので、比較的容易に取得することができました。

1次情報源にこだわらないのであれば、こちらのサービスを使わせていただくのが良いと思います。

取得方法【有報キャッチャー】

Atomフィードを取得する

まずは、取得方法を解説したページを見ます。

有報キャッチャー トップページ」→「XBRL配信ウェブAPI

説明によると、以下のようなアドレスを開けば、EDINETの開示情報のアトム・フィード(Atomフィード)を返してくれるようです。

http://resource.ufocatch.com/atom/edinet/query/EDINETコード

このAtomフィードを問い合わせるためのアドレスを、フィード・ユー・アール・アイ(FeedURI)と呼ぶようです。ここでは単にアドレスって呼ぶことにします。

例えば、日産自動車の開示を取得する場合です。

金融庁のEDINETコードリストによると、EDINETコードは「E02142」なので、アドレスは以下のようになります。

http://resource.ufocatch.com/atom/edinet/query/E02142

なお、有報キャッチャーの説明によると、証券コードでも取得できるとのことです。5桁表示と4桁表示の両方に対応しているとのことです。

日産自動車の証券コードは「72010」なので、アドレスは以下のようになります。

http://resource.ufocatch.com/atom/edinet/query/72010

EDINETコードと証券コードで少し内容が異なりますが、どちらでも良いと思います。

これらのアドレスは、ウェブブラウザでも開けます。ただ、フィード受信アドオンなどが入っているとそっちが起動してしまうので、Atomフィードのソースを見る時はそういったアドオンを無効化しておきます。

開示情報リスト・PDF・XBRLを取得する

Atomフィードを「lxml.etree」、「BeautifulSoup」、「feedparser」などで読み込んで、開示情報リスト、PDF、XBRLを取得します。XBRLはzipファイルだけで良いでしょう。

日時情報の変換方法

Atomフィード内の日時情報は、以下のような「ISO 8601形式」になっています。

日時情報の例:2018-04-06T00:00:00+09:00

これは、dateutil.parser.parse()でdatetime型(タイムゾーン付き)に変換できます。

タイムゾーンの削除方法

以下のように .replace()メソッドの tzinfo に None を渡すだけです。

デートユーティル(dateutil)は、事前に pip でインストールしておきます。

import dateutil.parser

# datetime型に変換
t = dateutil.parser.parse('2018-04-06T00:00:00+09:00')

# タイムゾーンの削除
t = t.replace(tzinfo=None)

以下のように、タイムゾーンが削除されます。

タイムゾーン削除前
datetime.datetime(2018, 4, 6, 0, 0, tzinfo=tzoffset(None, 32400))

削除後
datetime.datetime(2018, 4, 6, 0, 0)

ファイルのダウンロード方法

ファイルのダウンロードは、urllibで読み込んだデータをそのままバイナリモード('wb')で保存することで出来ます。以下はダウンロード関数の例です。

import urllib
import traceback
def download_file(url, file):
    """ファイルをダウンロード"""
    r = urllib.request.Request(url)
    try:
        with urllib.request.urlopen(r) as p:
            if p.status == 200:
                data = p.read()
                with open(file, 'wb') as f:
                    f.write(data)
    except Exception:
        print(traceback.format_exc())
    return

実際には様々なエラー(HTTPError、IncompleteRead、timeout など)が発生しますので、必要に応じてexcept節を追加します。

タイトルとURLをコピーしました