1

编辑

好吧,由于 jimmy 的链接,我得到了它的工作。这是我用来转换的代码,以防其他人想尝试同样的事情。这最适用于您知道基本固定或不经常更改的数字。确保删除由 /// 表示的注释,以便在使用下面的代码时没有浮动文本。另请注意,结果是近似的,因此您可能需要添加一个说明相同内容的部分。责任的东西。

从 Google 的 API 获取数据所需的代码:

<?php

function currency($from_Currency,$to_Currency,$amount) {
$amount = urlencode($amount);
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
$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('"', $rawdata);
$data = explode(' ', $data['3']);
$var = $data['0'];
return round($var,9); ///the 9 indicates how many decimal points you want. I set it at the API's limit of 9
}
?>

<?php ///turns the exchange rate into a php variable so we can use it later. 
$cad = currency("USD","CAD",1) ; ///The currency code converting from, the currency code converting to, and amount you want to convert. 
?> ///Best use 1 so for a simpler equation. (base amount * exchange rate = how much you'll need)

<?php 
$gbp = currency("USD","GBP",1) ; 
?>

包含内容的表格:

<table border="1" style="margin-left: 35px; width:400px;">
<tbody>
<tr>
<td style="text-align:left; width:190px"><strong>Currency</strong></td>
<td style="text-align: center;"><strong>USD</strong></td>
<td style="text-align: center;"><strong>CAD</strong></td>
<td style="text-align: center;"><strong>GBP</strong></td>
</tr>

<tr>
<td style="text-align:left;">Conversion</td>
<td style="text-align: center;">$5000</td> ///the base number I will be using to make the conversion.

<td style="text-align: center;">$<?php 
$basecad = $cad * 5000; ///multiply the base value (in this case $5000) by the conversion ratio stored in our php variable
$basecad = round($basecad, 0); ///rounds it up to 0 decimals for cleanliness
$basecad = number_format($basecad); ///formats it to have commas (1,000 vs 1000)
echo $basecad; ///prints result
?></td>

<td style="text-align: center;">$<?php  ///repeat as necessary for additional currencies or lines
$basegbp = $gbp * 5000;
$basegbp = round($basegbp, 0);
$basegbp = number_format($basegbp);
echo $basegbp;
?></span></td>

</tr>
</tbody>
</table>

原始问题

因此,我对正在更新的公司网站有了一个奇怪而有趣的想法。页面详细信息包括几个不同国家之间的货币汇率,以帮助制定旅行计划。我想出的想法是根据页面加载时的汇率更新汇率。这个概念本身与我之前做过的类似,但这次我必须使用第三方生成的 iframe。iframe 本身基本上只是来自http://themoneyconverter.com/WebTools.aspx的货币表. 它将信息输出到一个表格中,每个表格都包含一个用于任何货币汇率的 id。我现在的问题是如何从 iframe 中提取信息并将其转换为可以在父页面中使用的 PHP 变量。之后是简单的 PHP 计算来输出每个费用结果。主要问题来自我无法修改 iframe 中的信息这一事实。我已经深入研究了互联网,但除了如何将 PHP 变量放入 iframe 中,找不到任何东西,而不是将其取出。下面是 iframe 的示例,即我要提取的部分。任何帮助,无论是有可能还是不可能,都将不胜感激。

我将其提取到的实际表格只是一个 HTML 表格。我将添加一个基本算法来转换每个单元格的货币(即 $var1 x $iframecvar1)。如果您需要更多信息,请提前告诉我并感谢。

<table summary="Exchange Rates for Japanese Yen" id="major-currency-table">...
<td><div class="tmc i-USD"> </div></td> 
<td><a target="_blank" ,="" title="United States Dollar" href="/USD/Exchange_Rates_For_US_Dollar.aspx">USD</a></td> 
<td id="USD">0.01070</td>
4

2 回答 2

1

在您的特定情况下,iframe 正在从 Google 加载 jQuery,并包含来自 themoneyconverter.com 的 Google Analytics - 因此,在您自己的页面上简单地回显它可能会导致不希望的结果。

也就是说,网络抓取可能会变得很棘手,但这里有一个简单的工作流程 - 在 PHP 中获取数据并使用file_get_contents http://php.net/manual/en/function.file-get-contents.php转换为 var

<?php
$file = file_get_contents('http://themoneyconverter.com/USD/RateTicker.aspx');
//echo the file
echo $file;

如果您想更复杂地抓取内容,我建议 Matthew Turland 的博客或他关于该主题的书:

http://matthewturland.com/tag/web-scraping/

于 2013-02-13T20:12:57.617 回答
1

在不知道您可以更改多少您正在使用的页面或该页面的外观的情况下,我想建议一种替代方法来从 iframe 获取汇率。

该脚本运行良好。

<?php
function currency($from_Currency,$to_Currency,$amount) {
$amount = urlencode($amount);
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
$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('"', $rawdata);
$data = explode(' ', $data['3']);
$var = $data['0'];
return round($var,3);
}

echo currency("GBP","USD",1); 
?>

如果这不能解决您的问题,也许它对其他人有用。

于 2013-02-13T20:45:59.013 回答