以编程方式访问货币汇率[关闭]


112

我正在建立一个在线订购系统,但我在澳大利亚,对于国际客户,我想以美元或欧元显示价格,这样他们就不必花心思从澳元转换。

有谁知道我是否可以通过PHP脚本访问的一种易于解析的格式从网上提取最新汇率?


更新:我现在编写了一个实现此目的的PHP类。您可以从我的网站上获取代码


1
@Kelly:非常好的建议,因为Google是免费的,并且在可预见的将来有很大的机会继续存在:我建议您将其作为答案提交。
Eric O Lebigot 2011年

1
似乎无法编辑评论。这是新的链接jarloo.com/exchange-rate-api
Kelly

1
感谢您分享@Adam Pierce!有什么办法可以获取历史汇率吗?
阿里斯(Aris)2013年

您也可以使用此链接。它是免费的。只需注册并获得API KEY。 jsonrates.com/docs
Gajendra K Chauhan

使用currencylayer.com -他们提供实时和JSON格式的历史汇率,用几个PHP例子沿(currencylayer.com/documentation
弗兰克

Answers:


71

您可以从yahoo以简单的格式获取货币换算:

例如,将GBP转换为EUR: http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=sl1d1t1ba&e=.csv


这是最新的且易于解析。这就是我所追求的。
亚当·皮尔斯

4
我对此也很感兴趣,是否有关于参数代表什么的信息?特别是“ f”参数。我在任何地方都找不到任何信息。
鱼饼

9
如果您有商业网站,则读取此数据是否合法?
少年梅耶

4
:进一步的实验表明您可以通过逗号分隔的“S”参数,像这样的符号在一次请求多个转换率download.finance.yahoo.com/d/...
Myster

3
有没有指定日期的方法?
Maxim Egorushkin

40

这个答案很晚,但是以上答案中缺少一些关键信息。

如果您想向客户显示准确的价格,那么了解外汇汇率的工作方式非常重要。

大多数外汇服务仅报价即期汇率(介于买入价和卖出价之间)。现货是汇率的一种简写,但没人能得到现货,因为您只能以买价卖出或以要价买入。通常,您通常希望它们之间的价差至少为1%,因此对您的客户而言,即期汇率为0.5%的折扣。

但这并不仅限于此,您的客户几乎可以肯定正在使用信用卡,而Visa / Mastercard / Amex都收取外汇费用。以我的经验来看,这些都是微不足道的,至少为2.5%。例如,澳大利亚花旗银行收取3.3%的费用。这些价格因卡而异,因此您无法预测客户将要支付的最终价格。

如果要根据汇率为客户报价“准确的”价格,则需要考虑上述因素并提供缓冲,以免最终收取的费用不超过所报价的价格。

FWIW,我一直在将F / X转换指示的数字增加4%。


此外,外汇汇率一直在变化,银行可能只考虑当地时间午夜的汇率。每天波动约2%,这不确定的。
Alexandre C. 2010年

1
很好。如果您要显示一种货币但要收取另一种货币,则绝对会增加对某种缓冲区的需要。对于我来说,以4%的填充值,我从来没有人进行过退款。
philoye

并非所有银行都收取该费用。例如,来自墨西哥的信用卡和借记卡将仅按照当天的货币出售价格转换货币,仅此而已。
弗朗西斯科·扎拉波佐(Marc Zarabozo)

26

可能会很高兴添加

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

到列表。

欧洲中央银行根据欧洲中央银行系统内部和外部中央银行之间的日常日常协调程序提供的官方参考汇率。

该提要采用XML和其他一些格式
更新通常在欧洲央行时间2.15 pm(14:15)(=法兰克福时间)进行。


4
刚刚检查(发表评论后20分钟),它对我可用。
雅科

我一直在尝试使用它,但是VB.NET拒绝正确地对其进行XPath处理。这是因为定义名称空间的URL都是404链接吗?
Rikki 2012年

此链接始终显示昨天的汇率,而不是今天的汇率。
erkanyildiz

12

最近,我使用Google的API实现了相同的操作。查询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

此服务有限制吗?
网站

这太容易表达和使用了……谢谢
IWIH 2013年

5
“ iGoogle已于2013年11月1日
停用

我使用了类似的代码,但已更改为使用Yahoo quotes.csv方法,但代码中只有两行更改。
Marcus 2013年

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 '10

1
感谢@dskanth的提醒。链接和信息已更新。:)
zeFree 2012年

1
这里有一个免费的OpenExchangeRates计划,每月有1000个请求..它是一个很小的链接,因此在大多数情况下您不会发现它。.openexchangerates.org
signup/

6

我将开放数据表添加到YQL,您可以使用它从yahoo.finance检索汇率数据。

在YQL控制台中尝试

逗号分隔格式比“ where pair in('EURUSD','GBPUSD')”更可取,但是无论如何,您可以同时使用它们甚至将它们混合在一起。


多谢,伙计。这与PHP上的YQL文档相结合,极大地帮助了我!
miCRoSCoPiC_eaRthLinG

您好,我们可以添加日期参数吗,例如我想获取历史汇率。
伊丽莎(Elisa)2012年



3

试试这个 RESTful(我不确定这是否真的是REST,因为我最初是从SOAP获得的,所以我只是尝试使用HTTP GET访问它)


我看不到您在哪里提供了“金额”进行转换,但是您又得到了一些数字……您能解释一下吗?
SpokaneDude 2011年

1
它不接受金额。这只会将fromCurrency转换为toCurrency,其中fromCurrency的金额始终为一(1)。然后由您决定转换金额的算法
凯文

谢谢...这很有意义。现在...
SpokaneDude

3

iGoogle已于2013年11月1日停用。此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];
}

您可以在其中添加数据库缓存,以确保不会受到限制等。

正如其他帖子/评论所指出的那样,您将使用此汇率来计算您的货币





1

我不得不补充:

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

完全使用干净的RESTful API即可轻松完成,注册过程需要5秒钟。包括大多数主要语言的编码示例,大多数示例为2-3行。

费率每小时更新一次,因此对于大多数用途而言还算不错,而且您可以每月7美元的价格获得30000个每月查询。我再也不需要这些了,但是对于较大的数量来说,价格是非常合理的。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.