Нужен API для конвертации валюты
Пожалуйста, советуйте API для конвертации валюты, который возвращает JSON или HTML небольшого размера. Я использую http://www.google.com/finance/converter?a=1&from=RUB&to=USD который возвращает HTML размером 11 Кб. Я использую это в своем приложении для iOS.
Заранее спасибо!
8 ответов
http://free.currencyconverterapi.com/ возвращает результаты в формате JSON.
Веб-сервис также поддерживает JSONP. API очень прост в использовании и позволяет конвертировать одну валюту в другую.
Отказ от ответственности, я автор сайта.
Пример URL конверсии: http://free.currencyconverterapi.com/api/v5/convert?q=USD_PHP&compact=ultra который будет возвращать значение в формате json, например, {"USD_PHP":51.459999}
Как уже упоминалось в комментариях, эта служба была закрыта в ноябре 2013 года.
Googles calulator API может сделать это;
Запрос:
http://www.google.com/ig/calculator?hl=en&q=100EUR=?USD
Отклик:
{lhs: "100 Euros",rhs: "145.67 U.S. dollars",error: "",icc: true}
( Подробнее)
Yahoo больше не работает. Смотрите комментарий ниже
Yahoo Finance Конвертер валют.
Этот формат URL можно использовать для получения коэффициентов конверсии в разных форматах.
http://download.finance.yahoo.com/d/quotes.csv?s=AUDUSD=X&f=nl1d1t1
Замените quotes.csv соответствующим форматом, а параметры - требуемыми кодами.
РЕДАКТИРОВАТЬ: Добавлены примеры форматов URL
Теперь iGoogle был убит, решение Alex K больше не работает, к сожалению. В php это альтернатива, которая работает таким же образом и столь же эффективна:
$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]);
ОБНОВЛЕНИЕ: Yahoo API больше не работает. Оставив этот традиционный ответ, просто предоставьте информацию, что это больше не работает.
использовать 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=
он вернет формат JSON, например:
{
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"
}
}
}
}
Проверьте в URL-адресе USDLTL сейчас, так что просто измените на то, что вам нужно.
Кроме того, иногда скорость настолько низкая, что вы не видите ее даже с 4 числами, которые она показывает:
Оценить: 0.0006
Не паникуйте, просто сделайте запрос на разворот, переверните валюты и сделайте несколько простых математических операций.
например, вы узнали, что курс составляет от KRW до 0,0006 евро, но реальный курс составляет примерно 0,00000125, поэтому спросите API еще раз, просто переверните валюты: каково соотношение между евро и долларом США. тогда вы получите огромное число, например, 12500000.xxx, поэтому сделайте математику, чтобы получить необходимое вам соотношение: 1/12500000, и вы получите коэффициент = 0,00000125.
Надеюсь, это поможет;)
PS декодированный URL, который легче читать, выглядит так:
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=
Я использую php-класс для конвертации курсов валют:
/**
* 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;
}
}
}
}
Вот простая адаптация ответа Феликса Гинена на использование curl вместо fopen, поскольку многие серверы отключили fopen по умолчанию.
(Я очистил некоторый код и добавил значение для уменьшения, чтобы повторить попытку.)
(Также не забывайте обновлять собственную ссылку на повтор в зависимости от области, в которую вы перетаскиваете функцию, например, static:: или $this->)
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;
}
Я пользовался iGoogle, пока он не взбесился, меня правильно обслуживает.
Благодаря Nerfair tho в его комментарии в ответ на комментарий Хобейли выше, это работает УДИВИТЕЛЬНО. Я думал, что выложу это здесь, чтобы вы могли в полной мере увидеть, как это работает!
Вот URL-адрес закодированной ссылки: http://query.yahooapis.com/v1/public/yql?q=select%20*% 20from% 20yahoo.finance.xchange% 20where% 20pair% 20in% 20% 28% 22USDCNY% 22% 29 & формат = & ENV JSON = магазин: //datatables.org/alltableswithkeys&callback=
Супер приятно, просто поменяй валютную пару. Спасибо Nerfair!