dik
script na zistenie euro kurzu
-
vivaSlovakia
Guru wannabe
- Príspevky: 2119
- Registrovaný: 29 júl 2006, 10:30
script na zistenie euro kurzu
Zdravim, robim mensi projekt a potrebujem z Sk ceny prepocitat aj na Euro... ako by ste to riesili ?... pocul som ze existuje nejaky script
dik
dik
aktualny kurzovy listok podla NBS v XML: http://www.nbs.sk/KL/AKTKLSL.XML
(rozparsovat xml a vybrat si co treba by uz mala byt hracka)
popis: http://www.nbs.sk/KL/FORMATS.HTM#XML
(rozparsovat xml a vybrat si co treba by uz mala byt hracka)
popis: http://www.nbs.sk/KL/FORMATS.HTM#XML
-
vivaSlovakia
Guru wannabe
- Príspevky: 2119
- Registrovaný: 29 júl 2006, 10:30
Prečo nepoužiješ radšej jeden z tých textových súborov?To je iba ukážka, ako by to mohlo fungovať. Treba to ešte mierne upraviť a hlavne by sa tam malo pridať ukladanie toho kurzu a načítanie napr. iba raz za hodinu (potom stačí skontrolovať, či je v $pc vyššia hodnota, ako bolo minule; ak áno, tak je ten lístok nový).
Kód: Vybrať všetko
<?php
function stiahnut_subor($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
$data = stiahnut_subor("http://www.nbs.sk/KL/AKTKLSL.SDF");
$pole=explode("\n", $data);
for ($i = 0; $i < count($pole); $i++) {
$hk = substr($pole[$i], 0, 2);
$mnozstvo = substr($pole[$i], 30, 4);
$kod = substr($pole[$i], 35, 3);
$kurz = substr($pole[$i], 40, 7);
$pc = substr($pole[$i], 57, 3);
if ($hk == "11" && $kod == "EUR" && is_numeric($mnozstvo) && is_numeric($kurz)) {
echo $kurz/$mnozstvo;
}
}
?>to xml rozparsovane ... u mna to vyzera ze to funguje
)
Kód: Vybrať všetko
<?php
class Euro {
var $xml_file = "http://www.nbs.sk/KL/AKTKLSL.XML";
var $xml_curr_key = "*nbsDailyFxRateList*rateList*rate*ccyCode";
var $xml_val_key = "*nbsDailyFxRateList*rateList*rate*value";
var $current_tag;
var $eurotime;
var $xml_parser;
var $euro_kurz;
function contents($parser, $data){
if($this->current_tag == $this->xml_curr_key){
if ($data=="EUR") $this->eurotime = 1;
else $this->eurotime = 0;
}
if($this->eurotime == 1 && $this->current_tag == $this->xml_val_key){
$this->euro_kurz = $data;
}
}
function startTag($parser, $data){
$this->current_tag .= "*".$data;
}
function endTag($parser, $data){
$tag_key = strrpos($this->current_tag, '*');
$this->current_tag = substr($this->current_tag, 0, $tag_key);
}
function Euro() {
$this->xml_parser = xml_parser_create();
xml_set_object($this->xml_parser, $this);
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($this->xml_parser, "startTag", "endTag");
xml_set_character_data_handler($this->xml_parser, "contents");
$fp = fopen($this->xml_file, "r") or die("Could not open file");
$data = fread($fp, 80000) or die("Could not read file");
if(!(xml_parse($this->xml_parser, $data, feof($fp)))){
die("Error on line " . xml_get_current_line_number($this->xml_parser));
}
xml_parser_free($this->xml_parser);
fclose($fp);
}
function getEuro() {
return $this->euro_kurz;
}
}
$obj = new Euro();
echo $obj->getEuro();
?>-
Ing. Gandalf
Expert
- Príspevky: 178
- Registrovaný: 02 feb 2007, 19:46
Kód: Vybrať všetko
<?php
if (!$xml = simplexml_load_file("http://www.nbs.sk/KL/AKTKLSL.XML"))
echo "Problem";
else {
foreach ($xml->rateList->rate as $rate) {
if ($rate->ccyCode=="EUR")
echo $rate->value;
}
}
?>
//je to lepsie zaggi? v xml som zaciatocnik.
-
vivaSlovakia
Guru wannabe
- Príspevky: 2119
- Registrovaný: 29 júl 2006, 10:30