script na zistenie euro kurzu

Programovacie jazyky, rady, poradňa...
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

script na zistenie euro kurzu

Príspevok od používateľa vivaSlovakia »

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 :wink:
hojko
Site Admin
Site Admin
Používateľov profilový obrázok
Príspevky: 38515
Registrovaný: 24 apr 2004, 18:29
Bydlisko: Európa
Kontaktovať používateľa:

Príspevok od používateľa hojko »

Jednoduchy PHP parser by vybral kurz eura napr. zo stranky nbs.sk, ten by sa ulozil do premenej, do MySQL ci do suboru a ten by som pouzival. Nacitavanie by sa mohlo riesit cez cron 1x za den.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

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
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ja by som asi skôr použil formát DOC, alebo SDF (sú to jednoduché textové súbory).
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

este som nikdy nerozparsovaval xml... potrebujem rozparsovat to xml co sem posal gwixt... nenapisal by mi ten script niekto ?

potrebujem dostat kurz eura

K+
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Prečo nepoužiješ radšej jeden z tých textových súborov?

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 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ý).
zaggi
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 314
Registrovaný: 04 feb 2007, 19:32

Príspevok od používateľa zaggi »

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
Expert
Príspevky: 178
Registrovaný: 02 feb 2007, 19:46

Príspevok od používateľa Ing. Gandalf »

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;
    }
}
?>
Daj to tam kde chces zobrazit cenu 1 eura. Vyzaduje php5 a povolene simplexml(myslim, ze defaultne je povolene).

//je to lepsie zaggi? v xml som zaciatocnik.
zaggi
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 314
Registrovaný: 04 feb 2007, 19:32

Príspevok od používateľa zaggi »

rate[6]->value; ... neviem ci by som sa spoliehal na to ze sa poradie krajin nezmeni ...
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

pouzil som zaggiho riesenie.. dakujem, je to fajn, funguje

kazdemu ide K+ :)
Napísať odpoveď