2011-04-25 26 views
12

Indique la API para la conversión de moneda que devuelve JSON o html de pequeño tamaño. Yo uso http://www.google.com/finance/converter?a=1&from=RUB&to=USD que devuelve HTML de 11 kb. Lo uso en mi aplicación iOS.Necesita API para la conversión de moneda

¡Gracias de antemano!

+0

posible duplicado de [¿Cómo consigo los tipos de cambio a través de una API como Google Finance?] (http://stackoverflow.com/questions/3139879/how-do-i-get- moneda de tipos de tasas-via-un-api-tal-como-google-finanzas API Comparación 5) Véase en – TRiG

+0

[gratuitos y de pago Convertidor de divisas API Comparación] (http://www.freecurrencyconverterapi.com) –

Respuesta

11

Yahoo Finance Currency Converter.

Este formato de url se puede utilizar para obtener las tasas de conversión en diferentes formatos.

http://download.finance.yahoo.com/d/quotes.csv?s=AUDUSD=X&f=nl1d1t1 

quotes.csv Sustituto con el formato y los parámetros apropiados con los códigos requeridos

EDIT: Agregado Ejemplo Url formatos

+0

Parece que es lo que estaba buscando. ¡Gracias! – kastet

+0

Parece que esta llamada y la llamada https se cerraron con una respuesta, "Nos ha llegado la atención de que este servicio se está utilizando en violación de las Condiciones del servicio de Yahoo. Como tal, el servicio se suspenderá. Para todos los mercados futuros y la investigación de datos de acciones, consulte finance.yahoo.com." – Jacksonsox

12

Como se mencionó en los comentarios de este servicio se cerró en noviembre de 2013.

Googles calulator API puede hacer esto;

Solicitud:

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

Respuesta:

{lhs: "100 Euros",rhs: "145.67 U.S. dollars",error: "",icc: true} 

(More info)

+0

Probé éste pero no coincide completamente con el estándar de las monedas ISO. Por ejemplo, los rublos rusos son" RUB "por ISO pero" RUR "por ese sistema. Eso lo hace inútil. – kastet

+0

¿Hay otros? RUB & RUR parecen intercambiable en ese sistema probablemente porque RUR era el antiguo identificador ISO –

+5

iGoogle está desactivado, por lo que ahora puedes probar yahoo http://bit.ly/1cPOH2F :) – MyMomSaysIamSpecial

10

Ahora iGoogle se ha matado, la solución de Alex K ya no funciona con tristeza. en PHP, esta es una alternativa que funciona de la misma manera y es igual de eficaz:

$amount = urlencode($amount); 
$from_Currency = urlencode($from_Currency); 
$to_Currency = urlencode($to_Currency); 
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from_Currency&to=$to_Currency"); 
$get = explode("<span class=bld>",$get); 
$get = explode("</span>",$get[1]); 
$converted_amount = preg_replace("/[^0-9\.]/", null, $get[0]); 
+3

O use yahoo http://bit.ly/1cPOH2F :) – MyMomSaysIamSpecial

+0

@hobailey gracias por esto –

+0

Esto es obviamente una solución hacky, pero una que funciona, así que gracias :) –

4

que estaba usando iGoogle hasta que se acaba de ir a pique, no me falla.

Gracias a Nerfair aunque en su comentario en respuesta al comentario anterior de hobailey, esto funciona IMPRESIONANTE. ¡Pensé en publicarlo aquí para que puedas ver cómo funciona!

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ("USDCNY")&format=json&env=store://datatables.org/alltableswithkeys&callback=

Aquí es la URL del enlace codificado: http://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20yahoo.finance.xchange% 20where% 20pair% 20in% 20% 28% 22USDCNY% 22% 29 & formato JSON = & env = tienda : //datatables.org/alltableswithkeys & callback =

Super nice, simplemente cambie el par de divisas. Gracias Nerfair!

8

ACTUALIZACIÓN: Yahoo API ya no funciona. Dejar esta respuesta heredada solo para proporcionar información de que esto ya no funciona.


uso yahoo api:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDLTL%22)&format=json&env=store://datatables.org/alltableswithkeys&callback= 

que el formato JSON volverá como:

{ 
    query: { 
    count: 1, 
    created: "2013-12-04T13:52:53Z", 
    lang: "en-US", 
    results: { 
    rate: { 
     id: "USDLTL", 
     Name: "USD to LTL", 
     Rate: "2.5485", 
     Date: "12/4/2013", 
     Time: "8:52am", 
     Ask: "2.5486", 
     Bid: "2.5485" 
     } 
    } 
    } 
} 

salir en la URL no es USDLTL ahora, para simplemente cambiar a lo que necesita.

también en algún momento la tasa es tan baja, que no lo ve incluso con 4 números que muestra:

Rate: 0,0006

No se asuste simplemente hacer una consulta reversión, dar la vuelta y sus monedas hacer algunas matemáticas simples.

p. Ej. tienes que la tasa es de KRW a EUR 0,0006, pero la tasa real es algo así como 0,00000125, así que pregunta de nuevo API, simplemente da la vuelta a las monedas: cuál es la razón de EUR a USD. por lo que recibirá el número tan grande como 12500000.xxx así que las matemáticas para obtener la relación que necesita: 1/12500000 y obtendrá ratio = 0,00000125

Espero que ayude;)

P. S. URL decodificada que es más fácil de leer el siguiente aspecto:

http://query.yahooapis.com/v1/public/yql 
?q=select * from yahoo.finance.xchange where pair in ("USDLTL") 
&format=json 
&env=store://datatables.org/alltableswithkeys 
&callback= 
+1

¿Puedes publicar una consulta de origen, no esa horrorosa magia negra? – Andy

+1

Se agregó url legible decodificado, ¿mejor ahora? ;) –

+1

Gracias !!!!!! – Andy

5

utilizo una clase php para convertir las tasas de cambio:

/** 
* Yahoo currency rate import class 
* 
* @author  Felix Geenen (http://www.geenen-it-systeme.de) 
* @version 1.0.3 
*/ 
class Yahoofinance 
{ 
    public static $_url = 'http://download.finance.yahoo.com/d/quotes.csv?s={{CURRENCY_FROM}}{{CURRENCY_TO}}=X&f=l1&e=.csv'; 
    public static $_messages = array(); 

    /* 
    * converts currency rates 
    * 
    * use ISO-4217 currency-codes like EUR and USD (http://en.wikipedia.org/wiki/ISO_4217) 
    * 
    * @param currencyFrom String base-currency 
    * @param currencyTo String currency that currencyFrom should be converted to 
    * @param retry int change it to 1 if you dont want the method to retry receiving data on errors 
    */ 
    public static function _convert($currencyFrom, $currencyTo, $retry=0) 
    { 
     $url = str_replace('{{CURRENCY_FROM}}', $currencyFrom, self::$_url); 
     $url = str_replace('{{CURRENCY_TO}}', $currencyTo, $url); 

     try { 
      $handle = fopen($url, "r"); 

      if($handle !== false) { 
       $exchange_rate = fread($handle, 2000); 

       # there may be spaces or breaks 
       $exchange_rate = trim($exchange_rate); 
       $exchange_rate = (float) $exchange_rate; 

       fclose($handle); 

       if(!$exchange_rate) { 
        echo 'Cannot retrieve rate from Yahoofinance'; 
        return false; 
       } 
       return (float) $exchange_rate * 1.0; // change 1.0 to influence rate; 
      } 
     } 
     catch (Exception $e) { 
      if($retry == 0) { 
       # retry receiving data 
       self::_convert($currencyFrom, $currencyTo, 1); 
      } else { 
       echo 'Cannot retrieve rate from Yahoofinance'; 
       return false; 
      } 
     } 
    } 
} 
+0

Gracias, estaba usando igoogle como muchos otros y me fastidié el servicio que bajaba. Esta respuesta es la única solución que pude encontrar hasta el momento que devuelve exactamente lo que desea sin la otra basura innecesaria. –

5

que aquí hay una simple adaptación de la respuesta de Félix Geenen utilizar rizo en lugar de fopen ya que muchos de los servidores tienen fopen apagado por defecto.

(limpié un poco de código y añadí un valor de decremento para volver a intentar.)

(También recuerde que debe actualizar la referencia de reintento auto dependiendo del alcance se le cae la función en la que por ejemplo. :: estática o $ este ->)

function convert($from, $to, $retry = 0) 
{ 
    $ch = curl_init("http://download.finance.yahoo.com/d/quotes.csv?s=$from$to=X&f=l1&e=.csv"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_NOBODY, false); 
    $rate = curl_exec($ch); 
    curl_close($ch); 
    if ($rate) { 
     return (float)$rate; 
    } elseif ($retry > 0) { 
     return convert($from, $to, --$retry); 
    } 
    return false; 
} 
Cuestiones relacionadas