Rohit Pawar
Rohit Pawar

Reputation: 45

php function currency conversion

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

Answers (3)

Lao
Lao

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

Pastor Bones
Pastor Bones

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

Amit
Amit

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

Related Questions