|  |  | 
 |  |  | 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, 'dl'), | 
 |  |  |       'mini-lotto' => array(5, FALSE, 'el'), | 
 |  |  |       'kaskada' => array(12, FALSE, 'ka'), | 
 |  |  | 
 |  |  |       'joker' => array(5, FALSE, 'jk') | 
 |  |  |    ); | 
 |  |  |     | 
 |  |  |    // 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; | 
 |  |  |          } | 
 |  |  | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |        | 
 |  |  |       // 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); | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |     | 
 |  |  |    protected function szukaj_poczatku($tresc, $poczatek = 0) { | 
 |  |  |       return strpos($this->strona, $tresc, $poczatek); | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    protected function szukaj_konca($tresc, $poczatek = 0) { | 
 |  |  |       $pozycja = strpos($this->strona, $tresc, $poczatek); | 
 |  |  | 		 | 
 |  |  |       if($pozycja !== FALSE) { | 
 |  |  |          $pozycja += strlen($tresc); | 
 |  |  |    // 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'; | 
 |  |  |       } | 
 |  |  |        | 
 |  |  |       return $pozycja; | 
 |  |  |       $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]; | 
 |  |  |    } | 
 |  |  |     | 
 |  |  |    function wyniki($gra = 'lotto', $liczba = 100) { | 
 |  |  |    // 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(); | 
 |  |  |       $poczatek = $this->szukaj_konca('<div class="start-wyniki_'.$gra.'">'); | 
 |  |  |       if($poczatek === FALSE) { | 
 |  |  |          throw new Exception('Nie znaleziono wyników dla gry '.$gra.' na stronie.'); | 
 |  |  |       } | 
 |  |  |       $dane = $this->wytnij($this->strona, '<div class="start-wyniki_'.$gra.'">', | 
 |  |  |       '<div class="start-wyniki_', 'Nie znaleziono na stronie wyników dla gry '.$gra); | 
 |  |  |        | 
 |  |  |       for($l = 0; $l < $liczba; $l++) { | 
 |  |  |          $poczatek = $this->szukaj_konca('<div class="wyniki_data">', $poczatek); | 
 |  |  |          if($poczatek === FALSE) { | 
 |  |  |       $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; | 
 |  |  |          } | 
 |  |  |           | 
 |  |  |          $wynik = array(); | 
 |  |  | 			 | 
 |  |  |          $poczatek = $this->szukaj_konca('<strong>', $poczatek); | 
 |  |  |          if($poczatek === FALSE) { | 
 |  |  |             break; | 
 |  |  |          } | 
 |  |  |          $koniec = $this->szukaj_poczatku('</strong>', $poczatek); | 
 |  |  |          $wynik['data'] = substr($this->strona, $poczatek, $koniec-$poczatek); | 
 |  |  |          if($poczatek === FALSE) { | 
 |  |  |             break; | 
 |  |  |          } | 
 |  |  |          $poczatek = $this->szukaj_konca('<strong>', $poczatek); | 
 |  |  |          $koniec = $this->szukaj_poczatku('</strong>', $poczatek); | 
 |  |  |          $wynik['godzina'] = substr($this->strona, $poczatek, $koniec-$poczatek); | 
 |  |  | 			 | 
 |  |  |          $poczatek = $this->szukaj_konca('<div class="glowna_wyniki_'.$gra.'">', $poczatek); | 
 |  |  |          if($poczatek === FALSE) { | 
 |  |  |             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++) { | 
 |  |  |             $poczatek = $this->szukaj_konca('<div class="wynik_'.$gra.'">', $poczatek); | 
 |  |  |             $koniec = $this->szukaj_poczatku('</div>', $poczatek); | 
 |  |  |             $wynik['liczby'][] = substr($this->strona, $poczatek, $koniec-$poczatek); | 
 |  |  |             $wynik['liczby'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'">', | 
 |  |  |             '</div>', NULL, $pozycja); | 
 |  |  |          } | 
 |  |  |           | 
 |  |  |          // Szukamy plusa | 
 |  |  |          if($this->gry[$gra][1]) { | 
 |  |  |             $poczatek = $this->szukaj_konca('<div class="wynik_'.$gra.'_plus">', $poczatek); | 
 |  |  |             $koniec = $this->szukaj_poczatku('</div>', $poczatek); | 
 |  |  |             $wynik['plus'] = substr($this->strona, $poczatek, $koniec-$poczatek); | 
 |  |  |             $wynik['plus'] = $this->wytnij($dane, '<div class="wynik_'.$gra.'_plus">', | 
 |  |  |             '</div>', NULL, $poz_dane); | 
 |  |  |          } | 
 |  |  |           | 
 |  |  |          $wyniki[] = $wynik; |