| | |
| | | echo STAR.'Pobieranie danych...'; |
| | | |
| | | class lotto { |
| | | // Zawartość strony http://lotto.pl/wyniki-gier |
| | | protected $strona = NULL; |
| | | |
| | | // Lista gier. |
| | | protected $gry = array( |
| | | // nazwa => array(ilość liczb, plus?) |
| | | 'lotto' => array(6, FALSE), |
| | | 'mini-lotto' => array(5, FALSE), |
| | | 'kaskada' => array(12, FALSE), |
| | | 'multi-multi' => array(20, TRUE), |
| | | 'joker' => array(5, FALSE) |
| | | ); |
| | | |
| | | // 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; |
| | | } |
| | | } |
| | | |
| | | // Dane są nieaktualne, więc pobieramy je ponownie |
| | | if($cache == '' OR !$recent) { |
| | | $this->strona = @file_get_contents('http://lotto.pl/wyniki-gier'); |
| | | if(!$this->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, $this->strona); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // Dane w cache są aktualne, więc załaduj je. |
| | | $this->strona = file_get_contents($cache); |
| | | } |
| | | } |
| | | |
| | | // Znajduje w $gdzie ciągi $od i $do, po czym zwraca |
| | | // treść znajdującą się pomiędzy tymi wartościami. |
| | | protected function wytnij(&$gdzie, $od, $do, $blad = NULL, &$pozycja = NULL) { |
| | | if($blad === NULL) { |
| | | $blad = 'Nie znaleziono wymaganego elementu'; |
| | | } |
| | | |
| | | $start = strpos($gdzie, $od, $pozycja); |
| | | if($start === FALSE) { |
| | | throw new Exception($blad); |
| | | } |
| | | $start += strlen($od); |
| | | |
| | | $stop = strpos($gdzie, $do, $start); |
| | | if($stop === FALSE) { |
| | | throw new Exception($blad); |
| | | } |
| | | |
| | | if($pozycja !== NULL) { |
| | | $pozycja = $stop + strlen($do); |
| | | } |
| | | |
| | | return trim(substr($gdzie, $start, $stop-$start)); |
| | | } |
| | | |
| | | // Zwraca wynik gry (domyślnie lotto). |
| | | function wynik($gra = 'lotto') { |
| | | $wyniki = $this->wyniki($gra, 1); |
| | | 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', $liczba = 1000) { |
| | | if(!isset($this->gry[$gra])) { |
| | | throw new Exception('Podana gra liczbowa nie jest obsługiwana.'); |
| | | } |
| | | |
| | | $wyniki = array(); |
| | | $dane = $this->wytnij($this->strona, '<div class="start-wyniki_'.$gra.'">', |
| | | '<div class="start-wyniki_', 'Nie znaleziono na stronie wyników dla gry '.$gra); |
| | | |
| | | $poz_dane = 0; |
| | | for($l = 1; $l <= $liczba; $l++) { |
| | | $data = $this->wytnij($dane, '<div class="wyniki_data">', '</div>', |
| | | 'Nie znaleziono '.$l.'-ej informacji o losowanu gry '.$gra, $poz_dane); |
| | | |
| | | $pozycja = 0; |
| | | $wynik['data'] = $this->wytnij($data, '<strong>', '</strong>', |
| | | 'Nie znaleziono '.$l.'-ej daty losowania gry '.$gra, $pozycja); |
| | | $wynik['godzina'] = $this->wytnij($data, '<strong>', '</strong>', |
| | | 'Nie znaleziono '.$l.'-ej godziny losowania gry '.$gra, $pozycja); |
| | | |
| | | try { |
| | | $liczby = $this->wytnij($dane, '<div class="glowna_wyniki_'.$gra.'">', "\t".'</div>', |
| | | 'Nie znaleziono na stronie '.$l.'-ch wyników dla gry '.$gra, $poz_dane); |
| | | } |
| | | catch(Exception $e) { |
| | | break; |
| | | } |
| | | |
| | | // Pobierz kolejne liczy zawarte pomiędzy <div class="wynik_NAZWAGRY"> a </div> |
| | | $wynik['liczby'] = array(); |
| | | $pozycja = 0; |
| | | for($i = 0; $i < $this->gry[$gra][0]; $i++) { |
| | | $wynik['liczby'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'">', |
| | | '</div>', NULL, $pozycja); |
| | | } |
| | | |
| | | // Szukamy plusa |
| | | if($this->gry[$gra][1]) { |
| | | $wynik['plus'] = $this->wytnij($dane, '<div class="wynik_'.$gra.'_plus">', |
| | | '</div>', NULL, $poz_dane); |
| | | } |
| | | |
| | | $wyniki[] = $wynik; |
| | | } |
| | | |
| | | return $wyniki; |
| | | } |
| | | // Zawartość strony http://lotto.pl/wyniki-gier |
| | | protected $strona = NULL; |
| | | |
| | | // Lista gier. |
| | | protected $gry = array( |
| | | // nazwa => array(ilość liczb, plus?, lottoplus?) |
| | | 'lotto' => array(6, FALSE, 6), |
| | | 'mini-lotto' => array(5, FALSE, 0), |
| | | 'kaskada' => array(12, FALSE, 0), |
| | | 'multi-multi' => array(20, TRUE, 0), |
| | | 'joker' => array(5, FALSE, 0) |
| | | ); |
| | | |
| | | // 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; |
| | | } |
| | | } |
| | | |
| | | // Dane są nieaktualne, więc pobieramy je ponownie |
| | | if($cache == '' OR !$recent) { |
| | | $this->strona = @file_get_contents('http://lotto.pl/wyniki-gier'); |
| | | if(!$this->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, $this->strona); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // Dane w cache są aktualne, więc załaduj je. |
| | | $this->strona = file_get_contents($cache); |
| | | } |
| | | } |
| | | |
| | | // Znajduje w $gdzie ciągi $od i $do, po czym zwraca |
| | | // treść znajdującą się pomiędzy tymi wartościami. |
| | | protected function wytnij(&$gdzie, $od, $do, $blad = NULL, &$pozycja = NULL) { |
| | | if($blad === NULL) { |
| | | $blad = 'Nie znaleziono wymaganego elementu'; |
| | | } |
| | | |
| | | $start = strpos($gdzie, $od, $pozycja); |
| | | if($start === FALSE) { |
| | | throw new Exception($blad); |
| | | } |
| | | $start += strlen($od); |
| | | |
| | | $stop = strpos($gdzie, $do, $start); |
| | | if($stop === FALSE) { |
| | | throw new Exception($blad); |
| | | } |
| | | |
| | | if($pozycja !== NULL) { |
| | | $pozycja = $stop + strlen($do); |
| | | } |
| | | |
| | | return trim(substr($gdzie, $start, $stop-$start)); |
| | | } |
| | | |
| | | // Zwraca wynik gry (domyślnie lotto). |
| | | function wynik($gra = 'lotto') { |
| | | $wyniki = $this->wyniki($gra, 1); |
| | | 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', $liczba = 1000) { |
| | | if(!isset($this->gry[$gra])) { |
| | | throw new Exception('Podana gra liczbowa nie jest obsługiwana.'); |
| | | } |
| | | |
| | | $wyniki = array(); |
| | | $dane = $this->wytnij($this->strona, '<div class="start-wyniki_'.$gra, |
| | | '<div class="start-wyniki_', 'Nie znaleziono na stronie wyników dla gry '.$gra); |
| | | |
| | | $poz_dane = 0; |
| | | for($l = 1; $l <= $liczba; $l++) { |
| | | $data = $this->wytnij($dane, '<div class="wyniki_data', '</div>', |
| | | 'Nie znaleziono '.$l.'-ej informacji o losowanu gry '.$gra, $poz_dane); |
| | | |
| | | $pozycja = 0; |
| | | $wynik['data'] = $this->wytnij($data, '<strong>', '</strong>', |
| | | 'Nie znaleziono '.$l.'-ej daty losowania gry '.$gra, $pozycja); |
| | | $wynik['godzina'] = $this->wytnij($data, '<strong>', '</strong>', |
| | | 'Nie znaleziono '.$l.'-ej godziny losowania gry '.$gra, $pozycja); |
| | | |
| | | try { |
| | | $liczby = $this->wytnij($dane, '<div class="glowna_wyniki_'.$gra, "\t".'</div>', |
| | | 'Nie znaleziono na stronie '.$l.'-ch wyników dla gry '.$gra, $poz_dane); |
| | | } |
| | | catch(Exception $e) { |
| | | break; |
| | | } |
| | | |
| | | // Pobierz kolejne liczy zawarte pomiędzy <div class="wynik_NAZWAGRY"> a </div> |
| | | $wynik['liczby'] = array(); |
| | | $pozycja = 0; |
| | | for($i = 0; $i < $this->gry[$gra][0]; $i++) { |
| | | $wynik['liczby'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'">', |
| | | '</div>', NULL, $pozycja); |
| | | } |
| | | |
| | | // Szukamy plusa |
| | | if($this->gry[$gra][1]) { |
| | | $wynik['plus'] = $this->wytnij($dane, '<div class="wynik_'.$gra.'_plus">', |
| | | '</div>', NULL, $poz_dane); |
| | | } |
| | | |
| | | // Szukamy lottoplusa |
| | | if($this->gry[$gra][2] > 0) { |
| | | try { |
| | | $liczby = $this->wytnij($dane, '<div class="glowna_wyniki_'.$gra.'plus">', "\t".'</div>', |
| | | 'Nie znaleziono na stronie '.$l.'-ch wyników dla gry '.$gra.'plus', $poz_dane); |
| | | } |
| | | catch(Exception $e) { |
| | | continue; |
| | | } |
| | | |
| | | $pozycja = 0; |
| | | $wynik['plus'] = array(); |
| | | for($i = 0; $i < $this->gry[$gra][2]; $i++) { |
| | | $wynik['plus'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'plus">', |
| | | '</div>', 'Nie znaleziono wyników losowania '.$gra.'plus', $pozycja); |
| | | } |
| | | } |
| | | |
| | | $wyniki[] = $wynik; |
| | | } |
| | | |
| | | return $wyniki; |
| | | } |
| | | |
| | | function pobierz() { |
| | | foreach($this->gry as $gra => $data) { |
| | | echo STAR.'Wyniki gry '.$gra.'...'; |
| | | if($gra == 'multi-multi') { |
| | | $wyniki = $this->wyniki($gra, 2); |
| | | $wynik = $wyniki[0]; |
| | | $skrot = $data[2].substr($wynik['godzina'], 0, 2); |
| | | $last_data = @file_get_contents('./last_'.$skrot.'.txt'); |
| | | if($last_data != $wynik['data']) { |
| | | $output = array(); |
| | | $output['data'] = $wynik['data']; |
| | | for($i = 0; $i < $data[0]; $i++) { |
| | | $output[$i+1] = $wynik['liczby'][$i]; |
| | | } |
| | | if($data[1]) { |
| | | $output['plus'] = $wynik['plus']; |
| | | } |
| | | file_put_contents('./last_'.$skrot.'.txt', $output['data']); |
| | | file_put_contents('./'.$skrot.'.txt', serialize($output)); |
| | | file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output)); |
| | | } |
| | | |
| | | $wynik = $wyniki[1]; |
| | | $skrot = $data[2].substr($wynik['godzina'], 0, 2); |
| | | $last_data = @file_get_contents('./last_'.$skrot.'.txt'); |
| | | if($last_data != $wynik['data']) { |
| | | $output = array(); |
| | | $output['data'] = $wynik['data']; |
| | | for($i = 0; $i < $data[0]; $i++) { |
| | | $output[$i+1] = $wynik['liczby'][$i]; |
| | | } |
| | | if($data[1]) { |
| | | $output['plus'] = $wynik['plus']; |
| | | } |
| | | file_put_contents('./last_'.$skrot.'.txt', $output['data']); |
| | | file_put_contents('./'.$skrot.'.txt', serialize($output)); |
| | | file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | $wynik = $this->wynik($gra); |
| | | $skrot = $data[2]; |
| | | $last_data = @file_get_contents('./last_'.$skrot.'.txt'); |
| | | if($last_data != $wynik['data']) { |
| | | $output = array(); |
| | | $output['data'] = $wynik['data']; |
| | | for($i = 0; $i < $data[0]; $i++) { |
| | | $output[$i+1] = $wynik['liczby'][$i]; |
| | | } |
| | | if($data[1]) { |
| | | $output['plus'] = $wynik['plus']; |
| | | } |
| | | if(($data[2] > 0) && isset($wynik['plus'])) { |
| | | $output['plus'] = $wynik['plus']; |
| | | } |
| | | file_put_contents('./last_'.$skrot.'.txt', $output['data']); |
| | | file_put_contents('./'.$skrot.'.txt', serialize($output)); |
| | | file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output)); |
| | | } |
| | | } |
| | | echo OK; |
| | | } |
| | | } |
| | | } |
| | | |
| | | $lotto = new lotto(); |