2010-05-15 77 views
0

我寫了下面的php代碼從Yahoo Finance獲取貨幣兌換率。PHP和curl從Yahoo財務獲取貨幣匯率

我正在使用curl來獲取數據。 假設,我想從美元(USD)轉換爲印度盧比(INR),那麼網址是http://in.finance.yahoo.com/currency/convert?amt=1&from=USD&to=INR&submit=,印度盧比值顯示爲45.225。 但是,如果我運行我的代碼,我得到的值是452.25。爲什麼這種差異?

<?php 

    $amount = $_GET['amount']; 
    $from = $_GET['from']; 
    $to = $_GET['to']; 
    $url = "http://in.finance.yahoo.com/currency/convert?amt=".$amount."&from=".$from."&to=".$to; 
    $handle = curl_init($url); 
    curl_setopt ($handle, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($handle); 
    if(preg_match_all('/<td class="yfnc_tabledata1"><b>(?:[1-9]\d+|\d)(?:\.\d\d)?/',$data,$matches)) 
    { 
    print_r($matches[0][1]); 
    } 
    else 
    { 
    echo "Not found !"; 
    } 
    curl_close($handle); 

?> 

我的正則表達式有什麼問題嗎?

+0

強制性響應:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self -contained標籤/ 1732454#1732454 – 2010-05-15 22:53:00

回答

1

雅虎財務(幾乎)肯定有一個相應的API,所以你不必解析一些隨機的HTML貨幣轉換。

此外,我會假設使用Google的http://www.google.com/ig/calculator?q=1 EUR IN USD之類的東西,並且解析此響應比解析Yahoo的HTML頁面更穩定。

0

您可以通過的.csv文件訪問雅虎貨幣,因此更容易分析的。例如:http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s= 'EURUSD'= X

而簡單的代碼:

function currencyImport($from,$to) 
{ 
$url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s='. $from . $to .'=X'; 
$handle = @fopen($url, 'r'); 

if($handle) 
{ 
    $result = fgets($handle, 4096); 
    fclose($handle); 
} 

$currencyData = explode(',',$result); 
return $currencyData[1]; 
}