<?php
|
echo STAR.'Pobieranie danych...';
|
|
class lotto {
|
// Zawartość strony http://lotto.pl/wyniki-gier
|
// jako obiekt DOMDocument
|
protected $strona = NULL;
|
// Powiązany DOMXPath
|
protected $xpath = NULL;
|
|
// Specjalne zachowania dla gier
|
const NONE = 0;
|
const PLUS = 1;
|
const LOTTOPLUS = 2;
|
const EKSTRA = 3;
|
|
// Lista gier.
|
protected $gry = array(
|
// nazwa
|
'lotto', 'mini-lotto',
|
'kaskada', 'multi-multi',
|
'joker', 'ekstra-pensja'
|
);
|
|
// Spróbuj pobrać stronę http://lotto.pl/wyniki-gier
|
// do zmiennej $this->strona z użyciem pliku cache.
|
function __construct() {
|
$cache = 'lotto_cache.txt';
|
|
// Sprawdź, czy da się skorzystać z pliku cache.
|
if( ( !file_exists($cache) AND !is_writable(dirname($cache)) )
|
OR ( file_exists($cache) AND !(is_writable($cache)) ) ) {
|
// Nie, nie da się.
|
$cache = '';
|
}
|
else
|
{
|
// Tak, da się.
|
// Sprawdź, czy dane są aktualne.
|
if(@filemtime($cache)<strtotime('yesterday 22:45') && time()<=strtotime('14:30')) {
|
$recent = FALSE;
|
}
|
elseif( ( time()>=strtotime('14:30') && @filemtime($cache)<strtotime('14:30') )
|
OR ( time()>=strtotime('22:45') && @filemtime($cache)<strtotime('22:45') ) ) {
|
$recent = FALSE;
|
}
|
else
|
{
|
$recent = TRUE;
|
}
|
}
|
|
$strona = '';
|
$this->strona = new DOMDocument();
|
|
if($cache == '' OR !$recent) {
|
// Dane są nieaktualne, więc pobieramy je ponownie
|
$strona = @file_get_contents('http://lotto.pl/wyniki-gier');
|
if(!$strona) {
|
throw new Exception('Nie udało się pobrać wyników.');
|
}
|
|
// Można zapisać do cache'a...
|
if($cache != '') {
|
// ...więc zapamiętujemy arkusz.
|
file_put_contents($cache, $strona);
|
}
|
|
@$this->strona->loadHtml($strona);
|
}
|
else
|
{
|
// Dane w cache są aktualne, więc załaduj je.
|
@$this->strona->loadHtmlFile($cache);
|
}
|
|
$this->xpath = new DOMXPath($this->strona);
|
}
|
|
// Znajduje odpowiedni element w pliku HTML lub zwraca błąd.
|
protected function wytnij($zapytanie, $gdzie = NULL, $blad = 'Brak danych') {
|
$rezultat = $this->xpath->query($zapytanie, $gdzie);
|
if(!$rezultat OR $rezultat->length <= 0) {
|
throw new Exception($blad);
|
}
|
return $rezultat;
|
}
|
|
// Zwraca wynik gry (domyślnie lotto).
|
function wynik($gra = 'lotto') {
|
$wyniki = $this->wyniki($gra, 1);
|
if(!isset($wyniki[0])) {
|
throw new Exception('Brak wyników dla gry.');
|
}
|
return $wyniki[0];
|
}
|
|
// Zwraca $liczba ostatnich wyników gry (domyślnie lotto),
|
// jednak nie więcej niż 5 (tyle jest na stronie Totalizatora).
|
function wyniki($gra = 'lotto', $zwroc = 1000) {
|
if(!in_array($gra, $this->gry)) {
|
throw new Exception('Podana gra liczbowa nie jest obsługiwana.');
|
}
|
|
$rezultaty = array();
|
|
$dane = $this->wytnij('//div[@class="start-wyniki_'.$gra.'"]', NULL,
|
'Nie znaleziono na stronie wyników dla gry '.$gra);
|
$dane = $dane->item(0);
|
|
|
$daty = $this->wytnij('div[contains(concat(" ", @class, " "), " wyniki_data ")]', $dane,
|
'Nie znaleziono informacji o losowanu gry '.$gra);
|
$wyniki = $this->wytnij('div[contains(concat(" ", @class, " "), " glowna_wyniki_'.$gra.' ")]', $dane,
|
'Nie znaleziono wyników losowania gry '.$gra);
|
|
$plusy = NULL;
|
try {
|
$plusy = $this->wytnij('div[@class="wynik_'.$gra.'_plus"]', $dane);
|
} catch(Exception $e) {}
|
|
$lottoplusy = NULL;
|
try {
|
$lottoplusy = $this->wytnij('//div[@class="glowna_wyniki_'.$gra.'plus"]', $dane);
|
} catch(Exception $e) {}
|
|
for($l = 0; $l < $daty->length && $l < $wyniki->length && $l < $zwroc; $l++) {
|
$rezultat = array();
|
|
// Znajdź $l-tą datę losowania i jego wynik
|
$data = $daty->item($l);
|
$wynik = $wyniki->item($l);
|
|
try {
|
// Znajdź datę i godzinę
|
$data = $this->wytnij('strong', $data, 'Nie znaleziono '.$l.' daty losowania gry '.$gra);
|
$rezultat['data'] = trim($data->item(0)->textContent);
|
if($data->length > 1) {
|
$rezultat['godzina'] = trim($data->item(1)->textContent);
|
}
|
|
// Znajdź poszczególne liczby w wyniku
|
$liczby = $this->wytnij('div[@class="wynik_'.$gra.'"]', $wynik,
|
'Nie znaleziono liczb w '.$l.' losowaniu gry '.$gra);
|
$rezultat['liczby'] = array();
|
foreach($liczby as $liczba) {
|
$rezultat['liczby'][] = trim($liczba->textContent);
|
}
|
} catch(Exception $e) {
|
break;
|
}
|
|
try {
|
// Szukamy plusa
|
if($plusy && $plusy->length > $l) {
|
$rezultat['plus'] = trim($plusy->item($l)->textContent);
|
}
|
} catch(Exception $e) {}
|
|
try {
|
// Szukamy ekstra liczby
|
$ekstra = $this->wytnij('div[@class="wynik_'.strtr($gra, '-', '_').'"]', $wynik,
|
'Nie znaleziono ekstra w '.$l.' losowaniu gry '.$gra);
|
$rezultat['ekstra'] = trim($ekstra->item(0)->textContent);
|
} catch(Exception $e) {}
|
|
try {
|
// Szukamy lottoplusa
|
if($lottoplusy && $lottoplusy->length > $l) {
|
$liczby = $this->wytnij('div[@class="wynik_'.$gra.'plus"]', $lottoplusy->item($l),
|
'Nie znaleziono liczb w '.$l.' losowaniu gry '.$gra.'plus');
|
$rezultat['plus'] = array();
|
foreach($liczby as $liczba) {
|
$rezultat['plus'][] = trim($liczba->textContent);
|
}
|
}
|
} catch(Exception $e) {}
|
|
$rezultaty[] = $rezultat;
|
}
|
|
return $rezultaty;
|
}
|
|
protected $skroty = array(
|
'lotto' => 'dl', 'mini-lotto' => 'el',
|
'kaskada' => 'ka', 'multi-multi' => 'mm',
|
'joker' => 'jk', 'ekstra-pensja' => 'ep'
|
);
|
|
function pobierz_jeden($skrot, $wynik) {
|
$last_data = @file_get_contents('./last_'.$skrot.'.txt');
|
if($last_data != $wynik['data']) {
|
foreach($wynik['liczby'] as $i => $liczba) {
|
$wynik[$i+1] = $liczba;
|
}
|
file_put_contents('./last_'.$skrot.'.txt', $wynik['data']);
|
file_put_contents('./'.$skrot.'.txt', serialize($wynik));
|
file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($wynik['data'])).'.txt', serialize($wynik));
|
echo OK;
|
} else {
|
echo NOT;
|
}
|
}
|
|
function pobierz() {
|
foreach($this->gry as $gra) {
|
echo STAR.'Wyniki gry '.$gra.'...';
|
if($gra == 'multi-multi') {
|
echo "\n";
|
$wyniki = $this->wyniki($gra, 2);
|
foreach($wyniki as $wynik) {
|
$godzina = substr($wynik['godzina'], 0, 2);
|
echo ' '.STAR.'godzina '.$godzina.'...';
|
if($godzina == '21') {
|
$godzina = '22';
|
}
|
$skrot = $this->skroty[$gra].$godzina;
|
|
$this->pobierz_jeden($skrot, $wynik);
|
}
|
} else {
|
$this->pobierz_jeden($this->skroty[$gra], $this->wynik($gra));
|
}
|
}
|
}
|
}
|
|
$lotto = new lotto();
|
echo OK;
|
|
$lotto->pobierz();
|
?>
|