cotizaciones

1,256 views
Skip to first unread message

Marcelo Zunino

unread,
Oct 6, 2017, 5:09:43 PM10/6/17
to linuxpay, linuxsalto

Hola,
Necesito obtener cotizaciones al cierre de las monedas extranjeras del
Banco Central, En el sitio del BCU no pude encontrar referencias a web
service, una api o algo que facilitara las cosas.
Se que el asunto pasó por aquí antes, pero ahora no lo pude encontrar.
Si alguien tiene o conoce de algo así?

Saludos,

Rosas Toriani Luis Marcelo

unread,
Oct 6, 2017, 5:30:27 PM10/6/17
to linux...@googlegroups.com

--
Has recibido este mensaje porque estás suscrito al grupo "linuxsalto" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a linuxsalto+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a linux...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/linuxsalto.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Rosas Toriani Luis Marcelo

unread,
Oct 6, 2017, 5:42:53 PM10/6/17
to linux...@googlegroups.com

Marcelo Zunino

unread,
Oct 9, 2017, 4:04:43 PM10/9/17
to linuxsalto
Esto me respondió una compañera de linuxpay. El ejemplo es php ¿no?



-------- Forwarded Message --------
Subject: Re: [linuxpay] cotizaciones
Date: Fri, 6 Oct 2017 21:33:41 -0300
From: Paola Bruccoleri <pbruc...@adinet.com.uy>
To: Marcelo Zunino <marcelo...@infoprimo.com>



Hola..
si, tiene, lo estoy usando para obtener la cotización dólar interbancario

$soap_url =
'https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones?wsdl';

La llamada es así:

$llamada=  array(
            'Entrada' =>array (
                 'Moneda' =>
                     array('item' => $tipo),
                 'FechaDesde' => $fecha,
                 'FechaHasta' => $fecha
                           )
                 );

$fecha= la fecha del cambio
$tipo= código de la moneda a consultar (USD=2225)

Espero te sirva,
Saludos!


El 06/10/2017 a las 19:44, Marcelo Zunino escribió:
>
>
> On 06/10/17 18:56, Gustavo Conradi wrote:
>> No se si es lo que buscas, es el que uso
>> http://www.bcu.gub.uy/Estadisticas-e-Indicadores/Paginas/Cotizaciones.aspx
>>
>
> Gracias por las respuestas. Acá apareció el bicho. Lo pasó Marcelo Rosa
> de Linuxsalto
>   más detalles: http://www.bcu.gub.uy/busqueda/_vti_bin/search.asmx

Marcelo Zunino

unread,
Oct 9, 2017, 11:01:06 PM10/9/17
to linuxsalto

Hola,
Usando `suds` resultó muy fácil, realmente.

Es menos que un aprueba de concepto, pero funciona. Los valores de
configuración están forzados en el código. Como mínimo las fechas
deberían ser parámetros, apenas tenga un tiempo.... Tal vez alguien se
anima a transformarlo en un script útil.

    https://bitbucket.org/mzunino/cotiza_bcu

Saludos

Rosas Toriani Luis Marcelo

unread,
Oct 10, 2017, 9:33:50 AM10/10/17
to linux...@googlegroups.com
Ok, gracias, voy a probar con esos datos

Juandy Ocampo

unread,
Oct 10, 2017, 2:50:36 PM10/10/17
to linux...@googlegroups.com
Marcelo, cómo estás? Que es lo que tendría que hacer el script?

Marcelo Zunino

unread,
Oct 10, 2017, 6:06:03 PM10/10/17
to Juandy Ocampo, linuxsalto

On 10/10/17 18:58, Juandy Ocampo wrote:
Para no marearme lo quieres en PHP o Python?


Está hecho en python.

Veo que estás un poco perezoso ... Lo que hay detrás del URL https://bitbucket.org/mzunino/cotiza_bcu/overview
es esto:

Cotizaciones de moneda extranjera BCU

Una script muy simple para obtener cotizaciones de divisas al cierre.


y eso es todo lo que el script sabe hacer hace.




El 10 oct. 2017 18:56, "Marcelo Zunino" <marcelo...@infoprimo.com> escribió:
todo esto: https://bitbucket.org/mzunino/cotiza_bcu/overview



On 10/10/17 15:50, Juandy Ocampo wrote:
> Marcelo, cómo estás? Que es lo que tendría que hacer el script?
>
> El 10 oct. 2017 0:01, "Marcelo Zunino" <marcelo...@infoprimo.com
> <mailto:marcelo.zunino@infoprimo.com>> escribió:

>
>
>     Hola,
>     Usando `suds` resultó muy fácil, realmente.
>
>     Es menos que un aprueba de concepto, pero funciona. Los valores de
>     configuración están forzados en el código. Como mínimo las fechas
>     deberían ser parámetros, apenas tenga un tiempo.... Tal vez alguien se
>     anima a transformarlo en un script útil.
>
>         https://bitbucket.org/mzunino/cotiza_bcu
>     <https://bitbucket.org/mzunino/cotiza_bcu>
>
>     Saludos













Marcelo Zunino

unread,
Oct 10, 2017, 7:20:52 PM10/10/17
to linuxpay, linuxsalto

Mandé un commit que corrije la falta de llamado a la función que genera
las definiciones.
En las pruebas me funcionó porque ya tenía el xml con las definiciones... :/

https://bitbucket.org/mzunino/cotiza_bcu/downloads/ o

$ hg clone https://bitbucket.org/mzunino/cotiza_bcu ./micopia

Saludos.

Juandy Ocampo

unread,
Oct 10, 2017, 7:36:16 PM10/10/17
to linux...@googlegroups.com
Ya me creé una cuenta en bitbucket y también me puse el plugin de Python para netbeans.
Captura de pantalla de 2017-10-10 20:35:14.png

Juandy Ocampo

unread,
Oct 10, 2017, 7:59:21 PM10/10/17
to linux...@googlegroups.com
Marcelo estuve probando y me da el error de la imagen. Saludos
Captura de pantalla de 2017-10-10 20:58:31.png

Marcelo Zunino

unread,
Oct 10, 2017, 11:02:03 PM10/10/17
to linux...@googlegroups.com

En el directorio de trabajo del script hay una archivito que se llama README.rst.

Allí dice que una de las dependencias es `suds` un módulo que debés instalar.

Sos muy muy perezoso Juandy... ni para leer el Léame te alcanzó! :-P


Juandy pero que fashion tu desktop, ¿que distro es? ¿es software libre?



On 10/10/17 20:59, Juandy Ocampo wrote:
Marcelo estuve probando y me da el error de la imagen. Saludos
--

Juandy Ocampo

unread,
Oct 10, 2017, 11:13:39 PM10/10/17
to linux...@googlegroups.com
Marcelo mira que me leí el Leame, y puse los comandos que decía, es raro que no ande.

Te refieres por el menu? descuida es Linux Mint 17.3, estuve mirando y a partir de las versiones 17 en adelante,
puedes personalizar el menu del escritorio y las ventanas, pero sigue siendo mint.

Para que veas que no miento, pongo la imagen.

sólo para experimentar, nada más.
Captura de pantalla de 2017-10-11 00:12:51.png

emezeta

unread,
Oct 10, 2017, 11:27:02 PM10/10/17
to linuxsalto


El miércoles, 11 de octubre de 2017, 0:13:39 (UTC-3), detectivejd escribió:
Marcelo mira que me leí el Leame, y puse los comandos que decía, es raro que no ande.


Podés verificar si los módulos quedaron bien instalados apelando a una prueba sencilla en una terminal

~ $ python -c "import suds"
~ $

Si la salida es una línea en blanco, los módulos están funcionando. En caso contrario la salida al mismo comando sería algo así:

~ $ python -c "import suds"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named suds


 
Te refieres por el menu? descuida es Linux Mint 17.3, estuve mirando y a partir de las versiones 17 en adelante,
puedes personalizar el menu del escritorio y las ventanas, pero sigue siendo mint.
 
Ah me encanta... En particular ese caudradito que quiere parecer una ventanita... un poema
 

Juandy Ocampo

unread,
Oct 10, 2017, 11:36:49 PM10/10/17
to linux...@googlegroups.com
Probé el comando y no muestra quiere decir que los módulos andan.

Por otro lado si quieres le saco el menú y todo, cómo te había dicho sólo era para probar.

--
Has recibido este mensaje porque estás suscrito al grupo "linuxsalto" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a linuxsalto+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a linux...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Captura de pantalla de 2017-10-11 00:28:49.png
Captura de pantalla de 2017-10-11 00:35:58.png

emezeta

unread,
Oct 11, 2017, 10:34:53 PM10/11/17
to linuxsalto


El miércoles, 11 de octubre de 2017, 0:36:49 (UTC-3), detectivejd escribió:
Probé el comando y no muestra quiere decir que los módulos andan.

Al final te anduvo bien ¿no?

Hoy hice algunas modificaciones, documenté un poco y  ordené el rancho.
Lo más interesante es que ahora `suds` no usa el cacheo de datos y configuraciones. Esto hace que las definiciones del web service se generen en cada ejecución.
   
    https://bitbucket.org/mzunino/cotiza_bcu/commits/701c38cfeb1c1d7f028a99e21e4474b579f99a19

La idea ahora es prescindir del archivo de definiciones y parsearlas al vuelo, desde request.get(wsdl remoto) directo a la instanciación del cliente.

Usando json, por ejemplo sería alago así:

     
import simplejson as json

 ...

res = requests.get(wsdl_url, headers=headers, verify=cacert)
definiciones_json_obj = json.dumps(res)
client = Client(definiciones_json_obj, cache=NoCache())


...


o lo que sería equivalente:

  
client =
Client(json.dumps(requests.get(wsdl_url, headers=headers, verify=cacert)), cache=NoCache())


Habría que investigar si `suds` soporta el parsing de las definiciones wsdl como objeto y/o que tipo de maniobras serían necesarias para mandárselo cocinado y no como una referencia la filesystem... ¿te animás?

Saludos.


Juandy Ocampo

unread,
Oct 11, 2017, 11:43:17 PM10/11/17
to linux...@googlegroups.com
Marcelo probé y ahora me anduvo en netbeans, el problema era que tenía jython y no python, tontería mía.

Encontré esto que puede ser útil:



Saludos. 

Juandy Ocampo

unread,
Oct 11, 2017, 11:44:30 PM10/11/17
to linux...@googlegroups.com
PD: Te mostraría la imagen, pero al querer adjuntar una imagen se cierra el navegador, además de no acceder
a configuración de sistema y a mis carpetas, que raro. 

Juandy Ocampo

unread,
Oct 11, 2017, 11:58:55 PM10/11/17
to linux...@googlegroups.com
Probé los cambios y me da esto:


DLS. USA BILLETE 
Fecha: 11-10-2017
Tipo Comprador: 29.326 

Marcelo Zunino

unread,
Oct 12, 2017, 7:34:13 PM10/12/17
to linux...@googlegroups.com
https://stackoverflow.com/questions/20448276/python-making-a-request-with-suds?answertab=active#tab-top


On 12/10/17 00:43, Juandy Ocampo wrote:
> Marcelo probé y ahora me anduvo en netbeans, el problema era que tenía
> jython y no python, tontería mía.
>
> Encontré esto que puede ser útil:
>
> https://stackoverflow.com/questions/36180706/how-can-i-parse-xml-content-of-wsdl-using-python-suds

este habla del asunto, efectivamente. hay que investigar por esa línea.

>
> https://stackoverflow.com/questions/20448276/python-making-a-request-with-suds

La respuesta top del hilo no es de lo más adecuado que se ha visto. Tal
vez porque la pregunta es un poco difusa.
En realidad, lo que quién pregunta quiere hacer es obtener definiciones
para instanciar el cliente.
Luego, con esa instancia puede armar las peticiones que necesite y que
las definiciones permitan hacer.

Lo que pasó es que don preguntón no tenía claro cómo hacer lo que quería
hacer. Ni siquiera disponía de la información acerca del URL correcto
para obtener las definiciones, es decir el URL del web service.

Lo que se debe indagar es si `suds.client.Client` puede recibir las
definiciones como objeto o texto (xml,json,..). Si no lo soporta,
entonces se debe indagar si existe alguna forma/maniobras previstas para
tal fin el el módulo `suds`. Si los resultados fueran negativos,
entonces no queda otra que intentar patchear el código.

Que se yo, es probable que sea una funcionalidad soportada. Hay que ver...

Saludos



>
> Saludos. 
> --
> Has recibido este mensaje porque estás suscrito al grupo "linuxsalto"
> de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus
> mensajes, envía un correo electrónico a
> linuxsalto+...@googlegroups.com
> <mailto:linuxsalto+...@googlegroups.com>.
> Para publicar en este grupo, envía un correo electrónico a
> linux...@googlegroups.com <mailto:linux...@googlegroups.com>.

Juandy Ocampo

unread,
Oct 12, 2017, 8:49:04 PM10/12/17
to linux...@googlegroups.com
probé con esto:

client = Client(json.dumps(requests.get(wsdl_def_url, headers=x_headers, verify=x_cacert)), cache=NoCache())

y me da este error:

Traceback (most recent call last):
  File "/home/detectivejd/NetBeansProjects/Python/cotizacion_bcu/cotizaciones.py", line 38, in <module>
    client = Client(json.dumps(requests.get(wsdl_def_url, headers=x_headers, verify=x_cacert)), cache=NoCache())
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 455, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 553, in send
    adapter = self.get_adapter(url=request.url)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 598, in get_adapter
    raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for 'file:///tmp/awsbcucotizaciones.xml'

Federico Antón

unread,
Oct 17, 2017, 5:17:23 PM10/17/17
to Usuarios GNU/Linux Salto
Marcelo, muy bueno tu script!

Va un ejemplo de cómo sería en PHP:
<?php
$context = [
"ssl" => [
"verify_peer" => FALSE,
"verify_peer_name" => FALSE,
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT
]
];

$options = [
'cache_wsdl' => WSDL_CACHE_NONE,
'stream_context' => stream_context_create($context)
];

$params = [
'Entrada' => [
'FechaDesde' => '2017-10-17',
'FechaHasta' => '2017-10-17',
'Grupo' => 2,
'Moneda' => ['item' => 2225]
]
];

$client = new SoapClient('https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones?wsdl', $options);

$response = $client->Execute($params);

print_r($response->Salida->datoscotizaciones);

Saludos!
Fede

--
Has recibido este mensaje porque estás suscrito al grupo "linuxsalto" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a linuxsalto+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a linux...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/linuxsalto.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
AP Federico Antón | Socio Director
(+598) 473 3 71 81
www.grupoite.com.uy

Juandy Ocampo

unread,
Oct 17, 2017, 11:28:36 PM10/17/17
to linux...@googlegroups.com
Fede probé tu código, pero no muestra nada:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Test - Cotización</title>
    </head> 
    <body>
        <h3>Hola!!</h3>
        <?php
            use SoapClient;
            $context = [
              "ssl" => [
                "verify_peer"      => FALSE,
                "verify_peer_name" => FALSE,
                'crypto_method'    => STREAM_CRYPTO_METHOD_TLS_CLIENT
              ]
            ];
            $options = [
              'cache_wsdl'     => WSDL_CACHE_NONE,
              'stream_context' => stream_context_create($context)
            ];
            $params = [
              'Entrada' => [
                'FechaDesde' => '2017-10-17',
                'FechaHasta' => '2017-10-17',
                'Grupo'      => 2,
                'Moneda'     => ['item' => 2225]
              ]
            ];

            $client = new SoapClient('https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones?wsdl', $options);
            $response = $client->Execute($params);
            print_r($response->Salida->datoscotizaciones);
        ?>
    </body>
</html>

Me sale el hola en la página pero las cotizaciones no. Saludos.

Federico Antón

unread,
Oct 18, 2017, 7:05:02 AM10/18/17
to Usuarios GNU/Linux Salto
Marcelo, al parecer en esa máquina tenes el php como viene de fábrica. Necesitas instalar php-soap

Juandiego, seguramente también te falte instalar eso.

Si alguíen se anima a mejorarlo (que con poco se puede lograr) podría recibir parámetros desde la url.

También estaría bueno que pueda mantener guardado el valor del último cierre, porque a veces el web service da que no está disponible. 

Saludos!
Fede

--

Marcelo Zunino

unread,
Oct 18, 2017, 7:46:40 PM10/18/17
to Federico Antón, linux...@googlegroups.com
Un golazo, notoriamente más veloz que el que tenemos en python. (eso sí, mucho más feo) :-P

<?php
$context = [
  "ssl" => [
    "verify_peer"      => FALSE,
    "verify_peer_name" => FALSE,
    'crypto_method'    => STREAM_CRYPTO_METHOD_TLS_CLIENT
  ]
];

$options = [
  'cache_wsdl'     => WSDL_CACHE_NONE,
  'stream_context' => stream_context_create($context)
];

$params = [
  'Entrada' => [
    'FechaDesde' => '2017-10-17',
    'FechaHasta' => '2017-10-17',
    'Grupo'      => 2,
    'Moneda'     => ['item' => 2225]
  ]
];

$client = new SoapClient('https://cotizaciones.bcu.gub.uy/wscotizaciones/servlet/awsbcucotizaciones?wsdl', $options);

$response = $client->Execute($params);

print_r($response->Salida->datoscotizaciones);
?>

    ~ $ php /tmp/fede.php

stdClass Object
(
    [datoscotizaciones.dato] => stdClass Object
        (
            [Fecha] => 2017-10-17
            [Moneda] => 2225
            [Nombre] => DLS. USA BILLETE
            [CodigoISO] => DLS.
            [Emisor] => ESTADOS UNIDOS
            [TCC] => 29.437
            [TCV] => 29.437
            [ArbAct] => 1
            [FormaArbitrar] => 0
        )

)
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a linuxsalto+...@googlegroups.com.

Juandy Ocampo

unread,
Oct 24, 2017, 9:29:42 PM10/24/17
to linux...@googlegroups.com
Tenías razón Fede, me faltaba el php-soap pero le puse el php7.2-soap porque tengo php 7.2 y anduvo!!

te pongo la imagen para que veas cómo quedó. Saludos.
Captura de pantalla de 2017-10-24 22:25:35.png
Reply all
Reply to author
Forward
0 new messages