[pyar] xml.etree.ElementTree

Federico Brest federiconbrest en gmail.com
Lun Dic 16 16:10:31 -03 2019


>
>
> 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!*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191216/4752e780/attachment-0001.html>


Más información sobre la lista de distribución pyar