首页 文章

PHP和curl用于从Yahoo Finance获取货币汇率

提问于
浏览
0

我写了以下php片段来获取Yahoo Finance的货币转换率 .

我正在使用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);

?>

我的正则表达式有问题吗?

4 回答

  • 0

    您可以通过.csv文件访问Yahoo Currency,因此解析这些文件要容易得多 . 示例: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];
    }
    
  • 1

    雅虎财经(几乎)肯定有一个相应的API,所以你不必解析一些随机的HTML进行货币转换 .

    此外,我认为使用Google的http://www.google.com/ig/calculator?q=1 EUR IN USD之类的东西,解析这个响应比解析雅虎的HTML页面要稳定得多 .

  • 0

    您可以使用yahoo.finance.xchange打开表获取XML或JSON格式的费率:

    Try it in YQL console

  • 1

    以下代码有效 . 试一下

    $url = "http://www.xe.com/currencyconverter/convert/?
    Amount=1&From=USD&To=INR";
    
    $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('uccResultAmount', $rawdata);
    @$data = explode('uccToCurrencyCode', $data[1]);
    
    $amount = preg_replace('/[^0-9,.]/', '', $data[0]);
    

相关问题