Acceso programático a los tipos de cambio de divisas [cerrado]


112

Estoy configurando un sistema de pedidos en línea, pero estoy en Australia y, para los clientes internacionales, me gustaría mostrar los precios en dólares estadounidenses o euros para que no tengan que hacer el esfuerzo mental de convertir de dólares australianos.

¿Alguien sabe si puedo obtener los tipos de cambio actualizados de la red en algún lugar en un formato fácil de analizar al que pueda acceder desde mi script PHP?


ACTUALIZACIÓN: ahora he escrito una clase PHP que implementa esto. Puede obtener el código de mi sitio web .


1
@Kelly: Muy buena sugerencia, porque Google es gratuito y tiene grandes posibilidades de seguir existiendo en un futuro previsible: me gustaría sugerir que la envíe como respuesta.
Eric O Lebigot

1
Parece que no se puede editar el comentario. Aquí está el nuevo enlace jarloo.com/exchange-rate-api
Kelly

1
¡Gracias por compartir @Adam Pierce! ¿Hay alguna forma de obtener también tasas históricas?
Aris

También puede utilizar este enlace. Es gratis Solo regístrese y obtenga API KEY. jsonrates.com/docs
Gajendra K Chauhan

Use currencylayer.com : proporcionan tasas históricas y en tiempo real en formato JSON, junto con algunos ejemplos de PHP ( currencylayer.com/documentation )
Frank

Respuestas:


71

Puede obtener conversiones de moneda en un formato simple de yahoo:

Por ejemplo, para convertir de GBP a EUR: http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=sl1d1t1ba&e=.csv


Eso está actualizado y es fácil de analizar. Esto es lo que busco.
Adam Pierce

4
También me interesa esto, ¿hay alguna información sobre lo que significan los parámetros? Específicamente el parámetro "f". No puedo encontrar ninguna información en ninguna parte.
Fishcake

9
¿Es legal leer estos datos si tiene un sitio web comercial?
Junior Mayhé

4
La experimentación adicional muestra que puede solicitar múltiples tasas de conversión a la vez separando con comas los símbolos en el parámetro 's' así: download.finance.yahoo.com/d/…
Myster

3
¿Hay alguna forma de especificar una fecha?
Maxim Egorushkin

40

Esta respuesta es MUY tardía, pero falta información clave en las respuestas anteriores.

Si desea mostrar precios precisos a sus clientes, es importante comprender cómo funcionan los tipos de cambio.

La mayoría de los servicios de divisas solo cotizan la tasa al contado (a medio camino entre la oferta y la demanda). El lugar es una especie de abreviatura del tipo de cambio, pero nadie obtiene el lugar porque solo puede vender al precio de oferta o comprar al precio de compra. Por lo general, busca un margen de al menos un 1% entre ellos, por lo que la tasa al contado es un 0,5% de descuento para sus clientes.

Pero no se detiene allí, es casi seguro que sus clientes estén usando una tarjeta de crédito y Visa / Mastercard / Amex cobran tarifas de cambio de divisas. En mi experiencia, estos no son triviales, al MENOS 2.5%. Por ejemplo, Citibank Australia cobra un 3,3%. Estos varían de una tarjeta a otra, por lo que no hay forma de predecir el precio final que se facturará a sus clientes.

Si desea cotizar un precio "exacto" a sus clientes basado en un tipo de cambio, debe tener en cuenta lo anterior y proporcionar un margen para que no termine cobrando más de lo que cotizó.

FWIW, he estado agregando un 4% a lo que indicaría la conversión F / X.


Además, las tasas de cambio cambian todo el tiempo, y los bancos solo pueden tener en cuenta la tasa a la medianoche, hora local. Con ~ 2% volatilidad diaria, no es la incertidumbre.
Alexandre C.

1
Ese es un gran punto. Definitivamente refuerza la necesidad de un búfer de algún tipo si está mostrando una moneda, pero cobrando otra. Por lo que vale, con mi relleno del 4%, nunca he tenido a nadie que haga un contracargo.
philoye

No todos los bancos cobran eso. Las tarjetas de crédito y débito de México, por ejemplo, solo convertirán la moneda al precio que tienen ese día para la venta de la moneda, y nada más.
Francisco Zarabozo

26

Podría ser bueno agregar

  http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

a la lista.

Los tipos de referencia oficiales proporcionados por el Banco Central Europeo se basan en el procedimiento de concertación diario habitual entre los bancos centrales dentro y fuera del Sistema Europeo de Bancos Centrales.

El feed está en XML y algunos otros formatos .
La actualización normalmente tiene lugar a las 2.15 pm (14:15) hora del BCE (= hora de Frankfurt).


4
Acabo de verificar (20 minutos después de su comentario) y está disponible para mí.
Jacco

Acabo de intentar usar esto, pero VB.NET se niega a XPath correctamente. ¿Esto se debe a que las URL que definen los espacios de nombres son 404ing?
Rikki

este enlace siempre muestra las tarifas de ayer, no las de hoy.
erkanyildiz

12

Recientemente implementé lo mismo, pero usando la API de Google. La URL de consulta tiene este aspecto:

http://www.google.com/ig/calculator?hl=en&q=1GBP=?USD

Toma 3 parámetros. El primer parámetro es la cantidad, seguido del código de moneda ISO 4217 desde el que está convirtiendo, un signo igual y un signo de interrogación, y el código de moneda al que está convirtiendo. Puede encontrar una lista de códigos compatibles con Google aquí . La respuesta a la consulta se verá así:

{lhs: "1 British pound",rhs: "1.6132 U.S. dollars",error: "",icc: true}

Esto se explica por sí mismo, por lo que no entraré en detalles aquí. Así es como manejé la respuesta de la consulta:

function convert_currency($amount, $from_code, $to_code){
    ini_set('max_execution_time', 60);
    $temp = 'http://www.google.com/ig/calculator?hl=en&q=' . $amount . $from_code . '=?' . $to_code;

    $response = file_get_contents($temp);
    $result_string = explode('"', $response);

    $final_result = $result_string['3'];

    $float_result = preg_replace("/[^0-9\.]/", '', $full_result);

    return $float_result;
}

Estoy seguro de que está lejos de ser la forma más elegante de hacer esto, pero soy bastante nuevo en PHP. ¡Espero eso ayude!


2
Puede usar json_decode en lugar de explotar si desea que sea más confiable.
diolemo

¿Existen limitaciones con este servicio?
sitios

Esto es demasiado fácil de expresar y usar ... Gracias
IWIH

5
"iGoogle se retiró el 1 de noviembre de 2013", su aplicación ya no funciona
yegor256

Usé un código similar que se ha cambiado para usar el método Yahoo quotes.csv con solo dos cambios de línea en el código.
Marcus

12

Otro gran enlace gratuito y de código abierto es este:

https://raw.github.com/currencybot/open-exchange-rates/master/latest.json
(lo encontré aquí: http://josscrowcroft.github.com/open-exchange-rates/ )

[Actualización] :
Los datos del proyecto Open Exchange Rates se han alejado de GitHub.
Está disponible ahora en: http://openexchangerates.org/ Los
datos en formato JSON están disponibles en: http://openexchangerates.org/latest.json

Sin tarifas de acceso, sin límites de tasas , sin XML feo, solo tipos de cambio gratuitos actualizados por hora en formato JSON.
Esto no es "completamente" gratis ahora. La nueva licencia establece que se permiten hasta 1000 visitas por mes, y luego debe pagar. También debe pagar si desea utilizar el conversor de moneda única (funcionalidad básica).

[Nota: es posible que también desee ver esta respuesta. ]


1
Quizás ya no funcione
shasi kanth

1
Gracias @dskanth por recordármelo. Enlace e información actualizada. :)
zeFree

1
Un plan gratuito de OpenExchangeRates está disponible aquí con 1000 solicitudes al mes ... es un enlace pequeño por lo que no lo verá en la mayoría de los casos ... openexchangerates.org/signup/free
TheFlash

6

Agregué la tabla de datos abiertos a YQL, puede usarla para recuperar datos de tipos de cambio de yahoo.finance.

Pruébelo en la consola de YQL

El formato separado por comas es preferible a "dónde se empareja ('EURUSD', 'GBPUSD')" pero de todos modos, puede usar ambos e incluso mezclarlos.


Gracias amigo. ¡Esto, combinado con los documentos YQL en PHP, me ayudó mucho!
miCRoSCoPiC_eaRthLinG

hola, podemos agregar el parámetro de fecha, por ejemplo, quiero obtener el tipo de cambio histórico.
Elisa



3

Pruebe este RESTful (no estoy seguro de si esto es realmente un REST, ya que lo obtuve originalmente de un SOAP, solo intenté acceder a él usando HTTP GET)


No veo dónde proporcionó la "cantidad" para convertir, pero recupera un número ... ¿puede explicar esto?
SpokaneDude

1
No acepta cantidad. Esto solo convertirá fromCurrency a toCurrency donde la cantidad de fromCurrency es siempre uno (1). Entonces depende de usted hacer su algoritmo para convertir su cantidad
Kevin

Gracias, eso tiene sentido. ahora ...
SpokaneDude

3

iGoogle se retiró el 1 de noviembre de 2013. Esta API ya no funciona.

Para obtener el tipo de cambio, puede usar algo como esto:

function get_exchange_rate($from, $to){
    $data = file_get_contents("http://www.google.com/ig/calculator?hl=en&q=1{$from}=?{$to}");
    preg_match('/rhs\:\s?"([0-9\.]+)/', $data, $m);
    return $m[1];
}

Puede agregar un caché de base de datos allí para asegurarse de que no se ralentice, etc.

Como se ha señalado en otras publicaciones / comentarios, usaría esta tasa para calcular sus monedas


2

XE.com proporciona información sobre sus tipos de cambio. Aunque no es gratis.



1

coinnill.com tiene una especie de servicio web.

http://coinmill.com/rss/AUD_USD.xml

le dará la tasa AUD -> USD, por ejemplo. Solo necesitará analizar el XML que regresa.


Esa información parece obsoleta. Dice que AUD es 0,77 pero sé que hoy es 0,69.
Adam Pierce

Además, los datos útiles (los tipos de cambio) son los únicos bits que no están codificados en XML. Es solo texto sin formato en un CDATA ...
Rikki

1

Me siento obligado a agregar:

http://www.exchangerate-api.com/

Muy simple de usar con una API RESTful limpia y el registro demora 5 segundos. Incluye ejemplos de codificación para la mayoría de los idiomas principales, la mayoría tienen entre 2 y 3 líneas.

Las tarifas se actualizan cada hora, por lo que está bien para la mayoría de los usos, y puede obtener 30000 consultas mensuales por $ 7 al mes. Nunca he necesitado más que eso, pero las tarifas son muy razonables para volúmenes más altos.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.