Wtorek, 22 września 2020 • 266 dzień roku • Imieniny: Maurycego, Tomasza, Joachima Kontakt

Jak przy pomocy PHP automatycznie pobierać aktualne kursy średnie NBP?

Skrypt zamieszczony w poprzednim artykule umożliwiał pobranie dowolnego pliku z kursami średnimi walut NBP, wymagał jednak ręcznego wpisania nazwy szukanego pliku. W prezentowanej poniżej wersji skryptu każdorazowo pobierane są wyłącznie aktualne kursy średnie, zaś nazwa pliku z bieżącymi kursami aktualizowana jest bez udziału użytkownika. Do poprawnego działania skrypt wymaga "includowania" dwóch klas: cURL.class (obsługa cURL'a) i dates.class, która oblicza numer bieżącego pliku xml i datę ostatniego notowania. W celu pełnej automatyzacji należy uruchamiać skrypt jako zadanie crona.

Pobierz plik

include 'dates.class.php';
include 'cURL.class.php';

class ksNBP {

    private $useragent;

    public function __construct() {
    	$this->useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13';
    }

    function fileName() {	
	$d = dates::lastBDay(date('Y-m-d'));
	$d = date('ymd', strtotime($d));
	$fname = 'a'.sprintf('%03d', dates::countBDays_nbp()).'z'.$d.'.xml';	
	return $fname;
    }
	
    function processUrl() {
	// adres pliku xml
	$fname = $this->fileName();
	$url = 'http://www.nbp.pl/kursy/xml/'.$fname;
	$cl = new cURL($url, $this->useragent);
	echo 'url: '.$url.' '.'status: '.$cl->status;
	// url status
	if($cl->status == 200) {
	    // pobierz plik xml
	    $res = $cl->getContents();
	    $contents = $res['contents'];
	    // zapisz na dysku
	    file_put_contents($fname, $contents);
	}
    }

    function updateKsnbp() {
	$fname = $this->fileName();
	// sprawdź czy aktualny plik już istnieje 
	if( file_exists($fname) ) {
	    echo 'Plik '.$fname.' już istnieje!';
	} else {
	    $this->processUrl();
	}
    }

} // koniec definicji klasy

$ksnbp = new ksNBP();
$ksnbp->updateKsnbp();