RO

Curs valutar bnr pe site-ul tau

O problema de care se loveste oricine, cei care presteaza cod , pagini web, un simplu
script iti poate usura munca. Nu demult BNR (de prin 2007) a venit in sprijinul programatorilor punand la dispozitie cursul valutar intr-un fisier de tip xml din care se poate citi orice curs ai nevoie.
Iata un exemplu pentru cursul EUR, USD, LIRA STERLINA si GRAMUL DE AUR :
––––––––––––––-

<?php
$objDOM = new DOMDocument();
$objDOM->load("http://www.bnro.ro/nbrfxrates.xml");
$cursuri = $objDOM->getElementsByTagName("Rate");
$data=$objDOM->getElementsByTagName("SendingDate")->item(0)->nodeValue;
list($year, $month, $day) = split('[-.-]', $data);
$data=$day.'.'.$month.'.'.$year;

$eur=$cursuri->item(10)->nodeValue;
$usd=$cursuri->item(26)->nodeValue;
$gbp=$cursuri->item(11)->nodeValue;
$xau=$cursuri->item(27)->nodeValue;
$chf=$cursuri->item(5)->nodeValue;
$pln=$cursuri->item(20)->nodeValue;
?>
<table width="159" border="0" cellpadding="0" cellspacing="3">
<tr>
<td width="34"><img src="http://www.bnr.ro/img/valute/eur.gif" title="Curs EURO" alt="Curs EURO"/></td>
<td width="42">EUR</td>
<td align="right"><?php echo $eur;?></td>
</tr>
<tr>
<td><img src="http://www.bnr.ro/img/valute/usd.gif" title="Curs Dolar" alt="Curs Dolar"/></td>
<td align="left">USD</td>
<td align="right"><?php echo $usd;?></td>
</tr>
<tr>
<td align="left"><img src="http://www.bnr.ro/img/valute/gbp.gif" alt="Lira Sterlina" title="Lira Sterlina"/></td>
<td align="left">GBP</td>
<td align="right"><?php echo $gbp;?></td>
</tr>
<tr>
<td align="left"><img src="http://www.bnr.ro/img/valute/xau.gif" alt="Gram aur" title="Gram aur"/></td>
<td align="left">XAU</td>
<td align="right"><?php echo $xau;?></td>
</tr>
<tr>
<td align="left"><img src="http://www.bnr.ro/img/valute/chf.gif" alt="Franc Elvetian" title="Franc Elvetian"/></td>
<td align="left">CHF</td>
<td align="right"><?php echo $chf;?></td>
</tr>
<tr>
<td align="left"><img src="http://www.bnr.ro/img/valute/pln.gif" alt="Zlotul polonez" title="Zlotul polonez"/></td>
<td align="left">PLN</td>
<td align="right"><?php echo $pln;?></td>
</tr>
<tr>
<td colspan="3" align="right"><hr /></td>
</tr>
<tr>
<td colspan="3" align="right">valabil la : <?php  echo $data;?></td>
</tr>
</table>

––––––––––––––-

Atentie. pt folosirea lui in CMS-uri gen WORDPRESS, JOOMLA etc, este necesara insalarea unor pluginuri pt. recunoasterea de cod php. Printr-un simplu google search se pot gasi foarte usor.

17 comentarii la „Curs valutar bnr pe site-ul tau”

  1. Pentru cei care vor sa implementeze online acest script:
    1. creati un fisier .php
    2. Deschideti-l cu un editor de texte, preferabil Notepad ++
    3. Efectuati Copy la urmatorul cod si Paste:
    –––––––––
    load(„http://www.bnro.ro/nbrfxrates.xml”);
    $cursuri = $objDOM->getElementsByTagName(„Rate”);

    $eur=$cursuri->item(10)->nodeValue;
    $usd=$cursuri->item(26)->nodeValue;
    $gbp=$cursuri->item(11)->nodeValue;
    $xau=$cursuri->item(27)->nodeValue;
    $chf=$cursuri->item(5)->nodeValue;
    $pln=$cursuri->item(20)->nodeValue;
    ?>

    CURS VALUTAR – BNR

    EUR

    USD

    GBP

    XAU

    CHF

    PLN

    Valabil la :

    –––––––––
    4. Salvati fisierul.
    5. Incarcati domeniul-vostru.com/fisierul-nou-creat.php

    Succes!

    PS: Am eliminat procedurile care priveau actualizarea datei, tinand cont ca XML-ul de la BNR se actualizeaza in fiecare zi de luni pana vineri, este fresh permanent, DECI data poate fi setata cu ajutorul PHP, fara alte artificii.

    Răspunde
  2. Nelutzu are dreptate! nu folositi direct xml-ul de la BNR. IP-urile ce genereaza trafic mare, vor fi blocate.
    Daca este folosit doar in sopuri personale cu accesari 2-3 pe zi (poate chiar si mai mult) se poate folosi direct xml-ul pentru preluarea cursului. Dar daca vorbim de multe accesari (site-uri cu utilizatori reali) trebuie folosita o baza de date pentru stocarea cursului pentru ziua respectiva, iar baza de date personala, poate fi accesata ori de cate ori este nevoie fara probleme. Inca un avantaj major daca folositi baza de date este acela ca se poate accesa un curs valutar de la o data anterioara, se pot crea statistici si grafice cu evolutia cursului.
    O sa revin cu un script complet de preluare a cursului BNR.

    Răspunde
  3. Script-ul va genera probleme destul de mari.
    Daca ati citit in pagina unde se afla xml-ul pe bnr.ro scrie ca daca un IP-ul face prea mult traffic, el va fi blocat.

    Acest script nu stocheaza informatia nicaieri in cache, iar daca va fi folosit pe un site de 1000 vizitatori pe zi/ora probabil in maxim 1 saptamana va fi blocat sa nu mai spun ca e traffic ineficient.

    Informatia ar trebui actualizata odata la 3-4 ore.

    EXEMPLU:

    function get_rate() {

    $rate[‘curdate’] = date(”Y-m-d”);

    $query = mysql_query(”SELECT `eur`, `usd` FROM `cms_rate` WHERE `data`=’”.$rate[‘curdate’].”‘”);

    if (mysql_num_rows($query) == 0) {
    $xml=@file_get_contents(’http://www.bnr.ro/nbrfxrates.xml’, FILE_BINARY);

    if(!$xml){return 0;}
    preg_match(’/”EUR”>(.*)/’, $xml, $eur);
    preg_match(’/”USD”>(.*)/’, $xml, $usd);

    $rate[‘eur’] = $eur[1];
    $rate[‘usd’] = $usd[1];

    $up = mysql_query(”INSERT INTO `cms_rate` (`data`, `eur`, `usd`) VALUES(’”.$rate[‘curdate’].”‘,’”.$rate[‘eur’].”‘,’”.$rate[‘usd’].”‘)”);

    return $rate;

    } else {

    $res = mysql_fetch_assoc($query);
    $rate[‘usd’] = $res[‘usd’];
    $rate[‘eur’] = $res[‘eur’];
    return $rate;
    }

    Structura tabelului de date:

    SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;

    – ——————————————————–


    – Table structure for table `cms_rate`

    CREATE TABLE IF NOT EXISTS `cms_rate` (
    `id` int(11) NOT NULL auto_increment,
    `data` date NOT NULL,
    `eur` double NOT NULL,
    `usd` double NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


    – Dumping data for table `cms_rate`

    INSERT INTO `cms_rate` (`id`, `data`, `eur`, `usd`) VALUES
    (10, ‘2009-09-22′, 4.2665, 2.9123);

    PHP + MYSQL un script destul de simplu care face cache la informatie. E facut sa functioneze doar pe monezile EUR si USD (principale) si nu foloseste nici un XML parser.

    Răspunde
  4. salut!

    de cateva zile incerc sa fac un script care sa ia cursul in format xml de pe bnr.in cele din urma am ajuns sa caut diverse scripturi deja facute si am ajuns si la al tau…din pacate nici asta nu merge…de specificat k site-ul nu este pus inca pe net si folosesc un server apache…e posibil sa nu mearga din cauza serverului?

    p.s.:daca incerc sa deschid xml-ul cu browserul primesc eroare:XML parsing erroe:syntax error line 1 column 1

    Multumesc anticipat pentru raspuns!

    Răspunde
  5. imi poti da mai multe detalii.. iti da vreo eroare sau nu stii cum sa-l implementezi ? sau pe ce platforma vrei sa-l folosesti ? WordPress ? Jomla ? altceva.. ?

    Răspunde
  6. de curand BNR si modificat siteul si multe din scripturile care citeau automat cursul BNR nu mai functioneaza, am modificat scriptul adaptat pt. noul site BNR.

    Răspunde
  7. Da, ai dreptate, de la font a fost.
    Mi-am adus aminte ca am mai patit si in alte locuri (dar nu am facut legatura). Oh well…
    Bun, si pentru alte monede fac pur si simplu:

    $aux_MONEDA=explode(””, $aux[NUMAR_LINIE_MONEDA]);
    $MONEDA=str_replace(”NUME_MONEDA’ >”,””, $aux_MONEDA[0]);

    ?

    PS: Daca mi-ai fi raspuns prin e-mail as fi vazut mai repede, ca nu am vazut sa selectez mai jos „Tine-ma la curent…”. Deci, raspunde-mi prin e-mail te rog frumos!

    Răspunde
  8. daca ai copiat scriptul cu copy-paste din pagina, problema s-ar putea sa fie de la fontul folosit in pagina, iar in loc de simbolul („) sa-ti ia alt simbol. incearca dupa ce copii scriptul sa inlocuiesti tu toate semnele („) cu cele de la tastatura ta. la fel si cu (‘).

    Răspunde
  9. Salut, mie imi da eroare script-ul tau. Folosesc WordPress si l-am pus in sidebar, iar eroarea este:

    Parse error: syntax error, unexpected ‘:’ in /var/www/wordpress/wp-content/plugins/execphp.php(37) : eval()’d code on line 2

    Imi cer scuze dar nu sunt expert in php. Stiu insa ca eroarea nu este de la mine deoarece codul se executa.
    Ai idee ce o fi gresit?

    PS: Site-ul este la nume daca te ajuta cu ceva.

    Răspunde

Lasă un comentariu

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.