[pyar] xml.etree.ElementTree
Federico Brest
federiconbrest en gmail.com
Jue Dic 19 13:56:01 -03 2019
Perdón que siga molestando con esto...
Paso el código actualizado, q ahora arroja el siguiente error: "TypeError:
write() argument must be str, not HtmlElement"
Intenté convertir lo que devuelve al API en text con text = html.unescape()
(importando previamente html), pero sigue tirando el mismo error.
Se agradece toda ayuda que puedan brindarme.
Saludos y muchas gracias!
El código en cuestión:
#import json
import msvcrt
import requests
import io
import xml.etree.ElementTree as ET
import lxml
from lxml import html as lxmlhtml
def validar_cuit(cuit):
# validaciones minimas
if len(cuit) != 11:
#print("False")
return False
base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
#cuit = cuit.replace("-", "") # remuevo las barras
# calculo el digito verificador:
aux = 0
for i in range(10):
aux += int(cuit[i]) * base[i]
aux = 11 - (aux - (int(aux / 11) * 11))
if aux == 11:
aux = 0
if aux == 10:
aux = 9
#print("True")
return aux == int(cuit[10])
def getInfoFromApi(cuit):
custom_header = {
'usuario_apikey': "Q2syVkQ2NW1UN2c3MASFDAFWNQeWxVRnJVUT09",
'Cookie':
"__cfduid=de5890d2d1645d887465467b18692a6ad91d6adf1576011069;
MIPROVEEDOR=l5r3dteuh2rkge4879ydt9qm85tl8sm; ROUTEID=.1",
}
url = 'https:/miproveedor.com/api/informes/solicitar/' + str(cuit)
args = {'formato':'xml', 'procesar_forzado':'1', 'cuit': cuit }
source_code = requests.get(url, headers=custom_header,
data=args).content
tree = lxmlhtml.fromstring(source_code)
#response = requests.get(url, headers=custom_header, data=args)
#tree = ET.parse(response.text)
#root = tree.getroot()
#content = response.json()
#print("-- Status Code:", source_code.status_code)
return tree
def saveInfo(content, filename):
'''with io.open(filename, 'w', encoding='utf8') as file:
#json.dump(content, file, indent=4, ensure_ascii=False)
file.write(response.text)
#Process XML here
#tree.write('file-after-edits.xml', encoding='utf8')
'''
with open(filename, 'w', encoding = 'utf-8') as filexml:
filexml.write(content) # o donde esté metido el requests.get().text
filexml.close()
def prettify(elem):
# Devuelve un XML impreso formateado y string del elemento
rough_string = ElementTree.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")
if __name__ == '__main__':
cuit = input("Ingrese un numero de cuit: ")
cuitValido = validar_cuit(cuit)
if cuitValido == False:
print("El Cuit",cuit,"no es Invalido")
print("Presione una tecla para Finalizar...")
msvcrt.getch()
else:
print("cuil válido")
print("- Obteniendo información de", cuit)
info = getInfoFromApi(cuit)
filename = cuit + '.xml'
saveInfo(info, filename)
print("- Guardado en", filename)
print("Presione una tecla para finalizar...")
msvcrt.getch()
El mié., 18 dic. 2019 a las 15:48, Federico Brest (<federiconbrest en gmail.com>)
escribió:
> Ah sisi, pensé que me hablabas de la variable, perdón.
> Si, eso hice, ahora tengo el problema con la variable de devolución del
> método getInfoFromApi
> Le puse que me devuelva tree ( que la genero en esta línea tree =
> lxmlhtml.fromstring(source_code) ) pero me dice que no esta definida
>
>
> El mié., 18 dic. 2019 a las 15:26, Augusto (<adtononi en gmail.com>)
> escribió:
>
>> Lo estás usando. Response se le suele llamar a la devolución del request.
>> En tú caso hiciste:
>> requests.get(url, headers=custom_header, data=args).text
>> Acá pone content en vez de text
>>
>> El mié., 18 dic. 2019 15:16, Federico Brest <federiconbrest en gmail.com>
>> escribió:
>>
>>> No uso response.text finalmente, esta comentada esa linea
>>>
>>> El mié., 18 dic. 2019 a las 15:03, Augusto (<adtononi en gmail.com>)
>>> escribió:
>>>
>>>> Intenta usar response.content en vez de response.text, te va a devolver
>>>> el body en bytes
>>>>
>>>> El mié., 18 dic. 2019 14:36, Federico Brest <federiconbrest en gmail.com>
>>>> escribió:
>>>>
>>>>> Muchas gracias por la pronta respuesta y el aguante!!
>>>>> Compila perfecto, pero me estoy encontrando con el siguiente error:
>>>>> "Unicode strings with encoding declaration are not supported. Please
>>>>> use bytes input or XML fragments without declaration. "
>>>>> Sabes cómo resolverlo?
>>>>>
>>>>> El mié., 18 dic. 2019 a las 14:11, Augusto (<adtononi en gmail.com>)
>>>>> escribió:
>>>>>
>>>>>> Es: from lxml import html as lxmlhtml
>>>>>> Después podes usar lxmlhtml.fromstring, si no me equivoco
>>>>>>
>>>>>>
>>>>>> El mié., 18 dic. 2019 12:09, Federico Brest <federiconbrest en gmail.com>
>>>>>> escribió:
>>>>>>
>>>>>>> Buenas! Hice lo que me recomendaste Agusto, y no me reconoce un
>>>>>>> módulo de fromstring...me comí algo?
>>>>>>> Va el código en cuestión:
>>>>>>>
>>>>>>> #import json
>>>>>>> import requests
>>>>>>> import io
>>>>>>> import xml.etree.ElementTree as ET
>>>>>>> import lxml
>>>>>>> import html as lxmlhtml
>>>>>>> from lxml.html import fromstring
>>>>>>>
>>>>>>> def validar_cuit(cuit):
>>>>>>> # validaciones minimas
>>>>>>> if len(cuit) != 11:
>>>>>>> #print("False")
>>>>>>> return False
>>>>>>>
>>>>>>> base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
>>>>>>>
>>>>>>> #cuit = cuit.replace("-", "")
>>>>>>>
>>>>>>> # calculo el digito verificador:
>>>>>>> aux = 0
>>>>>>> for i in range(10):
>>>>>>> aux += int(cuit[i]) * base[i]
>>>>>>>
>>>>>>> aux = 11 - (aux - (int(aux / 11) * 11))
>>>>>>>
>>>>>>> if aux == 11:
>>>>>>> aux = 0
>>>>>>> if aux == 10:
>>>>>>> aux = 9
>>>>>>>
>>>>>>> #print("True")
>>>>>>> return aux == int(cuit[10])
>>>>>>>
>>>>>>> def getInfoFromApi(cuit):
>>>>>>> custom_header = {
>>>>>>> 'usuario_apikey':
>>>>>>> "QWTERT2syVkQ2NW1UN2c3MWNQeWEWFWEFWExVRnJVUT09",
>>>>>>> 'Cookie':
>>>>>>> "__cfduid=de5890d2d1645d87b18692a6sdfsdfgdfhdad91d6adf1576011069;
>>>>>>> MIPROVEEDOR=l5r3dteuh2rkgwerwerfde4t9qm85tl8sm; ROUTEID=.1",
>>>>>>> }
>>>>>>>
>>>>>>> url = 'https://informe.mirproveedor.com/api/informes/solicitar/'
>>>>>>> + str(cuit)
>>>>>>> args = {'formato':'xml', 'procesar_forzado':'1', 'cuit': cuit }
>>>>>>>
>>>>>>> source_code = requests.get(url, headers=custom_header,
>>>>>>> data=args).text
>>>>>>> tree = lxmlhtml.fromstring(source_code)
>>>>>>>
>>>>>>> #response = requests.get(url, headers=custom_header, data=args)
>>>>>>> #tree = ET.parse(response.text)
>>>>>>> #root = tree.getroot()
>>>>>>> #content = response.json()
>>>>>>>
>>>>>>> print("-- Status Code:", response.status_code)
>>>>>>>
>>>>>>> return content
>>>>>>>
>>>>>>> def saveInfo(content, filename):
>>>>>>> '''with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>> #json.dump(content, file, indent=4, ensure_ascii=False)
>>>>>>> file.write(response.text)
>>>>>>>
>>>>>>> #Process XML here
>>>>>>> #tree.write('file-after-edits.xml', encoding='utf8')
>>>>>>> '''
>>>>>>> with open(filename, 'w', encoding = 'utf-8') as filexml:
>>>>>>> filexml.write(tree)
>>>>>>> filexml.close()
>>>>>>>
>>>>>>>
>>>>>>> def prettify(elem):
>>>>>>> # Devuelve un XML impreso formateado y string del elemento
>>>>>>> rough_string = ElementTree.tostring(elem, 'utf-8')
>>>>>>> reparsed = minidom.parseString(rough_string)
>>>>>>> return reparsed.toprettyxml(indent="\t")
>>>>>>>
>>>>>>>
>>>>>>> if __name__ == '__main__':
>>>>>>> cuit = input("Ingrese un numero de cuit: ")
>>>>>>>
>>>>>>> print("- Obteniendo información de", cuit)
>>>>>>> info = getInfoFromApi(cuit)
>>>>>>>
>>>>>>> cuitValido = validar_cuit(cuit)
>>>>>>> if cuitValido == False:
>>>>>>> print("El Cuit ",cuit," es Invalido")
>>>>>>> print("Presione una tecla para Finalizar...")
>>>>>>> msvcrt.getch()
>>>>>>> else:
>>>>>>> print("cuil válido")
>>>>>>>
>>>>>>> filename = cuit + '.xml'
>>>>>>> saveInfo(info, filename)
>>>>>>> print("- Guardado en", filename)
>>>>>>>
>>>>>>> print("Presione una tecla para finalizar...")
>>>>>>> msvcrt.getch()
>>>>>>>
>>>>>>> El lun., 16 dic. 2019 a las 16:18, Augusto (<adtononi en gmail.com>)
>>>>>>> escribió:
>>>>>>>
>>>>>>>> Entonces hace lo siguiente:
>>>>>>>>
>>>>>>>> Leete esa librería y crea un XML puro, es decir creando nodos (no
>>>>>>>> te olvides de utilizar CDATA, está en la documentación también). A estos
>>>>>>>> nodos insertale la data que extraigas usando las expresiones Xpath (tenes
>>>>>>>> una extensión para el buscador llamada TryXpath, literal pegas la expresión
>>>>>>>> y marca a que elemento corresponde, dicha expresión después la pegas en el
>>>>>>>> script de python).
>>>>>>>>
>>>>>>>> Esto es scrapeo web, vas a econtrar tutoriales para scrapear y
>>>>>>>> meter la info en una tabla, hay miles.
>>>>>>>>
>>>>>>>> Suerte!
>>>>>>>>
>>>>>>>>
>>>>>>>> El lun., 16 dic. 2019 a las 16:10, Federico Brest (<
>>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Olvide indicar, que la importo así
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> from lxml import html as lxmlhtml
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> Jajaja tranqui, lo di por sentado.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> El lun., 16 dic. 2019 a las 16:06, Augusto (<adtononi en gmail.com>)
>>>>>>>>>> escribió:
>>>>>>>>>>
>>>>>>>>>>> Depende qué quieras guardar en el .xml.
>>>>>>>>>>> Yo trabaje con la librería lxml, y para obtener el source code
>>>>>>>>>>> tal como está en el navegador hago lo siguiente:
>>>>>>>>>>>
>>>>>>>>>>> source_code = requests.get(url, headers=headers).text
>>>>>>>>>>>> tree = lxmlhtml.fromstring(source_code)
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Después utilizando expresiones Xpath obtengo la información
>>>>>>>>>>> específica que yo quiero. En mi caso trabaje con noticias, entonces de todo
>>>>>>>>>>> el contenido solo extraía el título, fecha, texto, etc.
>>>>>>>>>>>
>>>>>>>>>>> No entiendo por qué necesitarías el source completo, pero de
>>>>>>>>>>> necesitarlo entonces hace:
>>>>>>>>>>>
>>>>>>>>>>> with open(filename, 'w', encoding = 'utf-8') as filexml:
>>>>>>>>>>>> filexml.write(tree) # o donde hayas metido el
>>>>>>>>>>>> requests.get().text
>>>>>>>>>>>> filexml.close()
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Eso solo para guardar el texto, ya después tenes las funciones
>>>>>>>>>>> propias de lxml para crear los nodos (esto si extraes info específica y
>>>>>>>>>>> querés ordenarla de determinada manera)
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> Buenisimo!! cualquiera de las 2 cosas me vienen muy bien porque la
>>>>>>>>> idea es después guardar en una tabla solo un par de campos (es largo de
>>>>>>>>> explicar, pero basicamente lo que estoy haciendo es un parche porque el
>>>>>>>>> sistema original es una porqueria y no esta desarrollado en python (ni en
>>>>>>>>> ningun lenguaje conocido, es Genexus), y este no permite interactuar con
>>>>>>>>> APIs, sólo usando WS...una caca.
>>>>>>>>> PD: Nunca traten de arreglar sistemas feos que la empresa contrató
>>>>>>>>> a proveedores que desarrollen (no existía sistemas hasta que llegué yo...y
>>>>>>>>> asi estamos, je).
>>>>>>>>>
>>>>>>>>> Muchas gracias !!!
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> El lun., 16 dic. 2019 a las 15:28, Federico Brest (<
>>>>>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Tenes un problema con las variables también. En la función save
>>>>>>>>>>>>> le pasas content y filename, pero después intentas guardar response.text,
>>>>>>>>>>>>> de donde sale eso?
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> La verdad es que ya no me acuerdo jajaja
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yo te recomiendo que generes el xml al momento que obtenés la
>>>>>>>>>>>>> info de la API, y no hacer las cosas por separado.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Buen consejo! como sería el código entonces?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> El lun., 16 dic. 2019 15:04, Federico Brest <
>>>>>>>>>>>>> federiconbrest en gmail.com> escribió:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cuidado con comprartir las credenciales de la API, esa parte
>>>>>>>>>>>>>>> no hace falta.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> No hay problema con eso, fueron caracteres alfanuméricos
>>>>>>>>>>>>>> colocados al azar, no son credenciales verdaderas
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Después, tu función getInfoFromApi no devuelve nada. Fijate
>>>>>>>>>>>>>>> que tenes comentada la línea del content
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Si, me percaté de ese detalle y lo descomenté. Aun asi falla
>>>>>>>>>>>>>> la funcionalidad de escribir el archivo XML
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Tu idea es parar todo el source code de la página a un xml?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> La idea es almacenar en un XML la respuesta recibida de la API
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cualquier ayuda que puedan brindar es más que bienvenida :)
>>>>>>>>>>>>>> Saludos,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> El lun., 16 dic. 2019 11:19, Federico Brest <
>>>>>>>>>>>>>>> federiconbrest en gmail.com> escribió:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Muchas gracias por responder tan pronto :)
>>>>>>>>>>>>>>>> Va de nuevo el código completo:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> #import json
>>>>>>>>>>>>>>>> import requests
>>>>>>>>>>>>>>>> import io
>>>>>>>>>>>>>>>> import xml.etree.ElementTree as ET
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> def validar_cuit(cuit):
>>>>>>>>>>>>>>>> # validaciones minimas
>>>>>>>>>>>>>>>> if len(cuit) != 11:
>>>>>>>>>>>>>>>> #print("False")
>>>>>>>>>>>>>>>> return False
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> #cuit = cuit.replace("-", "") # remuevo las barras
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> # calculo el digito verificador:
>>>>>>>>>>>>>>>> aux = 0
>>>>>>>>>>>>>>>> for i in range(10):
>>>>>>>>>>>>>>>> aux += int(cuit[i]) * base[i]
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> aux = 11 - (aux - (int(aux / 11) * 11))
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> if aux == 11:
>>>>>>>>>>>>>>>> aux = 0
>>>>>>>>>>>>>>>> if aux == 10:
>>>>>>>>>>>>>>>> aux = 9
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> #print("True")
>>>>>>>>>>>>>>>> return aux == int(cuit[10])
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> def getInfoFromApi(cuit):
>>>>>>>>>>>>>>>> custom_header = {
>>>>>>>>>>>>>>>> 'usuario_apikey':
>>>>>>>>>>>>>>>> "Q2syVkQ2NW1UN2c3MWREWGSDDSWNQeWxVRnJVUT09",
>>>>>>>>>>>>>>>> 'Cookie':
>>>>>>>>>>>>>>>> "__cfduid=de5890d2d1645d87b18692a6ad91d6adsrtvcsf1576011069;
>>>>>>>>>>>>>>>> PROVEEDOR=l5r3dteuh2rkge4t9qm85tl8sm; ROUTEID=.1",
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> url = '
>>>>>>>>>>>>>>>> https://informe.unproveedor.com/api/informes/solicitar/' +
>>>>>>>>>>>>>>>> str(cuit)
>>>>>>>>>>>>>>>> args = {'formato':'xml', 'procesar_forzado':'1',
>>>>>>>>>>>>>>>> 'cuit': cuit }
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> response = requests.get(url, headers=custom_header,
>>>>>>>>>>>>>>>> data=args)
>>>>>>>>>>>>>>>> tree = ET.parse(response.text)
>>>>>>>>>>>>>>>> root = tree.getroot()
>>>>>>>>>>>>>>>> #content = response.json()
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> print("-- Status Code:", response.status_code)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> return content
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> def saveInfo(content, filename):
>>>>>>>>>>>>>>>> with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>> #json.dump(content, file, indent=4,
>>>>>>>>>>>>>>>> ensure_ascii=False)
>>>>>>>>>>>>>>>> file.write(response.text)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> if __name__ == '__main__':
>>>>>>>>>>>>>>>> cuit = input("Ingrese un numero de cuit: ")
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> print("- Obteniendo información de", cuit)
>>>>>>>>>>>>>>>> info = getInfoFromApi(cuit)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> cuitValido = validar_cuit(cuit)
>>>>>>>>>>>>>>>> if cuitValido == False:
>>>>>>>>>>>>>>>> print("El Cuit ",cuit," es Invalido")
>>>>>>>>>>>>>>>> print("Presione una tecla para Finalizar...")
>>>>>>>>>>>>>>>> msvcrt.getch()
>>>>>>>>>>>>>>>> else:
>>>>>>>>>>>>>>>> print("cuil válido")
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> filename = cuit + '.xml'
>>>>>>>>>>>>>>>> saveInfo(info, filename)
>>>>>>>>>>>>>>>> print("- Guardado en", filename)
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> print("Presione una tecla para finalizar...")
>>>>>>>>>>>>>>>> msvcrt.getch()
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Abrazo, y nuevamente muchas gracias.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> El lun., 16 dic. 2019 a las 11:14, Lucas Paiva (<
>>>>>>>>>>>>>>>> lucaspaiva.ar en gmail.com>) escribió:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Como estas? lo que pasa que la cosa esta justamente en la
>>>>>>>>>>>>>>>>> función que no estas mostrandonos, si tiene las credentials del cliente
>>>>>>>>>>>>>>>>> sacaselas pero mostranos como traes los datos de la api.
>>>>>>>>>>>>>>>>> De todas maneras vos decis :
>>>>>>>>>>>>>>>>> "cuando se supone que supone que deberìa crear un XML con
>>>>>>>>>>>>>>>>> lo que me devuelve la API, lo que esta haciendo es buscar un archivo local
>>>>>>>>>>>>>>>>> con ese nombre y me lo muestra en la consola...."
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Y la funcion siguiente hace exactamente eso:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ef saveInfo(content, filename):
>>>>>>>>>>>>>>>>> with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>>> file.write(response.text)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Aca estas escribiendo un archivo y luego imprimir el
>>>>>>>>>>>>>>>>> contenido por pantalla. y por lo que se entiende del resto del codigo lo
>>>>>>>>>>>>>>>>> estas creando con extension .XML
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> De todas maneras si mal no recuerdo para escribir un
>>>>>>>>>>>>>>>>> archivo XML valido, deberias hacer algo como:
>>>>>>>>>>>>>>>>> Importar ET de element.etree y hacer algo como :
>>>>>>>>>>>>>>>>> my_data = ET.tostring(res_de_api_o_content_xml)
>>>>>>>>>>>>>>>>> file = ipen("sarasa.xml","w)
>>>>>>>>>>>>>>>>> file.write(my_data)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Sory si no esta todo correcto , lo escribí asi nomas sin
>>>>>>>>>>>>>>>>> probar ningún código.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Saludos.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Lucas
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> El lun., 16 dic. 2019 a las 11:02, Federico Brest (<
>>>>>>>>>>>>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hola gente,
>>>>>>>>>>>>>>>>>> Hic eel siguiente script, pero estoy teniendo
>>>>>>>>>>>>>>>>>> problemas...cuando se supone que supone que deberìa crear un XML con lo que
>>>>>>>>>>>>>>>>>> me devuelve la API, lo que esta haciendo es buscar un archivo local con ese
>>>>>>>>>>>>>>>>>> nombre y me lo muestra en la consola....
>>>>>>>>>>>>>>>>>> Algune podrá darme una mano?
>>>>>>>>>>>>>>>>>> Envío el código en cuestión:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> def saveInfo(content, filename):
>>>>>>>>>>>>>>>>>> with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>>>>>>>>>>>> file.write(response.text)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> if __name__ == '__main__':
>>>>>>>>>>>>>>>>>> cuit = input("Ingrese un numero de cuit: ")
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> print("- Obteniendo información de", cuit)
>>>>>>>>>>>>>>>>>> info = getInfoFromApi(cuit)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ''' getInfoFromApi es otra funcion que esta declarada en
>>>>>>>>>>>>>>>>>> el script. No la transcribo porque estan las key de acceso de lcliente...de
>>>>>>>>>>>>>>>>>> todas formas, esa funcion anda '''
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> cuitValido = validar_cuit(cuit) #esta es otra funcion
>>>>>>>>>>>>>>>>>> que esta declarada en el script
>>>>>>>>>>>>>>>>>> if cuitValido == False:
>>>>>>>>>>>>>>>>>> print("El Cuit ",cuit," es Invalido")
>>>>>>>>>>>>>>>>>> print("Presione una tecla para Finalizar...")
>>>>>>>>>>>>>>>>>> msvcrt.getch()
>>>>>>>>>>>>>>>>>> else:
>>>>>>>>>>>>>>>>>> print("cuil válido")
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> filename = cuit + '.xml'
>>>>>>>>>>>>>>>>>> saveInfo(info, filename)
>>>>>>>>>>>>>>>>>> print("- Guardado en", filename)
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Desde ya muchas gracias!!
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> * Ing. Federico N. Brest*
>>>>>>>>>>>>>>>>>> Ingeniero en Sistemas de Información
>>>>>>>>>>>>>>>>>> Becario Investigador
>>>>>>>>>>>>>>>>>> Universidad Tecnológica Nacional
>>>>>>>>>>>>>>>>>> Facultad Regional Buenos Aires
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es
>>>>>>>>>>>>>>>>>> conseguir, defender y mantener nuestra libertad*” -
>>>>>>>>>>>>>>>>>> Richard Stallman
>>>>>>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente
>>>>>>>>>>>>>>>>>> es necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> * Ing. Federico N. Brest*
>>>>>>>>>>>>>>>> Ingeniero en Sistemas de Información
>>>>>>>>>>>>>>>> Becario Investigador
>>>>>>>>>>>>>>>> Universidad Tecnológica Nacional
>>>>>>>>>>>>>>>> Facultad Regional Buenos Aires
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es
>>>>>>>>>>>>>>>> conseguir, defender y mantener nuestra libertad*” -
>>>>>>>>>>>>>>>> Richard Stallman
>>>>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente
>>>>>>>>>>>>>>>> es necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de
>>>>>>>>>>>>>>> Software Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> * Ing. Federico N. Brest*
>>>>>>>>>>>>>> Ingeniero en Sistemas de Información
>>>>>>>>>>>>>> Becario Investigador
>>>>>>>>>>>>>> Universidad Tecnológica Nacional
>>>>>>>>>>>>>> Facultad Regional Buenos Aires
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina -
>>>>>>>>>>>>> pyar en python.org.ar
>>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>>
>>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>>
>>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> * Ing. Federico N. Brest*
>>>>>>>>>>>> Ingeniero en Sistemas de Información
>>>>>>>>>>>> Becario Investigador
>>>>>>>>>>>> Universidad Tecnológica Nacional
>>>>>>>>>>>> Facultad Regional Buenos Aires
>>>>>>>>>>>>
>>>>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>>>
>>>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>>>
>>>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>>
>>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>>
>>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> * Ing. Federico N. Brest*
>>>>>>>>> Ingeniero en Sistemas de Información
>>>>>>>>> Becario Investigador
>>>>>>>>> Universidad Tecnológica Nacional
>>>>>>>>> Facultad Regional Buenos Aires
>>>>>>>>>
>>>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>>>> _______________________________________________
>>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>>
>>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>>
>>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software
>>>>>>>>> Libre de Argentina - http://www.usla.org.ar
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>>
>>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>
>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> * Ing. Federico N. Brest*
>>>>>>> Ingeniero en Sistemas de Información
>>>>>>> Becario Investigador
>>>>>>> Universidad Tecnológica Nacional
>>>>>>> Facultad Regional Buenos Aires
>>>>>>>
>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>> _______________________________________________
>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>
>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>
>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>
>>>>>> _______________________________________________
>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>> de Argentina - http://www.usla.org.ar
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> * Ing. Federico N. Brest*
>>>>> Ingeniero en Sistemas de Información
>>>>> Becario Investigador
>>>>> Universidad Tecnológica Nacional
>>>>> Facultad Regional Buenos Aires
>>>>>
>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender
>>>>> y mantener nuestra libertad*” - Richard Stallman
>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>> _______________________________________________
>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>> Sitio web: http://www.python.org.ar/
>>>>>
>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>
>>>> _______________________________________________
>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>> Sitio web: http://www.python.org.ar/
>>>>
>>>> Para administrar la lista (o desuscribirse) entrar a
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> --
>>> * Ing. Federico N. Brest*
>>> Ingeniero en Sistemas de Información
>>> Becario Investigador
>>> Universidad Tecnológica Nacional
>>> Facultad Regional Buenos Aires
>>>
>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
>>> mantener nuestra libertad*” - Richard Stallman
>>> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
>>> ¡Cuidemos nuestro Ambiente!*
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
>
> --
> * Ing. Federico N. Brest*
> Ingeniero en Sistemas de Información
> Becario Investigador
> Universidad Tecnológica Nacional
> Facultad Regional Buenos Aires
>
> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
> mantener nuestra libertad*” - Richard Stallman
> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
> ¡Cuidemos nuestro Ambiente!*
>
--
* Ing. Federico N. Brest*
Ingeniero en Sistemas de Información
Becario Investigador
Universidad Tecnológica Nacional
Facultad Regional Buenos Aires
“*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
mantener nuestra libertad*” - Richard Stallman
*P* *Antes de imprimir este mensaje, piense si realmente es necesario.
¡Cuidemos nuestro Ambiente!*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191219/f5f2b0ff/attachment-0001.html>
Más información sobre la lista de distribución pyar