Программный доступ к курсам обмена валют [закрыто]


112

Я настраиваю систему онлайн-заказов, но нахожусь в Австралии, и для международных клиентов я хотел бы показывать цены в долларах США или евро, чтобы им не приходилось прилагать умственные усилия для конвертации из австралийских долларов.

Кто-нибудь знает, могу ли я получить актуальные курсы обмена из сети где-нибудь в удобном для анализа формате, к которому я могу получить доступ из моего PHP-скрипта?


ОБНОВЛЕНИЕ: я написал класс PHP, который это реализует. Вы можете получить код с моего сайта .


1
@Kelly: Очень хорошее предложение, потому что Google бесплатен и имеет большие шансы остаться в обозримом будущем: я хотел бы предложить вам отправить его в качестве ответа.
Eric O Lebigot 05

1
Не могу отредактировать комментарий. Вот новая ссылка jarloo.com/exchange-rate-api
Келли

1
Спасибо, что поделились @Adam Pierce! Есть ли способ получить также исторические ставки?
Aris

Вы также можете использовать эту ссылку. Это бесплатно, просто зарегистрируйтесь и получите API KEY. jsonrates.com/docs
Гаджендра К. Чаухан

Используйте currencylayer.com - они предоставляют текущие и исторические курсы в формате JSON, а также несколько примеров PHP ( currencylayer.com/documentation )
Фрэнк,

Ответы:


71

Вы можете конвертировать валюту в простом формате на Yahoo:

Например, чтобы конвертировать GBP в EUR: http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=sl1d1t1ba&e=.csv


Это актуально и легко анализируется. Это то, что мне нужно.
Адам Пирс

4
Меня это тоже интересует, есть ли информация о том, что обозначают параметры? В частности, параметр "f". Я нигде не могу найти никакой информации.
Fishcake

9
Законно ли читать эти данные, если у вас есть коммерческий сайт?
Junior Mayhé

4
Дальнейшие эксперименты показывают, что вы можете запросить сразу несколько коэффициентов конверсии, разделив символы в параметре s запятыми, например: download.finance.yahoo.com/d/…
Myster

3
Есть ли способ указать дату?
Максим Егорушкин

40

Этот ответ ОЧЕНЬ поздно, но в приведенных выше ответах отсутствует ключевая информация.

Если вы хотите показывать своим клиентам точные цены, важно понимать, как работают курсы обмена валют.

Большинство валютных сервисов указывают только спотовый курс (посередине между спросом и покупкой). Спот - это своего рода сокращение обменного курса, но никто не получает его, потому что вы можете продавать только по бид или покупать по аск. Обычно вы ищете спред между ними не менее 1%, поэтому для ваших клиентов спотовая ставка составляет 0,5%.

Но это еще не все, ваши клиенты почти наверняка используют кредитную карту, а Visa / Mastercard / Amex взимают комиссию за обмен валюты. По моему опыту, это нетривиально, как минимум 2,5%. Например, Citibank Australia взимает 3,3%. Они варьируются от карты к карте, поэтому вы не можете предсказать окончательную цену, по которой вашим клиентам будет выставлен счет.

Если вы хотите указать своим клиентам «точную» цену на основе обменного курса, вам необходимо учесть вышеизложенное и обеспечить буфер, чтобы в конечном итоге вы не взимали больше, чем вы указали.

FWIW, я добавил 4% к тому, что в противном случае показало бы преобразование F / X.


Кроме того, курсы валют постоянно меняются, и банки могут принимать во внимание курс только в полночь по местному времени. С ~ 2% дневной волатильности, то есть неопределенность.
Alexandre C.

1
Это отличный момент. Определенно усиливает потребность в каком-либо буфере, если вы показываете одну валюту, но заряжаете другую. Как бы то ни было, с моими 4% -ными заполнениями я ни разу не попросил, чтобы кто-нибудь делал возвратный платеж.
Philoye 01

Не все банки взимают такую ​​плату. Кредитные и дебетовые карты из Мексики, например, просто конвертируют валюту по цене, которая у них есть в тот день для продажи валюты, и ничего более.
Франсиско Зарабозо

26

Было бы неплохо добавить

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

к списку.

Официальные справочные ставки предоставляются Европейским центральным банком на основе регулярной ежедневной процедуры согласования между центральными банками внутри и за пределами Европейской системы центральных банков.

Канал находится в XML и некоторых других форматах .
Обновление обычно происходит в 14.15 (14:15) по времени ЕЦБ (= Франкфуртскому времени).


4
Только что проверил (через 20 минут после вашего комментария), и он доступен для меня.
Jacco

Я просто пытался использовать это, но VB.NET отказывается правильно использовать XPath. Это потому, что URL-адреса, определяющие пространства имен, оба являются 404-ю?
Rikki

по этой ссылке всегда отображаются вчерашние ставки, а не сегодняшние.
erkanyildiz

12

Недавно я реализовал то же самое, но с использованием API Google. URL-адрес запроса выглядит так:

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

Требуется 3 параметра. Первый параметр - это сумма, за которой следует код валюты ISO 4217, из которой вы конвертируете, знак равенства и вопросительный знак, а также код валюты, в которую вы конвертируете. Вы можете найти список кодов, которые поддерживает Google здесь . Ответ на запрос будет выглядеть так:

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

Это довольно понятно, поэтому я не буду здесь вдаваться в подробности. Вот как я обработал ответ на запрос:

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;
}

Я уверен, что это далеко не самый элегантный способ сделать это, но я новичок в PHP. Надеюсь, поможет!


2
Вы можете использовать json_decode вместо explode, если хотите, чтобы он был более надежным.
diolemo

есть ли ограничения с этой услугой?
сайты

Это слишком легко
сформулировать

5
«iGoogle был
удален

Я использовал аналогичный код, который был изменен для использования метода Yahoo quotes.csv с изменением только двух строк в коде.
Маркус

12

еще одна отличная бесплатная ссылка с открытым исходным кодом:

https://raw.github.com/currencybot/open-exchange-rates/master/latest.json
(я нашел об этом здесь: http://josscrowcroft.github.com/open-exchange-rates/ )

[Обновление] :
Данные проекта Open Exchange Rates были перемещены с GitHub.
Сейчас он доступен по адресу: http://openexchangerates.org/
Данные в формате JSON доступны по адресу: http://openexchangerates.org/latest.json

Без платы за доступ, без ограничений по скорости , без уродливого XML - только бесплатные , ежечасно обновляемые курсы обмена в формате JSON.
Сейчас это не «полностью» бесплатно. Новое лицензирование гласит, что разрешено до 1000 просмотров в месяц, а потом нужно платить. Вам также необходимо заплатить, если вы хотите использовать конвертер единой валюты (базовая функциональность).

[Примечание: вы можете также взглянуть на этот ответ. ]


1
Возможно, он больше не работает
shasi kanth

1
Спасибо @dskanth за напоминание. Ссылка и информация обновлены. :)
zeFree

1
Здесь доступен бесплатный план OpenExchangeRates с 1000 запросов в месяц. Это крошечная ссылка, поэтому в большинстве случаев вы ее не заметите .. openexchangerates.org/signup/free
TheFlash

6

Я добавил в YQL таблицу открытых данных, вы можете использовать ее для получения данных о курсах валют из yahoo.finance.

Попробуйте в консоли YQL

Разделенный запятыми формат предпочтительнее, чем «где пара в ('EURUSD', 'GBPUSD')», но в любом случае вы можете использовать оба и даже смешивать их.


Спасибо приятель. Это в сочетании с документацией YQL на PHP мне очень помогло!
miCRoSCoPiC_eaRthLinG

привет, мы можем добавить параметр даты, например, я хочу получить исторический обменный курс.
Elisa

4

Вот сервис Soap, который предлагает обменный курс

http://www.newyorkfed.org/markets/pilotfx.html


4
Жаль, что это МЫЛО, а не ОТДЫХ. Кроме того, это полезный объект,
Дэвид Арно

Это бесплатно и стабильно? Смогу ли я поставлять программное обеспечение, основанное на этом?

4
видимо перестали это делать @ 31.12.2008
Севки


3

Попробуйте этот RESTful (я не уверен, действительно ли это REST, поскольку я получил его изначально из SOAP, я просто попытался получить к нему доступ с помощью HTTP GET)


Я не понимаю, где вы указали "сумму" для преобразования, но вы получаете некоторую сумму обратно ... не могли бы вы объяснить это?
SpokaneDude

1
Сумма не принимается. Это будет преобразовывать только fromCurrency в toCurrency, где сумма fromCurrency всегда равна единице (1). Тогда вы должны разработать свой алгоритм конвертации вашей суммы
Кевин

Спасибо ... в этом есть смысл. сейчас ...
SpokaneDude

3

Поддержка iGoogle была прекращена 1 ноября 2013 г. Этот API больше не работает.

Чтобы получить обменный курс, вы можете использовать что-то вроде этого:

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];
}

Вы можете добавить туда кеш БД, чтобы убедиться, что вас не троттлинг и т. Д.

Как было отмечено в других сообщениях / комментариях, вы затем использовали бы этот курс для расчета своих валют.


2

XE.com предоставляет информацию об их обменных курсах. Но не бесплатно.



1

coinnill.com имеет своего рода веб-сервис.

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

даст вам курс AUD -> USD, например. Вам просто нужно проанализировать возвращаемый XML.


Эти данные кажутся устаревшими. Там сказано, что австралийский доллар составляет 0,77, но я знаю, что сегодня он составляет 0,69.
Адам Пирс

Кроме того, полезная часть данных (курсы обмена) - единственный бит, не закодированный в XML! Это просто открытый текст в CDATA ...
Рикки

1

Я чувствую себя обязанным добавить:

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

Очень просто использовать с чистым RESTful API, а регистрация занимает 5 секунд. Включает примеры кодирования для большинства основных языков, большинство из которых состоит из 2-3 строк.

Ставки обновляются ежечасно, поэтому это нормально для большинства случаев, и вы можете получать 30000 запросов в месяц за 7 долларов в месяц. Больше мне никогда не требовалось, но цены вполне приемлемые для больших объемов.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.