Bun venit pe SkullBox!

Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
  Pagini: [1] 2
  Imprimă  
Curs BNR cu PHP, varianta XML, folosind SimpleXML  (Vizualizari 2194)
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Dec 19, 2007, 23:49

Dupa cum probabil stiti (ma refer la webmasteri) BNR a scos in sfarsit o metoda developer-friendly de verificare a cursului valutar, online. Pana acum toti programatorii luau pagina http://www.bnr.ro/Ro/Info/ si se apucau sa faca 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 Smile

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

Cod:
<?php
header
('Content-type: text/plain');

// Trebuie sa iau XML-ul de pe bnr.ro si sa-l salvez in $curs;
$url &nbsp;= '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') == ) &nbsp$final['currency'] &nbsp; = (string) $value;
if( strcmp($att,'multiplier') == $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.

Daca vi se pare util si il folositi pe site-ul vostru, va rog sa adaugati si un link catre SkullBox Smile
« Ultima modificare: Oct 09, 2008, 12:08 de către Agkelos » Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
Psycho p01nt
*

Deconectat Deconectat

Mesaje: 85

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Ian 07, 2008, 14:01

Il voi folosi cu placere...
Mai ales ca asteptam demult asa ceva
Facusem mai demult un convertor valutar (software) si am renuntat sa il mai imbunatatesc ca aveam probleme cu update-ul la cursul valutar...acum cred ca o sa reusesc Laughing

multumesc pt script.Apreciate it !
Memorat
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Ian 07, 2008, 14:21

You're welcome, dude Winking
Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
tercot
*

Deconectat Deconectat

Mesaje: 1161

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 04, 2008, 14:20

fain snippetul ... dar daca l-as si intelege .. Big grin
Va rog frumos sa imi explice si mie cineva aceste linii
Cod:
<?php
foreach( $rate->attributes() as $att => $value ){
        if( 
strcmp($att,'currency') == )   $final['currency']   = (string) $value;
        if( 
strcmp($att,'multiplier') == $final['multiplier'] = (string) $value;
    }
?>
Va multumesc!
« Ultima modificare: Oct 09, 2008, 12:08 de către Agkelos » Memorat

Crezi in Dumnezeu si nu vei fi dezamagit.
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 04, 2008, 14:30

Bucla aia prelucreaza un array care va fi de forma camp=>valoare. Sunt doua if-uri care verifica numele campului. Daca numele campului e currency, $final['currency'] ia valoarea $value.
Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
vladiii
*

Deconectat Deconectat

Mesaje: 166

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 05, 2008, 16:26

Fara nicio clasa e mai mult de muncit, deoarece trebuiesc facute parsarile. Spre exemplu, ca sa afisez ceva genul: AUD: 2.1683, as putea folosi urmatorul script:
Cod:
<?php
$url
="http://www.bnro.ro/nbrfxrates.xml";
$curs=file_get_contents($url);
$aux1=explode("<Rate currency='"$curs);
$aux2=explode("</Rate>"$aux1[1]);
$aud=str_replace("' >"": "$aux2[0]);
echo 
$aud;
?>
Pentru celelalte valute se foloseste aceeasi idee, dar e mai mult de munca.
Bafta !
« Ultima modificare: Oct 09, 2008, 12:08 de către Agkelos » Memorat

tercot
*

Deconectat Deconectat

Mesaje: 1161

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 07, 2008, 14:58

am si eu o alta problema Whistling... dar nu prea stiu sa o explic(ca de obicei) ...
eu vreau de exemplu .. sa fac o lista <select> <option value="scoala">Scoala .. care sa aiba valoarea $rates[nr]['rate'] ... cu fac asta ?
« Ultima modificare: Oct 09, 2008, 12:09 de către Agkelos » Memorat

Crezi in Dumnezeu si nu vei fi dezamagit.
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 07, 2008, 15:32

Cu o bucla for folosindu-te de numarul de elemente din array sau cu un foreach Smile

Citeste manualul, ia exemplul de mai sus, si daca nu te descurci spune si iti fac eu codul.
Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
tercot
*

Deconectat Deconectat

Mesaje: 1161

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 07, 2008, 18:08

^ cred ca m-am exprimat eu prost :-) scuze... deci sa schitez ce vreau eu sa fac:
Am o pagina din care aleg valuta: voi avea x <select> <option value="valuta">USD(etc) ... daca userul selecteaza USD eu sa am o variabila cu valoarea USD-ului ... si tot asa .. cu fac ca eu sa atribui lui <select> <option value="valuta">USD valoarea USD-ului pe care o iau cu scriptul de mai sus... ?
sper ca m-am facut inteles .. Multumesc!
« Ultima modificare: Oct 09, 2008, 12:09 de către Agkelos » Memorat

Crezi in Dumnezeu si nu vei fi dezamagit.
AdyX
*

Deconectat Deconectat

Mesaje: 1062

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Apr 07, 2008, 18:15

HTML
Cod:
<form action="valuta.php" method="post">
  <select name="valuta">
    <option value="...">...</option>
    <option value="...">...</option>
  </select>
</form>
valuta.php
Cod:
$valuta = $_POST['valuta'];
« Ultima modificare: Oct 09, 2008, 12:09 de către Agkelos » Memorat
detective
*

Deconectat Deconectat

Mesaje: 130

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Iun 11, 2008, 02:13

si cum fac de ex daca vreau sa citesc doar valoarea EUR-ului si USD-ului din acel array si sa le stochez in 2 variabile ca sa le afisez intr-un tabel ?
Memorat
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Iun 11, 2008, 07:48

La print_r($rates) poti vedea al catelea element din array e USD. Ca sa afisezi doar valoarea USD folosesti $rates[INDEX] unde INDEX e pozitia citita mai devreme. Daca ai valoarea o poti introduce intr-un tabel in mod normal, cu INSERT.
Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
danieLs
*

Deconectat Deconectat

Mesaje: 423

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Iun 11, 2008, 09:13

Eu am facut ceva de genul asta, nu depinde de nicio librarie, face si caching ptr a miscora timpul de incarcare cu refresh la 1 ora (modificati 3600 cu timpul dorit)

Cod:
<?php

function GetCursValutar()
{
$xmlUrl 'http://www.bnro.ro/nbrfxrates.xml';
$cacheFile './curs_valutar.cache';
$timedif = @(time() - filemtime($cacheFile)); 
$result = array();

if ($timedif 3600)
{
$result unserialize(join(''file($cacheFile)));
}
else
{
if ($f = @fopen($xmlUrl'r')) 
{
while (!feof($f)) 
{
$line fgets($f4096);
if (preg_match("/(\s)?<Rate currency='([A-Z]{3})' (multiplier='100')?>
([0-9\.]+)<\/Rate>/", $line, $out))
{
$result = array_merge($result, array($out[2] => $out[4]));
}
}

fclose($f);

$serialized = serialize($result);

if ($f = @fopen($cacheFile, 'w'))
{
fwrite($f, $serialized, strlen($serialized));
fclose($f);
}
}
}

return $result;
}

print_r (GetCursValutar());
?>
« Ultima modificare: Oct 09, 2008, 12:09 de către Agkelos » Memorat

The only valid measurement of code quality is: WTF's/minute

(\__/)
(+'.'+) This is Bunny. Copy and paste bunny into
(")_(") your signature to help him gain world domination.
detective
*

Deconectat Deconectat

Mesaje: 130

Curs BNR cu PHP, varianta XML, folosind SimpleXML, Iun 15, 2008, 14:08

Ok am ajuns la varianta aceasta :
Cod:
<?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') == )  $final['currency']  = (string) $value;
    if( 
strcmp($att,'multiplier') == $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[18]);
E bine imi afiseaza
Cod:
Array
(
  [currency] => USD
  [rate] => 2.3959
  [multiplier] => 1
)
Bun, acum pe mine ma intereseaza doar rate-ul de la USD, pt ca la currency o sa am eu logo-ul dolarului si in dreapta va fi rate-ul, in acel tabel, apropo ma refer la un tabel HTML nu unul MySql.Deci vreau sa fac un mic tabelas cu USB, EUR si de la aceste 2 valori ( sau mai multe ) ma intereseaza doar rate-ul.
« Ultima modificare: Oct 10, 2008, 10:20 de către emi » Memorat
Agkelos
*

Deconectat Deconectat

Mesaje: 5229

WWW
Curs BNR cu PHP, varianta XML, folosind SimpleXML, Iun 15, 2008, 14:10

Ii dai in celula tabelului:
Cod:
echo $rates[18]["rate"];
« Ultima modificare: Oct 09, 2008, 12:10 de către Agkelos » Memorat



Problemele se rezolva pe forum. Nu trimiteti PM ca nu va ajut.
Pentru urgente, skullbox at skullbox . info.
SkullAds
Ecspert
ReclAmator
* * * * *
Google AdSense

Gen: Bărbat
Mesaje: Multe

Reclama AdSense,
 

 
   


Pagini: [1] 2
  Imprimă  
 
Schimbă forumul:  

Ethical hacking and programming community
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro