Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Dupa cum probabil stiti (ma refer la webmasteri) BNR a scos o metoda developer-friendly de verificare a cursului valutar, online. Pana acum toti programatorii luau pagina http://www.bnr.ro/Ro/Info/ si faceau asocieri ca sa gaseasca cursul euro sau cursul dolarului. De ceva vreme BNR a pus la dispozitie o un fisier in format XML care usureaza mult treaba programatorilor. Fisierul il puteti gasi la adresa http://www.bnro.ro/nbrfxrates.xml

OK, sa o scurtam. Ca sa simplific treaba unora postez aici codul care l-am facut ca sa citesc valutele. Sunt convins ca sunt si altii care au nevoie πŸ™‚

Pentru a functiona trebuie sa existe pe server libraria CURL si SimpleXML. Codul e urmatorul:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
< ?php
header('Content-type: text/plain');
 
// Trebuie sa iau XML-ul de pe bnr.ro si sa-l salvez in $curs;
$url  = 'http://www.bnro.ro/nbrfxrates.xml';
 
// Daca exista CURL, folosim CURL. Daca nu, folosim file_get_contents();
if( function_exists('curl_init') ) {
    $curl_handle=curl_init();
    curl_setopt($curl_handle,CURLOPT_URL,$url);
    curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
    $curs = curl_exec($curl_handle);
    curl_close($curl_handle);
} else {
    $curs = file_get_contents($url);
}
 
// OK, avem fisierul nbrfxrates.xml. Acum trebuie sa il citim
// pentru asta avem nevoie de SimpleXML
 
if( !class_exists('SimpleXMLElement') ){
    // Daca nu suporta SimpleXML e naspa
    // Nu extind ca nu am chef sa ma complic inutil
    // Oricine vrea sa ma completeze e binevenit :-)
    echo 'Serverul nu suporta SimpleXML';
    exit;
}
 
// Daca am ajuns pana aici toate-s bune si ne putem pune pe treaba :-)
$rates = array();
 
$xml = new SimpleXMLElement($curs);
foreach( $xml->Body->Cube->Rate as $rate ){
    $final = array();
    foreach( $rate->attributes() as $att => $value ){
        if( strcmp($att,'currency') == 0 )   $final['currency']   = (string) $value;
        if( strcmp($att,'multiplier') == 0 ) $final['multiplier'] = (string) $value;
    }
    $final['rate'] = (string) $rate;
    if( empty($final['multiplier']) ) $final['multiplier'] = 1;
    array_push($rates,$final);
}
 
// Daca am ajuns aici, datele sunt pastrate in $rates
print_r($rates);
?>

La final, in array-ul $rates se gaseste cate un array pentru fiecare valuta. Am incheiat cu un print_r($rates) ca sa se afiseze continutul array-ului, dar se poate inlocui cu o bucla foreach care afiseaza frumos valutele.

PHP

3 Responses so far.

  1. Mircea says:

    Merge super! Multumesc mult, m-ai scutit de cateva ore de codat πŸ™‚

  2. Curs Valuar BNR says:

    Multumesc frumos pentru script. Il folosesc si merge totul perfect + ca l-am si „stylizat” un pic. πŸ˜‰

    Merci mult oricum pt script.

  3. Sergiu Tot says:

    Va multumesc pentru aprecieri! Sunt binevenite πŸ˜‰