彼らのウェブサイトでarelleのドキュメントを調べたところ、答えが見つかりました。必要なデータを取得するには、arelleCmdLine を使用して、関連データを指定する csv をエクスポートします。 --factListCols の後に必要なデータ型の文字列 (スペースで区切られています) が続きます。arelleCmdLine の呼び出しは、OS によって異なります。
CmdL = 'Applications/Arelle.app/contents/MacOS/arelleCmdLine'
os.system('%s --file %s --factListCols "Name Value Period" --facts %s') % (CmdL,xmlPth,csvPth)
xbrl ドキュメントの「ファクトリスト」でファクトの「プロパティ」を取得しようとしています。プロパティは、「名前」データ (またはファクトの GAAP 分類法) と、日付データ「StartDate」、「endDate」、および「instant」を保持する「contextRef」を保持します。
アレルが私の最善の策のようです。ただし、cmdline ユーティリティはこの問い合わせに対してそれをカットしていないようであり、API ドキュメントHereは、ソース内のファイル名を保存するために完全に空白です。
xbrl ドキュメントをロードする方法、ファクト テーブルのファクトをロードする方法、およびこれらのファクトからデータとメタ データをリストに抽出する方法を説明できる人はいますか?
以下は、質問を明確にするのに役立つコードです。すべての事実とメタデータが含まれていると思われる modeltuplefacts を印刷しようとすると、空白のリストが表示されます。このコードは、主に、例にあるように、arelle パッケージの arelle フォルダーにあるCustomLogger.pyからコピー アンド ペーストしたものです。ロガーがどのように機能するかはわかりませんが、必要であり、この例は Cntlr の要件を満たしているようです。
from __future__ import print_function
import sys
sys.path.insert(0, '~/Desktop/Arelle')
from arelle import Cntlr
from arelle import ModelDocument
from arelle import ModelObject as MO
from arelle import ModelInstanceObject as MIO
class CntlrCustomLoggingExample(Cntlr.Cntlr):
def __init__(self):
# no logFileName parameter to prevent default logger from starting
super().__init__()
def run(self):
# start custom logger
CustomLogHandler(self)
path = "~/Desktop/SEC/SECindexes10-k/fileHolder/1/nick-20150630.xml"
modelXbrl = self.modelManager.load(path)
modelDoc = ModelDocument.load(modelXbrl,path)
mf = MIO.ModelFact()
mf.init(modelDoc)
print(mf.modelTupleFacts)
self.modelManager.close()
self.close()
import logging
class CustomLogHandler(logging.Handler):
def __init__(self, cntlr):
logger = logging.getLogger("arelle")
self.level = logging.DEBUG
self.setFormatter(logging.Formatter("[%(messageCode)s] %(message)s - %(file)s %(sourceLine)s"))
logger.addHandler(self)
def emit(self, logRecord):
# just print to standard output (e.g., terminal window)
print(self.format(logRecord))
if __name__ == "__main__":
CntlrCustomLoggingExample().run()