如何通过API(例如Google财经)获取货币汇率?[关闭]


137

现在,我确实找到了Google Finance API,并开始进行浏览,但是我发现了很多有关投资组合,交易,头寸和其他我不了解的信息。

我在看错文档吗?我需要做什么才能从GF获取汇率信息?这有可能吗?

编辑

为了使事情更清晰。我对技术性内容不感兴趣,也不需要任何代码。


有关使用Yahoo!的php类的信息,请参见stackoverflow.com/a/21627583/592868。金融
Felix Geenen 2014年

3
@乔治·斯托克(George Stocker)这个问题原本是关于一些愚蠢的Google API的特定问题,而AFAIK早已淘汰了。人们开始以某种方式向该API添加替代方案,并将其转变为有关货币兑换API的某种索引。显然,社区发现它很有用,因为它获得了大量的选票和收藏夹……
Bogdan 2014年

@Bogdan您想让我做什么?
乔治·斯托克2014年

4
@GeorgeStocker好吧,如果您认为它违反了SO规则,可以将其关闭,但不要删除它。人们似乎找到了这种东西的很好参考。我的2c。
博格丹2014年

@GeorgeStocker对于货币javascript API来说,它在Google中排名第一,并且非常有用。该项目值得更新,因为它可以帮助许多开发人员,这是创建stackoverflow的主要原因。尽管您对规则的理解是正确的,但由于没有垃圾邮件或有针对性的答案,因此本主题不建议关闭本主题。恳请您再次打开它。
Jan Derk 2014年

Answers:


821

感谢您的所有答复。

免费currencyconverterapi:

  • 价格每30分钟更新一次
  • 现在,免费服务器需要API密钥。

转换网址示例为:http : //free.currencyconverterapi.com/api/v5/convert?q=EUR_USD&compact=y


对于后代,它们以及其他可能的答案:

  1. 雅虎财务API 停产2017-11-06 ###

截至2017年11月6日停止提供消息

我们注意到,此服务的使用违反了Yahoo服务条款。这样,该服务将被终止。有关所有未来市场和股票数据的研究,请访问finance.yahoo.com。

请求:http : //finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=USDINR=X
此CSV已由名为[Curry] [1]的jQuery插件使用。自(2017-08-29)以来,由于稳定​​性问题,Curry已移至使用fixer.io。如果您不仅需要CSV,可能会很有用。

  1. 感谢KeyoYahoo Query Language使您可以用XML或JSON一次获取一大堆货币。数据将在第二秒更新(而欧洲中央银行有日数据),并在周末停止。不需要任何形式的注册。

[http://query.yahooapis.com/v1/public/yql?q=select *来自yahoo.finance.xchange,其中的配对(“ USDEUR”,“ USDJPY”,“ USDBGN”,“ USDCZK”,“ USDDKK” ,“ USDGBP”,“ USDHUF”,“ USDLTL”,“ USDLVL”,“ USDPLN”,“ USDRON”,“ USDSEK”,“ USDCHF”,“ USDNOK”,“ USDHRK”,“ USDRUB”,“ USDTRY”,“ USDAUD”,“ USDBRL”,“ USDCAD”,“ USDCNY”,“ USDHKD”,“ USDIDR”,“ USDILS”,“ USDINR”,“ USDKRW”,“ USDMXN”,“ USDMYR”,“ USDNZD”,“ USDPHP” ,“ USDSGD”,“ USDTHB”,“ USDZAR”,“ USDISK”)&env = store://datatables.org/alltableswithkeys] [1]

这里是 YQL查询生成器,您可以在其中测试查询并复制网址:(无可用)

http://developer.yahoo.com/yql/console/?q=show%20tables&env=store://datatables.org/alltableswithkeys#h=select%20*%20from%20yahoo.finance.xchange%20where%20pair% 20in%20%28%22USDMXN%22%2C%20%22USDCHF%22%29

yql控制台不再可用

  1. 开源汇率API

免费供个人使用(每月点击1000次)
免费帐户中不允许更改“基础”(从“ USD”开始)
需要注册。
请求:http : //openexchangerates.org/latest.json
响应:

   <!-- language: lang-js -->

    {
      "disclaimer": "This data is collected from various providers ...",
      "license": "all code open-source under GPL v3 ...",
      "timestamp": 1323115901,
      "base": "USD",
      "rates": {
          "AED": 3.66999725,
          "ALL": 102.09382091,
          "ANG": 1.78992886,
          // 115 more currency rates here ...
      }
    }
  1. 货币层API

免费计划每月250次点击
免费帐户中不允许更改“源”(从“美元”)
需要注册。
文档:currencylayer.com/documentation

JSON响应:

   <!-- language: lang-js -->

    {
      [...]
      "timestamp": 1436284516,
      "source": "USD",
      "quotes": {
          "USDAUD": 1.345352401,
          "USDCAD": 1.27373397,
          "USDCHF": 0.947845302,
          "USDEUR": 0.91313905,
          "USDGBP": 0.647603397,
          // 168 world currencies
          }
      }
  1. Fixer.io API(欧洲中央银行数据)

免费计划(每月1,000次点击
)免费帐户中不允许更改“源”(从“美元”)需要注册。

该API端点已弃用,将于2018年6月1日停止工作。有关更多信息,请访问:https://github.com/fixerAPI/fixer#readme)


网站:http://fixer.io/
示例请求:[http://api.fixer.io/latest?base=USD][7]
每天仅收集一个值
  1. 欧洲中央银行提要

文件:http : //www.ecb.int/stats/exchange/eurofxref/html/index.en.html#dev
要求:http : //www.ecb.int/stats/eurofxref/eurofxref-daily.xml

XML回应:

   <!-- language: lang-xml -->

    <Cube>
      <Cube time="2015-07-07">
      <Cube currency="USD" rate="1.0931"/>
      <Cube currency="JPY" rate="133.88"/>
      <Cube currency="BGN" rate="1.9558"/>
      <Cube currency="CZK" rate="27.100"/>
    </Cube>
  1. ### exchangeratesapi.io ###根据该网站:

    汇率API是针对欧洲中央银行发布的当前和历史汇率的免费服务
    该服务与fixer.io兼容,并且非常易于使用:不需要API密钥。例如(使用CURL,但是您可以使用喜欢的请求工具):

    > curl https://api.exchangeratesapi.io/latest?base=GBP&symbols=USD
    {"base":"GBP","rates":{"USD":1.264494191},"date":"2019-05-29"}
    
  2. ### CurrencyApi.net ### 每月1250次点击的免费计划
    在免费帐户上将基本货币设置为USD
    需要注册。
    文档:currencyapi.net/documentation

    JSON响应:

    {
      "valid": true,
      "timestamp": 1567957373,
      "base": "USD",
      "rates": {
              "AED": 3.673042,
              "AFN": 77.529504,
              "ALL": 109.410403,
              // 165 currencies + some cryptos
          }
      }
  3. ###来自LabStack的货币###

网站:https : //labstack.com/currency
文档:https : //labstack.com/docs/api/currency/convert
定价:https : //labstack.com/pricing
请求:https : //currency.labstack.com / api / v1 / convert / 1 / USD / INR
响应:

```js
 {
   "time": "2019-10-09T21:15:00Z",
   "amount": 71.1488
 }
 ```

[1]:http : //query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange,其中的配对(“ USDEUR”,“ USDJPY”,“ USDBGN”,“ USDCZK”, “ USDDKK”,“ USDGBP”,“ USDHUF”,“ USDLTL”,“ USDLVL”,“ USDPLN”,“ USDRON”,“ USDSEK”,“ USDCHF”,“ USDNOK”,“ USDHRK”,“ USDRUB”,“ USDTRY” ”,“ USDAUD”,“ USDBRL”,“ USDCAD”,“ USDCNY”,“ USDHKD”,“ USDIDR”,“ USDILS”,“ USDINR”,“ USDKRW”,“ USDMXN”,“ USDMYR”,“ USDNZD”, “ USDPHP”,“ USDSGD”,“ USDTHB”,“ USDZAR”,“ USDISK”)&env = store://datatables.org/alltableswithkeys


6
这是有关Yahoo finance API的更有用说明的链接
Miranda

4
请注意,Open Exchange Rates项目数据已从GitHub移开(现在没有可用数据),现在通过openexchangerates.org提供服务 -谢谢!
William Joss Crowcroft 2012年

17
rate-exchange.appspot不再起作用
。–


5
更新:现在Yahoo禁用了此消息的apiIt has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com.
ZenithS

66

据我所知,欧洲中央银行(ECB)也拥有最可靠的免费供稿。它包含约28种货币,并且至少每天更新一次。

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

有关更多格式和工具,请参阅ECB参考页:http : //www.ecb.int/stats/exchange/eurofxref/html/index.en.html


3
fixer.io太糟糕了,没有保修。不用于生产。
本辛克莱

2
不幸的是,它不会在周末更新。
丹尼斯

从周五(美国东部时间)下午4点至周日美国东部时间下午5点,许多外汇交易市场关闭。如果您确实需要更准确的周末房价,那么可以,我会检查其他流。
瑞安

1
@Ryan但是为什么不显示所有货币呢?
Sunil Targe

4
Fixer.io服务已被弃用。有一个替代的兼容替代汇率API,位于exchangeatesapi.io
madisvain,

53

嗨,@ Keyo,当我尝试在我的Java代码中提供的YQL示例(尝试将其读取为URL)时,我得到了IO异常(服务器返回的HTTP响应代码:400,URL:query.yahooapis.com/v1/public/ yql?q = select * from yahoo.finance.xchange,其中((USDEUR“)&env = store://datatables.org/alltableswithkeys)中的对如果我只是将URL复制到浏览器中,则可以使用
Malik Firose

'public static void main(String [] args){String currencyPair =“ USDEUR”; 字符串地址=“ query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange,其中(\”“ + currencyPair +” \“)和env = store://datatables.org/ alltableswithkeys“;尝试{//字符串响应= URLReader.read(address); // System.out.println(response); URL url =新的URL(地址); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); } catch(Exception e){// TODO自动生成的catch块e.printStackTrace(); }}'
Malik Firose

@Keyo,您好,有没有一种方法可以在YQL中获得特定时间范围的高/低速率?
entpnomad

3
可悲的是,雅虎昨天终止了服务,没有发出警告,使成千上万的企业陷入困境。
FlorianB

该API似乎已被永久禁用。
减少活动

47

如果您需要免费的简单API将一种货币转换为另一种货币,请尝试free.currencyconverterapi.com

免责声明,我是该网站的作者,并将其用于其他网站之一。

该服务甚至可以免费用于商业应用,但不提供任何保修。出于性能原因,这些值仅每小时更新一次。

转换网址示例为:http ://free.currencyconverterapi.com/api/v6/convert?q=EUR_PHP&compact=ultra&apiKey=sample-api-key,它将返回json格式的值,例如{“ EUR_PHP”:60.849184}


1
谢谢。转化率的来源是什么?这使我们能够评估您的服务的可靠性。
s3m3n 2015年

1
2017年11月发布。感谢提供。但是请继续提供它,因为网站依赖它。正在使用刚刚死亡的Yahoo Finance。
调谐到

1
强大。感谢作者
james Oduro

1
我将尽快升级到高级版。
James Oduro

1
它不再是免费的。免费仅用于测试/演示。如果您请求更多,则返回400,并显示错误消息:“系统已检测到此请求滥用了免费服务。如果您需要更多请求,请考虑使用付费服务。请检查currencyconverterapi.com/pricing以获取更多信息。谢谢。” 并阻止您的ip和api键。
斯威夫特

25

我从http://www.scriptarticle.com/2012/05/03/get-live-currency-rates-and-currency-conversion-using-php-and-apis/获得了此内容

<?php

function get_currency($from_Currency, $to_Currency, $amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);

    $url = "http://www.google.com/finance/converter?a=$amount&from=$from_Currency&to=$to_Currency";

    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt ($ch, CURLOPT_USERAGENT,
                 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = explode('bld>', $rawdata);
    $data = explode($to_Currency, $data[1]);

    return round($data[0], 2);
}

// Call the function to get the currency converted
echo get_currency('USD', 'INR', 1);

?>

5
如果将iGoogle排除在外,这是最好的选择,以前的www.google.com/ig选项将不再起作用。
raphie

1
www.google.com/finance不再起作用。自2017年9月起,财务网址已更改为finance.google.com。:Dbryanveloso.com/2017/09/14/…–
jehzlau

2
搬到Finance.google.com的Google绊倒了我,并中断了卷曲请求。要解决该curl重定向问题,请执行以下操作:curl_setopt($ curl,CURLOPT_FOLLOWLOCATION,true);
jaybong

1
刚刚尝试过google.com/finance/converter?a=1&from=INR&to=USD无效,打开对话框。
调谐到

4
www.google.com/finance/converter和finance.google.com/finance/converter不再可用。
基督教徒

16

这是一些带有PHP示例的交换API。

[ 开放汇率API ]

每月免费提供1,000个请求。您必须注册并获取应用程序ID。免费帐户的基准货币USD。检查支持的货币文档

// open exchange URL // valid app_id * REQUIRED *
$exchange_url = 'https://openexchangerates.org/api/latest.json';
$params = array(
    'app_id' => 'YOUR_APP_ID'
);

// make cURL request // parse JSON
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $exchange_url . '?' . http_build_query($params),
    CURLOPT_RETURNTRANSFER => true
));
$response = json_decode(curl_exec($curl));
curl_close($curl);

if (!empty($response->rates)) {
    // convert 150 USD to JPY ( Japanese Yen )
    echo $response->rates->JPY * 150;
}

150 USD = 18039.09015 JPY

[ 货币层API ]

每月免费提供1,000个请求。您必须注册并获取访问密钥。免费帐户支持自定义基准货币。检查文档

$exchange_url = 'http://apilayer.net/api/live';
$params = array(
    'access_key' => 'YOUR_ACCESS_KEY',
    'source' => 'USD',
    'currencies' => 'JPY',
    'format' => 1 // 1 = JSON
);

// make cURL request // parse JSON
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $exchange_url . '?' . http_build_query($params),
    CURLOPT_RETURNTRANSFER => true
));
$response = json_decode(curl_exec($curl));
curl_close($curl);

if (!empty($response->quotes)) {
    // convert 150 USD to JPY ( Japanese Yen )
    echo '150 USD = ' . $response->quotes->USDJPY * 150 . ' JPY';
}

150 USD = 18036.75045 JPY


14
很容易达到配额。.不推荐。
Ayush Goyal 2014年

7
@AyushGoyal如果每次转换都使用API​​,那么无论如何都做错了。设置一个cronjob以每小时查询一次API,并将当前汇率存储在数据库表中,并且在需要进行交换计算时,可以随时从表中提取数据。您将永远不会以这种方式达到每月限额。
tpartee

1

您可以尝试geoplugin

除了通过IP进行地理位置定位(但IP是提供商IP,所以不太准确)之外,它们还返回货币并具有货币转换器:请参见示例。

他们更新了111种货币。


0

如果您正在寻找基于红宝石的解决方案,建议使用Google计算器方法,该解决方案类似于以下内容:http : //j.mp/QIC564

require 'faraday'
require 'faraday_middleware'
require 'json'

# Debug: 
# require "pry"


country_code_src = "USD"
country_code_dst = "INR"
connection = Faraday.get("http://www.google.com/ig/calculator?hl=en&q=1#{country_code_src}=?#{country_code_dst}")

currency_comparison_hash = eval connection.body #Google's output is not JSON, it's a hash

dst_currency_value, *dst_currency_text = *currency_comparison_hash[:rhs].split(' ')
dst_currency_value = dst_currency_value.to_f
dst_currency_text = dst_currency_text.join(' ')

puts "#{country_code_dst} -> #{dst_currency_value} (#{dst_currency_text} to 1 #{country_code_src})"

2
iGoogle已于2013年11月1日停用。此API不再有效。
改革


0

这是一个简单的PHP脚本,可获取GBP和USD之间的汇率

<?php
$amount = urlencode("1");
$from_GBP0 = urlencode("GBP");
$to_usd= urlencode("USD");
$Dallor = "hl=en&q=$amount$from_GBP0%3D%3F$to_usd";
$US_Rate = file_get_contents("http://google.com/ig/calculator?".$Dallor);
$US_data = explode('"', $US_Rate);
$US_data = explode(' ', $US_data['3']);
$var_USD = $US_data['0'];
echo $to_usd;
echo $var_USD;
echo '<br/>'; 
?>

Google货币汇率不准确google本身说==> Google无法保证计算器使用的汇率的准确性。在进行任何可能受到汇率变动影响的交易之前,您应该确认当前汇率。花旗银行(NA)提供的外币汇率在牌照下显示。价格仅供参考,如有更改,恕不另行通知。实际交易的汇率可能会有所不同,花旗银行不愿以显示的任何汇率进行任何交易。


3
iGoogle已于2013年11月1日停用。此API不再有效。
改革

-1

对于所有正在寻找有关货币换算的提示的新手,请查看此链接。Datavoila

关于我自己在C#中的项目,这对我很有帮助。以防万一该网站消失了,我将在下面添加代码。只需将以下步骤添加到您自己的项目中即可。抱歉,格式化。

const string fromCurrency = "USD";
const string toCurrency = "EUR";
const double amount = 49.95;
// For other currency symbols see http://finance.yahoo.com/currency-converter/
// Clear the output editor //optional use, AFAIK
Output.Clear();

// Construct URL to query the Yahoo! Finance API
const string urlPattern = "http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1";
string url = String.Format(urlPattern, fromCurrency, toCurrency);

// Get response as string
string response = new WebClient().DownloadString(url);

// Convert string to number
double exchangeRate =
    double.Parse(response, System.Globalization.CultureInfo.InvariantCulture);

// Output the result
Output.Text = String.Format("{0} {1} = {2} {3}",
                            amount, fromCurrency,
                            amount * exchangeRate, toCurrency);
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.