Skip to content

Instantly share code, notes, and snippets.

@pchatterjee
Created October 21, 2018 01:07
Show Gist options
  • Save pchatterjee/41e8a37e40d10726fe138f38fd98c611 to your computer and use it in GitHub Desktop.
Save pchatterjee/41e8a37e40d10726fe138f38fd98c611 to your computer and use it in GitHub Desktop.
<?php
# always include this line
@date_default_timezone_set("GMT");
#declare the currency array
$ccodes = array(
'AUD','BRL','CAD','CHF',
'CNY','DKK','EUR','GBP',
'HKD','HUF','INR','JPY',
'MXN','MYR','NOK','NZD',
'PHP','RUB','SEK','SGD',
'THB','TRY','USD','ZAR');
# pull the rates json file
$json_rates = file_get_contents('http://data.fixer.io/api/latest?access_key=a7090b272aecc4d3590852c85f37971b')
or die("Error: Cannot load JSON file from fixer");
#decode the json to a php object
$rates = json_decode($json_rates);
# calculate the GBP ratio
$gbp_rate = 1/ $rates->rates->GBP;
# pull our currencies file into a simplexml object
$xml=simplexml_load_file('currencies.xml') or die("Error: Cannot load currencies file");
# start and initialize the writer
$writer = new XMLWriter();
$writer->openURI('rates.xml');
$writer->startDocument("1.0");
$writer->startElement("currencies");
$writer->writeAttribute('base', 'GBP');
# for every currency code in our array
# select its parent + subnodes and write
# them out after tidying up the countries list
foreach ($ccodes as $code) {
if (isset($rates->rates->$code)) {
$nodes = $xml->xpath("//ccode[.='$code']/parent::*");
$writer->startElement("currency");
$writer->startElement("code");
$writer->writeAttribute('rate', $rates->rates->$code * $gbp_rate);
$writer->text($code);
$writer->endElement();
$writer->startElement("cname");
$writer->text($nodes[0]->cname);
$writer->endElement();
$writer->startElement("cntry");
# tidy up countries node
$cntry = trim(preg_replace('/[\t\n\r\s]+/', ' ', $nodes[0]->cntry));
$wrong = array("Of", "And", "U.s.", "(The)", " , ");
$right = array("of", "and", "U.S.", "", ", ");
$cn = str_replace($wrong, $right, $cntry);
$writer->text($cn);
$writer->endElement();
$writer->endElement();
}
}
$writer->endDocument();
$writer->flush();
echo "All done ....!";
?>
@qWici
Copy link

qWici commented Oct 21, 2018

@pchatterjee its not the best place for publish code with u access token)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment