2011-04-25 103 views
12

請通知API用於貨幣轉換,它返回JSON或小尺寸html。 我使用http://www.google.com/finance/converter?a=1&from=RUB&to=USD返回11 kb的HTML。 我在iOS應用程序中使用它。需要用於貨幣轉換的API

在此先感謝!

+0

可能重複的[如何通過API獲取貨幣匯率,如Google財經?](http://stackoverflow.com/questions/3139879/how-do-i-get- currency-exchange-rates-via-api-such-as-google-finance) – TRiG 2015-01-07 02:16:37

+0

請參閱[免費和付費貨幣轉換API比較]中的5個API比較](http://www.freecurrencyconverterapi.com) – 2016-06-21 05:04:11

回答

11

Yahoo Finance Currency Converter

此網址格式可用於獲取不同格式的轉化率。

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

替代quotes.csv用適當的格式和參數與所需的碼

編輯:加入實施例的URL格式

+0

似乎是我在找什麼。謝謝! – kastet 2011-04-25 15:43:00

+0

這個電話和https呼叫似乎被響應關閉,「我們注意到這項服務被用於違反雅虎服務條款,因此該服務正在中止。對於所有未來的市場和股票數據研究,請參閱finance.yahoo.com。「 – Jacksonsox 2017-11-03 01:54:17

12

作爲評價提到這個服務是在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} 

More info

+0

我試過這個,但它與ISO貨幣標準並不完全匹配,例如俄羅斯盧布是ISO的」RUB「,但是該系統的」RUR「,所以它沒有任何價值 – kastet 2011-04-25 15:40:05

+0

有其他嗎?RUB&RUR似乎可以在該系統上互換,可能是因爲RUR是舊的ISO標識 – 2011-04-25 16:38:07

+5

iGoogle已關閉,所以現在您可以嘗試雅虎http://bit.ly/1cPOH2F :) – MyMomSaysIamSpecial 2013-11-06 08:02:25

10

現在的iGoogle已經死光了,亞歷克斯·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]); 
+3

或使用雅虎http://bit.ly/1cPOH2F :) – MyMomSaysIamSpecial 2013-11-06 08:02:55

+0

@ hobailey感謝這 – 2013-11-07 14:31:25

+0

這顯然是一個hacky解決方案,但一個工程 - 所以謝謝你:) – 2014-01-21 11:32:18

4

我用的iGoogle直到它倒閉,成爲我的權利。

感謝Nerfair壽在他的評論中迴應hobailey的評論上面,這工作真棒。我以爲我會在這裏發佈它,所以你可以充分看到它是如何工作的!

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=

這裏是鏈接URL編碼:http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20yahoo.finance.xchange%20where%20pair%20英寸%20%28%22USDCNY%22%29 &格式= JSON & ENV =商店://datatables.org/alltableswithkeys &回調=

超好看,只需更改貨幣對。謝謝Nerfair!

8

更新:雅虎API不工作了。留下這個遺留答案只是爲了提供這種信息,不再工作。


使用雅虎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到EUR 0.0006,但實際匯率是0.00000125,所以再次詢問API,只需翻轉貨幣:從EUR到USD的比率是多少。那麼你將得到大量的像12500000.xxx這樣做數學來得到你所需要的比例:一千二百五十零萬分之一,你會得到比= 0.00000125

希望幫助;)

附:解碼的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= 
+1

你能發佈一個源代碼查詢,而不是那可怕的黑魔法嗎? – Andy 2015-07-27 08:39:07

+1

添加解碼可讀的網址,現在更好嗎? ;) – 2015-07-27 12:45:23

+1

謝謝!!!!!! – Andy 2015-07-27 12:45:53

5

我用一個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; 
      } 
     } 
    } 
} 
+0

謝謝,我像其他許多人一樣使用igoogle,並被服務關閉。這個答案是目前爲止我能找到的唯一解決方案,它能夠在沒有其他不必要的垃圾的情況下正確地返回你想要的結果 – 2014-08-29 07:22:49

5

這裏是菲利克斯格南的答案,因爲很多服務器都捲曲代替的fopen使用的一個簡單的適應fopen默認關閉。

(我清理了一些代碼,並增加了一個遞減值重試。)

(還記得重試自基準根據您在到如刪除功能範圍進行更新。靜::或$此 - >)

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