Reputation: 45
I have a problem with my PHP Script. It works fine if i convert less than 20 USD to INR but if i used it with more than 19 ($amount) then it shows only 1st digit of the resultant output. I want full resultant output to use this script. I am feeling glad if someone assist me to solve this problem.
Here's the code:
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);
}
$from_Currency ="USD";
$to_Currency ="INR";
$amount ="20";
echo currency($from_Currency,$to_Currency,$amount);
Upvotes: 1
Views: 1659
Reputation: 168
try this
$data = explode('"', $rawdata);
preg_match_all("/([0-9]+(\.[0-9]+)?\s?[kBM]?)/", $data[3], $match1);
$var = implode(",", $match1[0]);
$var = str_replace(",", "", $var);
return round($var, 3);
Upvotes: 2
Reputation: 7361
I modified your code. This works as shown below the function...
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 = preg_replace("/((\"?[^\"]+\"?)[ ]*:[ ]*([^,\"]+|\"[^\"]*\")(,?))/i", '"\\2": \\3\\4', str_replace(array('{', '}'), array('',''), $rawdata));
return json_decode( '{' . $data . '}' );
}
$from_Currency ="USD";
$to_Currency ="INR";
$amount ="20";
$amt = currency($from_Currency,$to_Currency,$amount);
//print_r($amt);
// The actual converted amount can be obtained with
$converted_amount = $amt->rhs;
Upvotes: 0
Reputation: 1885
That is because google seems to be returning a weird number in case of > 1000 rhs value. Print the whole response and you will see. The value returned is like 969 for $18, and 1á082.30965 for $20. I do not recognize that extra character in there, and no documentation is available.
Use a work around - convert 1 unit and then multiply with amount.
Upvotes: 0