【问题标题】:PHP and curl for fetching currency rate from Yahoo FinancePHP 和 curl 用于从 Yahoo Finance 获取货币汇率
【发布时间】:2011-02-19 23:36:53
【问题描述】:

我写了下面的 php sn-p 从 Yahoo Finance 获取货币兑换率。

我正在使用 curl 来获取数据。 假设我想将美元 (USD) 转换为印度卢比 (INR),则 url 为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);

?>

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

【问题讨论】:

标签: php regex curl web-scraping


【解决方案1】:

Yahoo Finance(几乎)肯定有相应的 API,因此您不必解析一些随机的 HTML 来进行货币转换。

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

【讨论】:

    【解决方案2】:

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

    Try it in YQL console

    【讨论】:

      【解决方案3】:

      以下代码有效。试试看

      $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]);
      

      【讨论】:

        【解决方案4】:

        您可以通过 .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];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-27
          相关资源
          最近更新 更多