[PYTHON] Télécharger le fichier XBRL depuis EDINET (mémo personnel)

J'ai lu le livre mentionné dans le matériel de référence et l'ai fait avec Python. Au départ, j'avais l'intention d'écrire jusqu'au point d'obtenir les éléments et les valeurs numériques du rapport de titres à partir du fichier XBRL, mais Directives pour la création de taxonomies par émetteur J'ai abandonné une fois parce que cela me semblait difficile à moins de lire et de comprendre% 20.pdf). Je voudrais continuer dès que les autres priorités seront clarifiées.

Matériel de référence

Il y a une description détaillée de XBRL dans le livre ci-dessus, alors jetez un œil au livre. Je pense que ce livre est un très bon livre car il décrit non seulement XBRL mais aussi le savoir-faire et l'analyse des séries chronologiques pour une analyse efficace des données en utilisant le langage R.

De plus, concernant l'acquisition du fichier XBRL, l'URL de l'API est dans le livre "http://resource.ufocatcher.com/atom/edinetx/query/" Bien que ce soit "http://resource.ufocatch.com/atom/edinetx/query/" Est l'URL de l'API actuelle. Le nom du service semble être "signalé catcher", donc il peut avoir été ufocatcher avant.

Code de référence

Ce n'est pas particulièrement intéressant car il ne fait que télécharger le fichier, mais je vais en prendre note.

python


# coding: utf-8

import requests
import xml.etree.ElementTree as ET
from collections import defaultdict
import json
import os
from zipfile import ZipFile
from StringIO import StringIO

def get_link_info_str(ticker_symbol, base_url):
    url = base_url+ticker_symbol
    response = requests.get(url)
    return response.text
    
def get_link(tree, namespace):
    #print ET.tostring(tree)
    yuho_dict = defaultdict(dict)
    for el in tree.findall('.//'+namespace+'entry'):
        title = el.find(namespace+'title').text
        if not is_yuho(title): continue
        print 'writing:',title[:30],'...'
        _id = el.find(namespace+'id').text
        link = el.find('./'+namespace+'link[@type="application/zip"]')
        url = link.attrib['href']
        yuho_dict[_id] = {'id':_id,'title':title,'url':url}
    return yuho_dict
    
def is_yuho(title):
    if u'Rapport sur les valeurs mobilières' in unicode(title):
        return True
    else:
        return False
    
def write_download_info(ofname):
    with open(ofname,'w') as of:
        json.dump(dat_download, of, indent=4)
    
def download_all_xbrl_files(download_info_dict,directory_path):    
    for ticker_symbol, info_dicts in download_info_dict.items():
        save_path = directory_path+ticker_symbol
        if not os.path.exists(save_path):
            os.mkdir(save_path)
            
        for _id, info_dict in info_dicts.items():
            _download_xbrl_file(info_dict['url'],_id,save_path)
    
def _download_xbrl_file(url,_id,save_path):
    r = requests.get(url)
    if r.ok:
        #print url
        path = save_path+'/'+_id
        if not os.path.exists(path):
            os.mkdir(path)
        r = requests.get(url)
        z = ZipFile(StringIO(r.content))
        z.extractall(path) # unzip the file and save files to path.
    
if __name__=='__main__':
    base_url = 'http://resource.ufocatch.com/atom/edinetx/query/'
    namespace = '{http://www.w3.org/2005/Atom}'
    t_symbols = ('1301','2432',)
    
    for t_symbol in t_symbols:
        response_string = get_link_info_str(t_symbol, base_url)
        ET_tree = ET.fromstring( response_string )
        ET.register_namespace('',namespace[1:-1])
        
        dat_download = defaultdict(dict)
        # get download file info
        info_dict = get_link(ET_tree,namespace)
        dat_download[t_symbol] = info_dict
        
        ofname = os.getcwd()+'/downloaded_info/dat_download_'+t_symbol+'.json'
        write_download_info(ofname)
        
        directory_path = os.getcwd()+'/xbrl_files/'
        download_all_xbrl_files(dat_download,directory_path)

La partie qui est restée bloquée est que le fichier XBRL (groupe) est fourni sous forme de fichier zip.

Il semble que vous n'ayez pas besoin d'utiliser StringIO si vous utilisez urllib2 au lieu de requêtes. ..

commentaire

Je souhaite mettre à jour le contenu du rapport dès que possible. Si vous remarquez quelque chose d'étrange, il serait grandement apprécié que vous puissiez commenter.

Recommended Posts

Télécharger le fichier XBRL depuis EDINET (mémo personnel)
Extraction d'informations à partir du fichier EDINET XBRL
Utilisez boto pour télécharger le fichier depuis S3.
Téléchargez le rapport XBRL de titres, rapport trimestriel, rapport financier d'EDINET / TDNET avec Python
[OpenCV] Mémo personnel
youtube télécharger un mémo
Télécharger des images à partir d'un fichier texte contenant l'URL
Django memo n ° 1 à partir de zéro