~/usr/src/Python/irpf.py.html
#!/usr/bin/python2.1
""" Programa para comprobar el estado de la devolución del irpf'2002
Hay que configurar, al menos, las variables: NIF, EUROS y CENTS para que
funcione. Además, opcionalmente, configurar FROM, SERVIDORSMTP, si
deseamos que el resultado devuelto por el servidor se nos envíe por correo
electrónico a donde queramos. Si dejamos estas variables sin configurar, se
guardará el resultado devuelto por el servidor en un fichero llamado
irpf.html
"""
import urllib2,re
################### CAMBIAR AQUÍ, SI QUIERE CONFIGURAR EL PROGRAMA ########
# Datos para identificar la declaración. Obligatorio ponerlos.
# Cuidado, en la página web han decidido separar euros y céntimos.
NIF=''
EUROS=''
CENTS=''
# Datos para configurar el envío del mensaje de correo. Opcionales.
# Si se deja alguno de los datos vacío (sin configurar), no se enviará por
# correo, sino que se se guardará el fichero irpf.html devuelto por el
# servidor
FROM = 'Que viene hacienda aeat@aeat.es'
TO = ''
SERVIDORSMTP = 'localhost'
# A partir de aquí NO MODIFICAR sin conocimiento de lo que se hace
##########################################################################
# La URL del POST
URL='https://aeat.es/PROGCONV/CWBA/PROGLOGI/'
# Los parámetros.
if NIF=='':
NIF=raw_input('NIF: ')
if EUROS=='':
EUROS=raw_input('EUROS (los céntimos luego) ')
if CENTS=='':
CENTS=raw_input('CENTIMOS (¿lo ven?) ')
parametros='HID=DEVOLUGE&NIF='+NIF+'&IMP='+EUROS+'&IMD='+CENTS
# Solicitamos los datos al servidor.
f = urllib2.urlopen(URL, parametros)
if ((FROM != '') and (TO != '') and (SERVIDORSMTP != '')):
# Ahora construimos el mensaje de correo electrónico
# Lamentablemente el https no funciona con mi python2.2 así que hay
# Ahora construimos el mensaje de correo electrónico
# Lamentablemente el https no funciona con mi python2.2 así que hay
# que construirse el mensaje a mano, sin poder usar email, que es
# nuevo en python2.2.
import smtplib
import MimeWriter
import mimetools
import time
import StringIO
import cStringIO
fecha = time.asctime(time.localtime(time.time()))
# Construcción del mensaje
textoMensaje = cStringIO.StringIO(f.read())
mensaje = StringIO.StringIO()
generador=MimeWriter.MimeWriter(mensaje)
generador.addheader('From',FROM)
generador.addheader('Subject',"Estado de la devolución")
generador.addheader('Date',fecha)
generador.addheader('MIME-Version:',' 1.0\n')
generador.startmultipartbody("mixed")
parte = generador.nextpart()
tipo="text/html"
codificacion = "none"
parte.addheader("Content-transfer-encoding","base64")
codificacion = "none"
parte.addheader("Content-transfer-encoding","base64")
pout = parte.startbody(tipo, URL,''
)
mimetools.encode(textoMensaje,pout,'base64')
generador.lastpart()
fromaddr = FROM
toaddrs = TO
server = smtplib.SMTP()
server.connect(SERVIDORSMTP)
server.sendmail(fromaddr, toaddrs, mensaje.getvalue())
server.quit()
else:
fSal = open ('irpf.html', 'w')
fSal.write(f.read())