El objetivo de este código es descargar de manera automatizada los informes mensuales de datos operativos eléctricos de la Compañía Administradora del Mercado Mayorista Eléctrico (CAMMESA) de Argentina. Los informes contienen datos detallados de demanda, generación, potencia instalada, consumo de combustible combustibles y precios del Sistema Argentino de Interconexión (SADI).
# Cargar librerías
import requests
import pandas as pd
from datetime import date, datetime
from dateutil.rrule import rrule, MONTHLY
from os import mkdir
import zipfile, urllib.request, shutil
# Directorio de descarga
dir = "CAMMESA" #carpeta de destino de los archivos
mkdir(str(dir))
# Definir fechas
sdate = date(2015, 10, 1) # fecha de inicio (año, mes, día)
edate = date(2020, 4, 1) # fecha de fin (año, mes, día)
def pad_date(month_num):
month = str(month_num)
if len(month) == 1:
month = '0' + month
return month
def month_iter(start_month, start_year, end_month, end_year):
start = datetime(start_year, start_month, 1)
end = datetime(end_year, end_month, 1)
return ((pad_date(d.month), pad_date(d.year)) for d in rrule(MONTHLY, dtstart=start, until=end))
#Descarga de datos
baseUrl = 'https://portalweb.cammesa.com/MEMNet1/Informe%20Mensual/Anteriores/BASE_INFORME_MENSUAL_'
filePath = './' + dir + '/' + 'BASE_INFORME_MENSUAL_'
for (month, year) in month_iter(sdate.month, sdate.year, edate.month, edate.year):
nameComponents = [year, month]
outFile = filePath + '-'.join(nameComponents) + '.zip'
print('Downloading files for ' + '-'.join(nameComponents))
url = baseUrl + '-'.join(nameComponents) + '.zip'
url2= baseUrl + '_'.join(nameComponents) + '.zip'
try:
with urllib.request.urlopen(url) as r, open(outFile, 'wb') as out_file:
shutil.copyfileobj(r, out_file)
print('OK: downloaded' + url)
except:
try:
with urllib.request.urlopen(url2) as r, open(outFile, 'wb') as out_file:
shutil.copyfileobj(r, out_file)
print('OK: downloaded ' + url2)
except:
print('ERROR downloading ' + '-'.join(nameComponents))
print("\n")