Kjapp og trygg hosting for Wordpress

Convertere Google Currency output til HTML/PHP

Demilio

Medlem
Jeg har denne:
http://www.google.com/ig/calculator?hl=en&q=100NOK=?EUR

resultatet viser:
Kode:
{lhs: "100 Norwegian kroner",rhs: "13.7096697 Euros",error: "",icc: true}

Noen som vet hvordan jeg kan få konvertert dette over til en lesbar html?

FYI - Det jeg prøver er å lage en liste over 4-5 valutakurser.. hvor mye er 100 NOK i EUR, USD, GBP, SEK og DKK.... f.eks... og så en måte jeg kan style dette på. F.eks. som den listen på valutakurser.no, basert på Norges bank sine kurser
 

Demilio

Medlem
Fant ut av det selv.. her er koden, om noen skulle ha behovc for den

PHP:
<?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,1);
}
?>

<strong>Results:</strong><br />
100NOK to USD = <?php echo currency("NOK","USD",100); ?><br />
100NOK to EUR = <?php echo currency("NOK","EUR",100); ?><br />
100NOK to GBP = <?php echo currency("NOK","GBP",100); ?><br />
100NOK to SEK = <?php echo currency("NOK","SEK",100); ?><br />
100NOK to DKK = <?php echo currency("NOK","DKK",100); ?><br />
 

typisk

Utvikler
Ser du fikk til, men denne krever ikke CURL.
PHP:
<?php
function curr($amount, $from, $to) {
	$content = file_get_contents("http://www.google.com/ig/calculator?hl=en&q={$amount}{$from}={$to}");
	preg_match('/rhs:\s*"([^\s]+)/', $content, $matches);
	return round($matches[1], 1);
}
?> 
100NOK to USD = <?php echo curr(100, "NOK", "USD"); ?><br />
 
Sist redigert:

adeneo

Medlem
Har ikke holdt på noe særlig med Google valutagreier, da det egentlig ikke er en ferdigutviklet API i følge Google, men brukte fortsatt en times tid på å finne ut hvordan man bruker API'en til å lage en valutakalkulator som henter verdiene direkte med Ajax.

For de som måtte trenge noe slikt, så ligger den her : adeneo's valutakalkis

Og ja, cURL er alltid bedre enn file_get_contents(), men det er samtidig også betydelig flere valgmuligheter og myyye mer å skrive. Ajax er alltid best :D
 
Sist redigert:

adeneo

Medlem
Du må sette koden inne i :

PHP:
<script type="text/javascript">

$(function() {
 
    //sett koden inn her

});

</script>

jsFiddle setter inn dette automatisk, så det er ikke alltid jeg husker det når jeg lager et eksempel der.

Det er kun de tre tegnene i "value", slik som NOK, som brukes for hente riktig valuta, så man kan fint skrive valutanavnene på Norsk i stedet, jeg gadd bare ikke å oversette alle sammen, og bare klippet og limet det inn fra en liste på Google over hvilke valutaer som var støttet.

Man kan selvfølgelig endre tekst, utseende osv. jeg bare tenkte jeg skulle lage en liten funksjon for å hente inn resultatene jeg da, og ettersom tjenesten til Google ikke returnerer gyldig JSON måtte det "pipes" mellom Yahoo's YQL tjeneste.
 
Sist redigert:

adeneo

Medlem
Aha, scriptet er inkludert to ganger, pass på at det bare kommer med en gang.
Problemet er nok at det er en Superfish meny som er i konflikt med jQuery, så da må vi bruke noen andre lure triks med "closures" og gjøre det slik:

PHP:
<script type="text/javascript">
(function($) {
    $('option', '#fra').eq(55).prop('selected', true); //velger NOK ved start
    $('option', '#til').eq(84).prop('selected', true);  //velger USD ved start

    $('.currSel').on('change keyup', function() {    //oppdaterer ved keyup og change
        var sum = $("#sum").val(),                      //henter verdiene fra boksene på sidene
            fra = $("#fra").val(),
            til = $("#til").val();
        hent('select * from json where url="http://www.google.com/ig/calculator?hl=en&q=' + sum + fra + '=?' + til + '"', function(data) {
            $("#result").html('er lik : ' + data.query.results.json.rhs); //setter inn resultatet
        });
    });

    function hent(query, callback) { //funksjonen som henter data gjennom YQL
        if (!query || !callback) {
            throw new Error('Feil : Udefinerte parametere!');
        }
        var encodedQuery = encodeURIComponent(query.toLowerCase()),
            url = 'http://query.yahooapis.com/v1/public/yql?q=' + encodedQuery + '&format=json&callback=?';
        $.getJSON(url, callback);
    };
})(jQuery); //closure med jQuery for å unngå konflikter
</script>

Gi meg noen minutter, skal se om jeg ikke kan gjøre det om til en fiks ferdig plugin i stedet.
 
Sist redigert:

adeneo

Medlem
Begynner å se ut som en plugin:

PHP:
(function($) {
    $.fn.kalkis = function(params) {
        var valutaer = {
            DZD: "Algerisk dinar (DZD)",
            USD: "Amerikansk dollar (USD)",
            ANG: "Antilliansk gylden (ANG)",
            ARS: "Argentinsk peso (ARS)",
            AUD: "Australsk dollar (AUD)",
            BHD: "Bahrainsk dinar (BHD)",
            BOB: "Boliviansk boliviano (BOB)",
            BWP: "Botswansk pula (BWP)",
            BRL: "Brasiliansk real (BRL)",
            GBP: "Britisk pund (GBP)",
            BND: "Bruneisk dollar (BND)",
            BGN: "Bulgarsk lev (BGN)",
            CAD: "Canadisk dollar (CAD)",
            KYD: "Caymansk dollar (KYD)",
            CLP: "Chilensk peso (CLP)",
            COP: "Colombiansk peso (COP)",
            CRC: "Costaricansk colon (CRC)",
            DKK: "Dansk krone (DKK)",
            DOP: "Dominikansk peso (DOP)",
            EGP: "Egyptisk pund (EGP)",
            AED: "Emiratarabisk dirham (AED)",
            EEK: "Estlandsk krone (EEK)",
            EUR: "Euro (EUR)",
            FJD: "Fijiansk dollar (FJD)",
            PHP: "Filippinsk peso (PHP)",
            HNL: "Honduransk lempira (HNL)",
            HKD: "Hong Kong dollar (HKD)",
            INR: "Indisk rupi (INR)",
            IDR: "Indonesisk rupiah (IDR)",
            ILS: "Israelsk shekel (ILS)",
            JMD: "Jamaicansk dollar (JMD)",
            JPY: "Japansk yen (JPY)",
            YER: "Jemenittisk rial (YER)",
            JOD: "Jordansk dinar (JOD)",
            KZT: "Kasakhstansk tenge (KZT)",
            KES: "Kenyansk shilling (KES)",
            CNY: "Kinesisk renminbi (Yuan)",
            HRK: "Kroatisk kuna (HRK)",
            KWD: "Kuwaitisk dinar (KWD)",
            LVL: "Latvisk lats (LVL)",
            LBP: "Libanesisk pund (LBP)",
            LTL: "Litauisk litas (LTL)",
            MKD: "Makedonsk denar (MKD)",
            MYR: "Malaysisk ringgit (MYR)",
            MAD: "Marokkansk dirham (MAD)",
            MUR: "Mauritisk rupi (MUR)",
            MXN: "Meksikansk peso (MXN)",
            MDL: "Moldovsk leu (MDL)",
            NAD: "Namibisk dollar (NAD)",
            NPR: "Nepalsk rupi (NPR)",
            NZD: "Newzealandsk dollar (NZD)",
            NIO: "Nicaraguansk cordoba (NIO)",
            NGN: "Nigeriansk naira (NGN)",
            NOK: "Norsk krone (NOK)",
            OMR: "Omansk rial (OMR)",
            PKR: "Pakistansk rupi (PKR)",
            PGK: "Papuansk kina (PGK)",
            PYG: "Paraguayansk guarani (PYG)",
            PEN: "Peruansk nuevo sol (PEN)",
            PLN: "Polsk zloty (PLN)",
            QAR: "Qatarsk riyal (QAR)",
            RON: "Rumensk leu (RON)",
            RUB: "Russisk rubel (RUB)",
            SVC: "Salvadoransk colón (SVC)",
            SAR: "Saudiarabisk riyal (SAR)",
            CSD: "Serbisk dinar (CSD)",
            SCR: "Seychelliansk rupi (SCR)",
            SLL: "Sierraleonsk leone (SLL)",
            SGD: "Singaporsk dollar (SGD)",
            SKK: "Slovakisk koruna (SKK)",
            LKR: "Srilankisk rupi (LKR)",
            CHF: "Sveitsisk franc (CHF)",
            SEK: "Svensk krone (SEK)",
            ZAR: "Sørafrikansk rand (ZAR)",
            KRW: "Sørkoreansk won (KRW)",
            TWD: "Taiwansk dollar (TWD)",
            TZS: "Tanzaniansk shilling (TZS)",
            THB: "Thailandsk baht (THB)",
            TTD: "Trinidadisk dollar (TTD)",
            CZK: "Tsjekkisk koruna (CZK)",
            TND: "Tunisisk dinar (TND)",
            TRY: "Tyrkisk lira (TRY)",
            UGX: "Ugandisk shilling (UGX)",
            UAH: "Ukrainsk hryvnia (UAH)",
            HUF: "Ungarsk forint (HUF)",
            UYU: "Uruguayansk peso (UYU)",
            VEB: "Venezuelansk bolivar (VEB)",
            VND: "Vietnamesisk dong (VND)",
            ZMK: "Zambisk kwacha (ZMK)"
        },m = {
            overskrift: 'VALUTAKALKULATOR',
            desimaler: 2,
            fra_sum: 100,
            fra_val: 'NOK',
            til_val: 'USD'
        };
        $.extend(m, params);
        
        var self    = this,
            form    = $('<form />', {id: 'valutaForm'}),
            br      = $('<br>'),
            header  = $('<p />', {text: m.overskrift, id: 'valutaHeader'}),
            input_f = $('<input />', {maxlength: '12', size: '5', autocomplete: 'off', value: m.fra_sum, 'class': 'currSel', id: 'valuta_fra'}),
            fra     = $('<select />', {id: 'fra', 'class': 'currSel'}),
            input_t = $('<input />', {maxlength: '12', size: '5', autocomplete: 'off', value: '100', 'class': 'currSel', id: 'valuta_til'}),
            til     = $('<select />', {id: 'til', 'class': 'currSel'});
            options = '';
            
        $.each(valutaer, function(k,v) {
            options += '<option value="'+k+'">'+v+'</option>';
        });
        
        var options_fra = $(options),
            options_til = $(options).clone(true),
            calc        = Math.pow(10, m.desimaler) || 1;
        options_fra.filter('[value="'+m.fra_val.toUpperCase()+'"]').prop('selected', true);
        options_til.filter('[value="'+m.til_val.toUpperCase()+'"]').prop('selected', true);
        fra.append(options_fra);
        til.append(options_til);
        form.append(header).append(input_f).append(fra).append(br).append(input_t).append(til).appendTo(this.empty());
        
        var timer;
        input_f.add(til).on('keyup change', function() {
            clearTimeout(timer);
            hent('select * from json where url="http://www.google.com/ig/calculator?hl=en&q='+input_f.val()+fra.val()+'=?'+til.val()+'"', function(data) {
                var x = Math.round( parseFloat(data.query.results.json.rhs.replace(/[A-Za-z\s$-]/g, "")) *calc)/calc;
                    x = data.query.results.json.rhs.indexOf('million')!=-1?Math.round(x*1000000):x;
                    x = data.query.results.json.rhs.indexOf('billion')!=-1?Math.round(x*1000000000):x;
                    x = data.query.results.json.rhs.indexOf('trillion')!=-1?Math.round(x*1000000000000):x;
                input_t.val(x);
            });
        }).trigger('change');
        
        input_t.add(fra).on('keyup change', function() {
            clearTimeout(timer);
            hent('select * from json where url="http://www.google.com/ig/calculator?hl=en&q='+input_t.val()+til.val()+'=?'+fra.val()+'"', function(data) {
                var x = Math.round( parseFloat(data.query.results.json.rhs.replace(/[A-Za-z\s$-]/g, "")) *calc)/calc;
                    x = data.query.results.json.rhs.indexOf('million')!=-1?Math.round(x*1000000):x;
                    x = data.query.results.json.rhs.indexOf('billion')!=-1?Math.round(x*1000000000):x;
                    x = data.query.results.json.rhs.indexOf('trillion')!=-1?Math.round(x*1000000000000):x;
                input_f.val(x);
            });
        });
        function hent(query, callback) {
            timer = setTimeout(function() {
                if (!query || !callback) {throw new Error('Feil : Udefinerte parametere!');}
                var encodedQuery = encodeURIComponent(query.toLowerCase()),url = 'http://query.yahooapis.com/v1/public/yql?q=' + encodedQuery + '&format=json&callback=?';
                $.getJSON(url, callback);
            }, 500);
        };
    }
})(jQuery);

Scriptet legges i seperat fil som inkluderes på siden etter jQuery eller i egne <script> tagger.

For å bruke det trengs kun et tomt element der man ønsker kalkulatoren:

HTML:
<div id="kalkulator"></div>

og brukes slik:

PHP:
$("#kalkulator").kalkis();

har også lagt inn noen options som man kan bruke (alle er frivillige):

PHP:
$("#kalkulator").kalkis({
                    overskrift: 'VALUTAKALKULATOR',  //valgfri overskrift
                    desimaler: 2,                    //antall desimaler i resultatet
                    fra_sum:  100,                   //start sum
                    fra_val: 'NOK',                  //start valuta -> fra
                    til_val: 'EUR'                   //start valuta -> til
                });

Her er et eksempel på hvordan det kan styles, og hvordan det funker : DEMONSTRASJON !!!

Betaling kan overføres direkte til min konto på Cayman Islands, og nå kan man til og med se hvor mye det blir i Caymanske Dollar!
 
Sist redigert:

adeneo

Medlem
Det er samme konflikten med Superfish menyen igjen, prøv :

PHP:
(function($) {
    $("#kalkis").kalkis({
             overskrift: 'VALUTAKALKULATOR',
             desimaler: 2,
             fra_sum:  100,
             fra_val: 'NOK',
             til_val: 'EUR'
     });
})(jQuery);

Forøvrig så er alle "options" valgfrie, så du kan godt bare gjøre:

PHP:
(function($) {
    $("#kalkis").kalkis();
})(jQuery);

Har selvfølgelig ikke brukt veldig mye tid på å teste at alt virker, men det ser foreløpig slik ut!
 
Sist redigert:

adeneo

Medlem
Hva mener du med plugin, det er vel allerede en plugin, men tenker du bare å legge det i en nedlastbar fil eller noe slikt ?
 
Topp