[ revlo @ 28.02.2018. 14:54 ] @
Namera mi je da na sajtu imam trenutne cene popularnih derivata, medju kojima je i bitkoin, zlato, nafta, srebro, valutni par eur/usd i slično..

Sa kog sajta izvršiti uvoz? Bilo bi dobro da je to javascript da bi cene bile trenutne, ali moze i php. Na primer na sajtu bitcoin nasao sam widgete, ali sadrže domen i slično, ja bih to maksimalno pojednostavio.
[ Deunan @ 28.02.2018. 16:26 ] @
Pronadji sajtove koji imaju API.
Za kriptovalute je verovatno najbolji coinmarketcap, njihov api:
https://coinmarketcap.com/api/

Ako hoces samo ajax-om, onda moras da koristis JSONP.
A mozes ajax-om da zoves neku php skriptu na svom serveru i cURL-om da pokupis podatke i vratis,
a javascriptom da update-ujes rezultat.
Ceo interfejs aplikacije je verovatno najbolje uraditi react.js-om.
[ revlo @ 28.02.2018. 17:33 ] @
Uradio sam u php, ali bolje bi bilo javascript, jel može pomoć, evo ga php:

Code (php):

<?php

$url = 'https://bitpay.com/api/rates';

$json = json_decode(file_get_contents($url));

foreach( $json as $obj ){
   
    if($obj->code == 'USD') { // vrednost bitkoina u dolarima
     
     $usd = $obj->rate;
    }
    if($obj->code == 'EUR') { // vrednost bitkoina u evrima
     
     $euro = $obj->rate;
    }
    if($obj->code == 'RSD') { // vrednost bitkoina u dinarima
     
     $btc = $obj->rate;
    }
    if($obj->code == 'XAU') { // vrednost bitkoina u zlatu

     $gold = $obj->rate;
    }
}

?>
 
[ Nemanja Avramović @ 28.02.2018. 18:37 ] @
Možeš da probaš i https://www.alphavantage.co/, daju potpuno free real-time API za cene sa stock marketa (tu imaš cene nafte, zlata, itd...) kao i za kriptovalute
[ revlo @ 28.02.2018. 18:50 ] @
Uradio sam ovako:

javascript:

Code:


var myVar = setInterval(myTimer, 1000);

function myTimer() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    var myArr = JSON.parse(this.responseText);
                    document.getElementById("demo").innerHTML = myArr[1]['rate'];
                }
            };
            xmlhttp.open("GET", "https://bitpay.com/api/rates", true);
            xmlhttp.send();
        }



radi, samo treba da podesim niz u funkciji. E sad me muči drugo, trebam da sačuvam prethodnu vrednost i uporedim sa trenutnom, da znam da li ide zelena ili crvena strelica..

A i ovaj kod mozda ima neke mane.
[ Deunan @ 28.02.2018. 21:22 ] @
Mozes da cuvas vrednosti, a mozes i da izvuces staru pa da uporedis:
Code:

if (this.readyState == 4 && this.status == 200) {    
    var el = document.getElementById("demo");
    var myArr = JSON.parse(this.responseText);
    var newPrice = myArr[1]['rate'];
                    
    if(parseFloat(el.innerHTML) == parseFloat(newPrice))    {
        return false;
    }
    else if(parseFloat(el.innerHTML) < parseFloat(newPrice))    {
        el.classList.add("green");  // ako je stara cena manja od nove
    }
    else if(parseFloat(el.innerHTML) > parseFloat(newPrice))    {
        el.classList.add("red");  // ako je stara cena veca od nove
    }
    el.innerHTML = newPrice;
}

Problem je sto taj ajax call tesko da ce da radi na svim browserima.
Najbolje koristi jQuery (imas getJSON()) i ne moras da razmisljas o tim stvarima.


[ Tpojka @ 28.02.2018. 22:22 ] @
Za uporedjivanje vrijednosti - localStorage.
[ revlo @ 01.03.2018. 08:18 ] @
Hvala vam puno, moraću jquery, ima nekih primera ali treba to prilagoditi.
[ revlo @ 01.03.2018. 12:25 ] @
nikako ne uspevam!
[ Nemanja Avramović @ 01.03.2018. 13:53 ] @
Prvo, ako radiš preko JS-a - imaš kategoriju foruma za JS pa možeš tamo da otvoriš temu za svoj problem.

Drugo, ako misliš da ti neko pomogne zato što ne uspevaš - okači kôd ovde pa da vidimo šta si do sad uradio i gde je zapelo.

I nemoj da ga kačiš kao ZIP već samo najbitnije delove koda ubaci u [code] tagove
[ revlo @ 01.03.2018. 14:52 ] @
Code (php):

<?php

function Values() {
     
     $url = 'https://bitpay.com/api/rates';

     $json = json_decode(file_get_contents($url));

     foreach ($json as $obj) {
         
         if ($obj->code == 'USD') {
         
          $usd = $obj->rate;
         }
         if ($obj->code == 'EUR') {
         
          $eur = $obj->rate;
         }
         if ($obj->code == 'RSD') {
         
          $rsd = $obj->rate;
         }
         if ($obj->code == 'XAU') {

          $xau = $obj->rate;
         }
     }

     $usd = round($usd, 2);
     $eur = round($eur, 2);
     $rsd = round($rsd, 2);
     $xau = round($xau * 31.1034768, 2);

     $v['usd'] = $usd . ' dolara';
     $v['eur'] = $eur . ' evra';
     $v['rsd'] = $rsd . ' dinara';
     $v['xau'] = $xau  . ' grama zlata';

     return $v;
}

?>
 


Code:

<script>

        function Values() {
            
            var usd = "<?php echo Values()['usd']; ?>";
            var eur = "<?php echo Values()['eur']; ?>";
            var rsd = "<?php echo Values()['rsd']; ?>";
            var xau = "<?php echo Values()['xau']; ?>";

            document.getElementById("usd").innerHTML = usd;
            document.getElementById("eur").innerHTML = eur;
            document.getElementById("rsd").innerHTML = rsd;
            document.getElementById("xau").innerHTML = xau;
        }
</script>


HTML:
Code:

<button onclick="Values();"></button>


Pozivanje funkcije probao sam i sa mouseover i onload, radi samo prvi put, posle ne radi.
Hvala puno, unapred. Ima i php koda zato sam ovde postavio pitanje.
[ Deunan @ 01.03.2018. 18:46 ] @

Verovatno funcija radi, ali su ti uvek iste vrednosti. Ti iz php prebacis u javascript samo jednom. Ne salje php non stop feed u tu funkciju.

Posto ovaj api dozvoljava cross origin, sve mozes u javascriptu.
Evo ti jQuery primer:
https://jsfiddle.net/34th4ba3/36/
[ Tpojka @ 01.03.2018. 18:58 ] @
Imaš samo vrijednosti koje su dobijene inicijalno.
Da bi upravlj'o novim vrijednostima, moraš da koristiš AJAX koji će pribaviti nove vrijednosti.
A ako ne želiš da koristiš blagodeti jQuery-ja, tu je XMLHttpRequest ili ovde.

Edit: @Deunan brži
[ revlo @ 02.03.2018. 14:57 ] @
Rešio sam uz vašu pomoć. Hvala.