2010-05-15 53 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]; 
}