Update:
Though this method works, a better alternative is to use a properly documented and public currency conversion API.
We have published an article demonstrating use of openexchangerates.org JSON API using jQuery here :
www.dynamicguru.com/javascript/currency-conversion-using-javascript-and-openexchangerates-json-api/
Also check out our online currency conversion tool that uses the aforementioned JSON API :
http://dynamicguru.com/currency-converter/
While most of us use Google for searching the web for information , few are aware that it has an inbuilt calculator which can also be used for converting a currency into another . Doing so is really simple , you just type ” AMOUNT CURRENCY_CONVERTING_FROM in CURRENCY_CONVERTING_TO ” and search , the inbuilt calculator will give you the result .For example , if one wants to convert 1 U.S Dollar into Euro , he shall type “1 USD in EUR” .
Now lets get to the topic of this post , Google also has a secret calculator API ( http://www.google.com/ig/calculator ) that is usually used for iGoogle gadgets , but since its free and open , anyone can use it .
So if you want to convert a currency into another using the API , your callback URL would look like :
www.google.com/ig/calculator?hl=en&q=AMOUNT-FROM_CURRENCY=?TO_CURRENCY // 1 USD in EUR example www.google.com/ig/calculator?hl=en&q=1USD=?EUR
In the above example , you get a string which looks like "{lhs: "1 U.S. dollar",rhs: "0.838574423 Euros",error: "",icc: true}" . You can easily explode() the string using php and extract the required data .
To make things easier for you , here is a simple php function that converts a currency into another using the Google calculator API . This example uses cURL , so you have to have it enabled for this code to work .
<?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);
}
?>
The value returned by Google usually has 9 decimal places , you can round it off to a no. of digits after decimal of you choice using the round() function . By default the above function rounds the value to 3 digits after decimal .
Now here is how you can use the function in your scripts
<?php
//This will display current value of 1 USD in INR ( Indian Rupees )
echo currency("USD","INR",1);
?>
Hope this has helped you with converting currencies using php on your website
You can view a working example of the above code at Malegaon Online .








[...] was found on Dynamic Guru website, and was improved by [...]
isnt the response simply a json?
so would be easier to just perform a json_decode rather than exploding the data (esspecially with whitespace) which doesnt work in all cases as i just found out after trialing your function – it is helpful none the less
just use json_decode in place of the exploding
thanks,
isnt the response simply a json?
so would be easier to just perform a json_decode rather than exploding the data (esspecially with whitespace) which doesnt work in all cases as i just found out after trialing your function – it is helpful none the less
just use json_decode in place of the exploding
thanks,
json_decode won’t work cause the returned data is JavaScript object string.
The difference between JavaScript object and JSON is that with JSON the variable name foo is enclosed in double quotes. json_decode doesn’t work with JavaScript object strings.
json_decode won’t work cause the returned data is JavaScript object string.
The difference between JavaScript object and JSON is that with JSON the variable name foo is enclosed in double quotes. json_decode doesn’t work with JavaScript object strings.
// the following strings are valid JavaScript but not valid JSON
// the name and value must be enclosed in double quotes
// single quotes are not valid
$bad_json = “{ ‘bar’: ‘baz’ }”;
json_decode($bad_json); // null
// the name must be enclosed in double quotes
$bad_json = ‘{ bar: “baz” }’;
json_decode($bad_json); // null
// trailing commas are not allowed
$bad_json = ‘{ bar: “baz”, }’;
json_decode($bad_json); // null
// the following strings are valid JavaScript but not valid JSON
// the name and value must be enclosed in double quotes
// single quotes are not valid
$bad_json = “{ ‘bar’: ‘baz’ }”;
json_decode($bad_json); // null
// the name must be enclosed in double quotes
$bad_json = ‘{ bar: “baz” }’;
json_decode($bad_json); // null
// trailing commas are not allowed
$bad_json = ‘{ bar: “baz”, }’;
json_decode($bad_json); // null
Unless I’m mistaken, Google’s response is not valid JSON, because the keys are not enclosed in double quotes.
Unless I’m mistaken, Google’s response is not valid JSON, because the keys are not enclosed in double quotes.
@Simon That is not a valid JSON format. The keys are not enclosed in quotes.
@Simon That is not a valid JSON format. The keys are not enclosed in quotes.
[...] Currency conversion using php and Google calculator api – Dynamic …Jun 9, 2010 … Google is a wonderful ! While most of us use it for searching the web for information , few are aware that it has an inbuilt calculator which can … [...]
$data = str_replace(‘rhs:’, ‘”rhs”:’, $data);
$data = str_replace(‘lhs:’, ‘”lhs”:’, $data);
$data = str_replace(‘error:’, ‘”error”:’, $data);
$data = str_replace(‘icc:’, ‘”icc”:’, $data);
$data = json_decode($data, true);
This seems to work ok for me…
$data = str_replace(‘rhs:’, ‘”rhs”:’, $data);
$data = str_replace(‘lhs:’, ‘”lhs”:’, $data);
$data = str_replace(‘error:’, ‘”error”:’, $data);
$data = str_replace(‘icc:’, ‘”icc”:’, $data);
$data = json_decode($data, true);
This seems to work ok for me…
$json = json_decode(preg_replace(array(‘/(\w+):/’, ‘/\//’), array(‘”$1″:’, ‘\/’), $str));
this one-liner does it all
$json = json_decode(preg_replace(array(‘/(\w+):/’, ‘/\//’), array(‘”$1″:’, ‘\/’), $str));
this one-liner does it all
[...] few days back , we published an article about currency conversion using Google calculator API and php. Today we are going to show you how to display current weather information and forecast data using [...]
how to get currency symboles instead of currency names
how to get currency symboles instead of currency names
Sir you have done the great job……………….
Sir you have done the great job……………….
Thank you! You saved my ass!
Thank you! You saved my ass!
Soon I will publish an fix for this code… I made it to fix the response to proper JSON structure… just filter the $rawdata like:
if(preg_match('/[a-z0-9]{1,25}:/i',$rawdata)){
$rawdata = str_replace("'",'"',preg_replace('/([a-z0-9]{1,25})(:)/s','"$1":',$rawdata));
}
$json = json_decode($rawdata);
$this->echo_array($json);
$data = explode('_', $json->rhs);
$var = $data['0'];
This will allow you to use json_decode function.
Soon I will publish an fix for this code… I made it to fix the response to proper JSON structure… just filter the $rawdata like:
if(preg_match('/[a-z0-9]{1,25}:/i',$rawdata)){
$rawdata = str_replace("'",'"',preg_replace('/([a-z0-9]{1,25})(:)/s','"$1":',$rawdata));
}
$json = json_decode($rawdata);
$this->echo_array($json);
$data = explode('_', $json->rhs);
$var = $data['0'];
This will allow you to use json_decode function.
you done good work………….
you done good work………….
This method doesn’t work for output bigger than 999.99 because it put spaces between numbers :
http://www.google.com/ig/calculator?hl=en&q=5000USD=?EUR
Return
{lhs: “5000 U.S. dollars”,rhs: “3 838.18224 Euros”,error: “”,icc: true}
And the php script will give you 3 !!!!
This method doesn’t work for output bigger than 999.99 because it put spaces between numbers :
http://www.google.com/ig/calculator?hl=en&q=5000USD=?EUR
Return
{lhs: “5000 U.S. dollars”,rhs: “3 838.18224 Euros”,error: “”,icc: true}
And the php script will give you 3 !!!!
This is a better way to do it :
function currency($from_Currency, $to_Currency, $amount)
{
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = “http://www.google.com/ig/calculator?hl=en&q=1$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']*$amount;
return round($var, 3);
}
This is a better way to do it :
function currency($from_Currency, $to_Currency, $amount)
{
$from_Currency = urlencode($from_Currency);
$to_Currency = urlencode($to_Currency);
$url = “http://www.google.com/ig/calculator?hl=en&q=1$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']*$amount;
return round($var, 3);
}