PHP中的美元到英镑货币转换器

PHP中的美元到英镑货币转换器,php,api,google-api,currency,Php,Api,Google Api,Currency,我试图用PHP中的GoogleAPI制作一个货币转换器,但它给了我一个空白页面 index.php: <div id='output'></div> <form action='convert.php' method='post'> Amount: <input name='amount' type='text'><br/> From: <select name='from'> <option valu

我试图用PHP中的GoogleAPI制作一个货币转换器,但它给了我一个空白页面

index.php:

<div id='output'></div>
<form action='convert.php' method='post'>
Amount: <input name='amount' type='text'><br/>
From: <select name='from'>
        <option value='USD'>USD</option>
        <option value='GBP'>GBP</option>
        </select><br/>
To: <select name='to'>
        <option value='GBP'>GBP</option>
        <option value='USD'>USD</option>
        </select><br/>
<input name='submit' type='submit' value='submit'>
</form>
    <?php

function currency($from, $to, $amount) {
   $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to);
   $doc = new DOMDocument;
   @$doc->loadHTML($content);
   $xpath = new DOMXpath($doc);
   $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue;
   return str_replace(' '.$to, '', $result);
}

if(!empty($_POST) && isset($_POST['submit'])) {
    $output = currency($_POST['from'], $_POST['to'], $_POST['amount']);
    echo "<script>document.getElementById('output').innerHTML = '<p>" . $output . "</p>'></script>";
}

?>

金额:
发件人: 美元 英镑
致: 英镑 美元
convert.php:

<div id='output'></div>
<form action='convert.php' method='post'>
Amount: <input name='amount' type='text'><br/>
From: <select name='from'>
        <option value='USD'>USD</option>
        <option value='GBP'>GBP</option>
        </select><br/>
To: <select name='to'>
        <option value='GBP'>GBP</option>
        <option value='USD'>USD</option>
        </select><br/>
<input name='submit' type='submit' value='submit'>
</form>
    <?php

function currency($from, $to, $amount) {
   $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to);
   $doc = new DOMDocument;
   @$doc->loadHTML($content);
   $xpath = new DOMXpath($doc);
   $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue;
   return str_replace(' '.$to, '', $result);
}

if(!empty($_POST) && isset($_POST['submit'])) {
    $output = currency($_POST['from'], $_POST['to'], $_POST['amount']);
    echo "<script>document.getElementById('output').innerHTML = '<p>" . $output . "</p>'></script>";
}

?>

它是空的,因为您正在将数据发布到新页面

在index.php中有一行

<div id='output'></div>
到时候你会看到结果的

由于您希望输出与表单所在的页面显示在同一页面上,因此您可能需要考虑使用

或者,您可以通过执行以下操作将获取结果的逻辑放在同一页面中:

<?php

function currency($from, $to, $amount) {
   $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to);
   $doc = new DOMDocument;
   @$doc->loadHTML($content);
   $xpath = new DOMXpath($doc);
   $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue;
   return str_replace(' '.$to, '', $result);
}

if(!empty($_POST) && isset($_POST['submit'])) {
    $output = currency($_POST['from'], $_POST['to'], $_POST['amount']);
}

?>

<div id='output'><?php if(isset($output)) { echo $output; } ?></div>
<form action='index.php' method='post'>
Amount: <input name='amount' type='text'><br/>
From: <select name='from'>
        <option value='USD'>USD</option>
        <option value='GBP'>GBP</option>
        </select><br/>
To: <select name='to'>
        <option value='GBP'>GBP</option>
        <option value='USD'>USD</option>
        </select><br/>
<input name='submit' type='submit' value='submit'>
</form>

您需要在下面的函数中传递参数,该函数点击Google URL并获取货币转换响应

参数:
$from\u Currency
=您希望在其中得到响应。
$to_Currency
=您需要从中转换。
$amount
=要转换的金额

<?php

function get_currency($from_Currency, $to_Currency, $amount) {

$amount = urlencode($amount);
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);

$url = "http://www.google.com/finance/converter?a=$amount&from=$from_Currency&to=$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('bld>', $rawdata);
$data = explode($to_Currency, $data[1]);
return round($data[0], 2);
}

// Call the function to get the currency converted
echo get_currency('USD', 'INR', 1);

?>

答复:

65.24(按今天美元汇率计算)


谷歌已经更新了这个链接,也就是说,它已经被移动到了一个新的网站。因此,这可能会有所帮助:

function currencyConvert($from,$to,$amount){
    $url = "https://finance.google.com/finance/converter?a=$amount&from=$from&to=$to";
    $request = curl_init(); 
    $timeOut = 0; 
    curl_setopt ($request, CURLOPT_URL, $url); 
    curl_setopt ($request, CURLOPT_RETURNTRANSFER, 1); 

    curl_setopt ($request, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 
    curl_setopt ($request, CURLOPT_CONNECTTIMEOUT, $timeOut); 
    $response = curl_exec($request); 
    curl_close($request); 

        $rawdata = str_replace('</span>','',str_replace('<span class="bld">','',$response));
    list(,$val) = explode("bld>",$rawdata);
    list($raw2,) = explode("<input",$val);
    return (float) $raw2;
}
这将把1美元兑换成尼泊尔卢比


美元兑英镑也可以使用类似的方法。

我认为最好通过API进行转换,因为加载所有页面可能会很慢且不易修改

function convertCurrency($amount, $from, $to){
  $conv_id = "{$from}_{$to}";
  $string = file_get_contents("http://free.currencyconverterapi.com/api/v5/convert?q=$conv_id&compact=ultra");
  $json_a = json_decode($string, true);

  return $amount * round($json_a[$conv_id], 4);
}
//EXAMPLE convert 29 euro in $
echo(convertCurrency(29, "EUR", "USD"));
finance.google.com已经停播,试试这些

// google API - Load time: 558 ms
function google_money_convert($from, $to, $amount)
{
    $url = "https://www.google.com/search?q=".$from.$to;
    $request = curl_init();
    $timeOut = 0;
    curl_setopt($request, CURLOPT_URL, $url);
    curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($request, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
    curl_setopt($request, CURLOPT_CONNECTTIMEOUT, $timeOut);
    $response = curl_exec($request);
    curl_close($request);

    preg_match('~<span [^>]* id="knowledge-currency__tgt-amount"[^>]*>(.*?)</span>~si', $response, $finalData);
    $finalData=str_replace(',', '.', $finalData);
    return (float)$finalData[1]*$amount;
}


 // free.currencyconverter API - Load time: 95ms
    function money_convert($from, $to, $amount)
{
    $url = "http://free.currencyconverterapi.com/api/v5/convert?q=$query&compact=ultra";
    $request = curl_init();
    $timeOut = 0;
    curl_setopt($request, CURLOPT_URL, $url);
    curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($request, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
    curl_setopt($request, CURLOPT_CONNECTTIMEOUT, $timeOut);
    $response = curl_exec($request);
    curl_close($request);
    $response = json_decode($response, true);
    $responseOld=$response;
    // print_r($response);
    return $response[$query]*$amount;
}
//谷歌API-加载时间:558毫秒
函数google\u money\u convert($from,$to,$amount)
{
$url=”https://www.google.com/search?q=“$from.$to;
$request=curl_init();
$timeOut=0;
curl_setopt($request,CURLOPT_URL,$URL);
curl_setopt($request,CURLOPT_RETURNTRANSFER,1);
curl_setopt($request,CURLOPT_USERAGENT,“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_13_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/68.0.3440.106 Safari/537.36”);
curl_setopt($request,CURLOPT_CONNECTTIMEOUT,$timeOut);
$response=curl\u exec($request);
卷曲关闭($请求);
预匹配('~]*id=“knowledge-currency\uu tgt-amount”[^>]*>(**?~si',$response,$finalData);
$finalData=str_replace(“,”,“,”,$finalData);
返回(浮动)$finalData[1]*$amount;
}
//free.currencyconverter API-加载时间:95ms
函数money\u convert($from,$to,$amount)
{
$url=”http://free.currencyconverterapi.com/api/v5/convert?q=$query&compact=ultra”;
$request=curl_init();
$timeOut=0;
curl_setopt($request,CURLOPT_URL,$URL);
curl_setopt($request,CURLOPT_RETURNTRANSFER,1);
curl_setopt($request,CURLOPT_USERAGENT,“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_13_5)AppleWebKit/537.36(KHTML,如Gecko)Chrome/68.0.3440.106 Safari/537.36”);
curl_setopt($request,CURLOPT_CONNECTTIMEOUT,$timeOut);
$response=curl\u exec($request);
卷曲关闭($请求);
$response=json_decode($response,true);
$responseOld=$response;
//打印(回复);
返回$response[$query]*$amount;
}

问题是什么?…我如何让它工作?它怎么不工作?你期待什么,你得到了什么?我用它替换了NoX.php,当我提交表单时,我仍然得到一个空白页。如果你做“查看源”,空白页的来源是什么?嗯,这很奇怪…我在我的网站上嵌入了带有iFrame的表单,转换器在那里工作得非常好。但是当我直接访问PHP文件时,它不会。哦,好吧。