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.
Imi cer scuze, siteul a procesat anumite taguri. Puteti descarca varianta de pe website-ul meu.
Numai bine.
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.
Cum de pus alte tipuri de valute????
Va rog mult!!!
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.
Super scriptul, l-am pus si eu pe bogul meu.
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.
incearca sa testezi codu on-line pe o pagina de test.. sau instaleaza WAMPSERVER ultima versiune pentru testare locala. Acest script functioneaza pe multe site-uri uite un exemplu : http://www.badpolitics.ro
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!
The best way to implement daily curency …
nice move 😉
Thank You!
lobsang
daca ti-e mai usor.. vb pe mess.. merge si mai rpd 😉 id-ul meu > canyons_2000
Nu reusesc…ma poti ajuta ?
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.. ?
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.
Super tare 🙂
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!
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 (‘).
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.