[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