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

PHP和curl用于从Yahoo Finance获取汇率,php,regex,curl,web-scraping,Php,Regex,Curl,Web Scraping,我编写了以下php代码片段,从Yahoo Finance获取货币兑换率 我正在使用curl获取数据。 假设我想将美元(USD)转换为印度卢比(INR),那么url为,印度卢比值显示为45.225。 但是,如果我运行我的代码,我得到的值是452.25。为什么会出现这种差异 <?php $amount = $_GET['amount']; $from = $_GET['from']; $to = $_GET['to']; $url = "http://in.finance.

我编写了以下php代码片段,从Yahoo Finance获取货币兑换率

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

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


另外,我假设使用类似谷歌的东西,解析此响应比解析雅虎的HTML页面要稳定得多。

您可以使用Yahoo.finance.xchange open table以XML或JSON格式获取费率:


您可以通过.csv文件访问雅虎货币,因此解析这些文件要容易得多。例如:“欧元兑美元”=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];
}

下面的代码有效。试一试

$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]);
强制性答复: