Skip to content

Instantly share code, notes, and snippets.

@dario61081
Created April 12, 2019 17:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dario61081/d6aa750b726b53d7d08d7d35961936da to your computer and use it in GitHub Desktop.
Save dario61081/d6aa750b726b53d7d08d7d35961936da to your computer and use it in GitHub Desktop.
gestor de descarga de rucs
import os
from datetime import datetime
from threading import Thread
from zipfile import ZipFile
import requests
class ThreadRUCDownloader(Thread):
"""Clase para descargar los archivos zip de la pagina"""
base_url = "http://www.set.gov.py/rest/contents/download/collaboration/sites/PARAGUAY-SET/documents/informes-periodicos/ruc/ruc{}.zip"
base_folder = os.path.join(os.path.dirname(__file__), "cache")
base_file = os.path.join(base_folder, 'ruc{}.zip')
base_report = os.path.join(base_folder, 'ruc{}.log')
def __init__(self, index):
super().__init__()
self.index = index
self.file = self.base_file.format(self.index)
self.error = ""
# verificar path
if not os.path.exists(self.base_folder):
os.makedirs(self.base_folder)
def run(self):
print("start: ", self.name)
self.descargar()
def descargar(self):
"""Descargar el contenido de la web"""
url = self.base_url.format(self.index)
rq = requests.get(url, stream=True)
if rq.status_code == 200:
with open(self.file, 'wb') as f1:
f1.write(rq.content)
self.descomprimir()
else:
self.error = "Error de descarga"
def descomprimir(self):
"""Descomprimir el archivo descargado"""
try:
f = ZipFile(self.file, "r")
f.extractall(self.base_folder)
f.close()
self.error = f'Archivo {self.index} correcto'
except Exception as e:
self.error = f'Archivo {self.index} incompleto: {e.message}'
self.informar()
def informar(self):
tiempo = datetime.now().strftime("%d/%m/%y %H:%M:%S")
mensaje = f'Finalizado ruc{self.index}.zip @ {tiempo}'
print(mensaje)
self.error += '\n' + mensaje
afile = self.base_report.format(self.index)
with open(afile, "w") as f:
f.write(self.error)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment