Jacek Kowalski
2014-06-11 5ab2921256e688e2f005b04bfe08f8c8bb91fd68
commit | author | age
8bd4d9 1 <?php
JK 2 echo STAR.'Pobieranie danych...';
3
4 class lotto {
50d2eb 5     // Zawartość strony http://lotto.pl/wyniki-gier
JK 6     protected $strona = NULL;
7     
8     // Lista gier.
9     protected $gry = array(
9edc68 10         // nazwa => array(ilość liczb, plus?, lottoplus?, skrót)
JK 11         'lotto' => array(6, FALSE, 6, 'dl'),
12         'mini-lotto' => array(5, FALSE, 0, 'el'),
13         'kaskada' => array(12, FALSE, 0, 'ka'),
14         'multi-multi' => array(20, TRUE, 0, 'mm'),
15         'joker' => array(5, FALSE, 0, 'jk')
50d2eb 16     );
JK 17     
18     // Spróbuj pobrać stronę http://lotto.pl/wyniki-gier
19     // do zmiennej $this->strona z użyciem pliku cache.
20     function __construct() {
21         $cache = 'lotto_cache.txt';
22         
23         // Sprawdź, czy da się skorzystać z pliku cache.
24         if( ( !file_exists($cache) AND !is_writable(dirname($cache)) )
25             OR ( file_exists($cache) AND !(is_writable($cache)) ) ) {
26             // Nie, nie da się.
27             $cache = '';
28         }
29         else
30         {
31             // Tak, da się.
32             // Sprawdź, czy dane są aktualne.
33             if(@filemtime($cache)<strtotime('yesterday 22:45') && time()<=strtotime('14:30')) {
34                 $recent = FALSE;
35             }
36             elseif( ( time()>=strtotime('14:30') && @filemtime($cache)<strtotime('14:30') )
37                 OR ( time()>=strtotime('22:45') && @filemtime($cache)<strtotime('22:45') ) ) {
38                 $recent = FALSE;
39             }
40             else
41             {
42                 $recent = TRUE;
43             }
44         }
45         
46         // Dane są nieaktualne, więc pobieramy je ponownie
47         if($cache == '' OR !$recent) {
48             $this->strona = @file_get_contents('http://lotto.pl/wyniki-gier');
49             if(!$this->strona) {
50                 throw new Exception('Nie udało się pobrać wyników.');
51             }
52             
53             // Można zapisać do cache'a...
54             if($cache != '') {
55                 // ...więc zapamiętujemy arkusz.
56                 file_put_contents($cache, $this->strona);
57             }
58         }
59         else
60         {
61             // Dane w cache są aktualne, więc załaduj je.
62             $this->strona = file_get_contents($cache);
63         }
64     }
65     
66     // Znajduje w $gdzie ciągi $od i $do, po czym zwraca
67     // treść znajdującą się pomiędzy tymi wartościami.
68     protected function wytnij(&$gdzie, $od, $do, $blad = NULL, &$pozycja = NULL) {
69         if($blad === NULL) {
70             $blad = 'Nie znaleziono wymaganego elementu';
71         }
72         
73         $start = strpos($gdzie, $od, $pozycja);
74         if($start === FALSE) {
75             throw new Exception($blad);
76         }
77         $start += strlen($od);
78         
79         $stop = strpos($gdzie, $do, $start);
80         if($stop === FALSE) {
81             throw new Exception($blad);
82         }
83         
84         if($pozycja !== NULL) {
85             $pozycja = $stop + strlen($do);
86         }
87         
88         return trim(substr($gdzie, $start, $stop-$start));
89     }
90     
91     // Zwraca wynik gry (domyślnie lotto).
92     function wynik($gra = 'lotto') {
93         $wyniki = $this->wyniki($gra, 1);
94         return $wyniki[0];
95     }
96     
97     // Zwraca $liczba ostatnich wyników gry (domyślnie lotto),
98     // jednak nie więcej niż 5 (tyle jest na stronie Totalizatora).
99     function wyniki($gra = 'lotto', $liczba = 1000) {
100         if(!isset($this->gry[$gra])) {
101             throw new Exception('Podana gra liczbowa nie jest obsługiwana.');
102         }
103         
104         $wyniki = array();
d8d9ec 105         $dane = $this->wytnij($this->strona, '<div class="start-wyniki_'.$gra,
JK 106             '<div class="start-wyniki_', 'Nie znaleziono na stronie wyników dla gry '.$gra);
50d2eb 107         
JK 108         $poz_dane = 0;
109         for($l = 1; $l <= $liczba; $l++) {
d8d9ec 110             $data = $this->wytnij($dane, '<div class="wyniki_data', '</div>',
50d2eb 111                 'Nie znaleziono '.$l.'-ej informacji o losowanu gry '.$gra, $poz_dane);
JK 112             
113             $pozycja = 0;
114             $wynik['data'] = $this->wytnij($data, '<strong>', '</strong>',
115                 'Nie znaleziono '.$l.'-ej daty losowania gry '.$gra, $pozycja);
116             $wynik['godzina'] = $this->wytnij($data, '<strong>', '</strong>',
117                 'Nie znaleziono '.$l.'-ej godziny losowania gry '.$gra, $pozycja);
118             
119             try {
d8d9ec 120                 $liczby = $this->wytnij($dane, '<div class="glowna_wyniki_'.$gra, "\t".'</div>',
JK 121                     'Nie znaleziono na stronie '.$l.'-ch wyników dla gry '.$gra, $poz_dane);
50d2eb 122             }
JK 123             catch(Exception $e) {
124                 break;
125             }
126             
127             // Pobierz kolejne liczy zawarte pomiędzy <div class="wynik_NAZWAGRY"> a </div>
128             $wynik['liczby'] = array();
129             $pozycja = 0;
130             for($i = 0; $i < $this->gry[$gra][0]; $i++) {
131                 $wynik['liczby'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'">',
d8d9ec 132                     '</div>', NULL, $pozycja);
50d2eb 133             }
JK 134             
135             // Szukamy plusa
136             if($this->gry[$gra][1]) {
137                 $wynik['plus'] = $this->wytnij($dane, '<div class="wynik_'.$gra.'_plus">',
d8d9ec 138                     '</div>', NULL, $poz_dane);
JK 139             }
140             
141             // Szukamy lottoplusa
142             if($this->gry[$gra][2] > 0) {
143                 try {
144                     $liczby = $this->wytnij($dane, '<div class="glowna_wyniki_'.$gra.'plus">', "\t".'</div>',
145                         'Nie znaleziono na stronie '.$l.'-ch wyników dla gry '.$gra.'plus', $poz_dane);
146                 }
147                 catch(Exception $e) {
148                     continue;
149                 }
150                 
151                 $pozycja = 0;
152                 $wynik['plus'] = array();
153                 for($i = 0; $i < $this->gry[$gra][2]; $i++) {
154                     $wynik['plus'][] = $this->wytnij($liczby, '<div class="wynik_'.$gra.'plus">',
155                         '</div>', 'Nie znaleziono wyników losowania '.$gra.'plus', $pozycja);
156                 }
50d2eb 157             }
JK 158             
159             $wyniki[] = $wynik;
160         }
161         
162         return $wyniki;
163     }
164     
165     function pobierz() {
166         foreach($this->gry as $gra => $data) {
167             echo STAR.'Wyniki gry '.$gra.'...';
a29a93 168             if($gra == 'multi-multi') {
50d2eb 169                 $wyniki = $this->wyniki($gra, 2);
JK 170                 $wynik = $wyniki[0];
6e7958 171                 
JK 172                 $godzina = substr($wynik['godzina'], 0, 2);
173                 if($godzina == '21') {
174                     $godzina = '22';
175                 }
176                 $skrot = $data[3].$godzina;
177                 
50d2eb 178                 $last_data = @file_get_contents('./last_'.$skrot.'.txt');
JK 179                 if($last_data != $wynik['data']) {
180                     $output = array();
181                     $output['data'] = $wynik['data'];
182                     for($i = 0; $i < $data[0]; $i++) {
183                         $output[$i+1] = $wynik['liczby'][$i];
184                     }
185                     if($data[1]) {
186                         $output['plus'] = $wynik['plus'];
187                     }
188                     file_put_contents('./last_'.$skrot.'.txt', $output['data']);
189                     file_put_contents('./'.$skrot.'.txt', serialize($output));
190                     file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output));
191                 }
192                 
193                 $wynik = $wyniki[1];
6e7958 194                 
JK 195                 $godzina = substr($wynik['godzina'], 0, 2);
196                 if($godzina == '21') {
197                     $godzina = '22';
198                 }
199                 $skrot = $data[3].$godzina;
200                 
50d2eb 201                 $last_data = @file_get_contents('./last_'.$skrot.'.txt');
JK 202                 if($last_data != $wynik['data']) {
203                     $output = array();
204                     $output['data'] = $wynik['data'];
205                     for($i = 0; $i < $data[0]; $i++) {
206                         $output[$i+1] = $wynik['liczby'][$i];
207                     }
208                     if($data[1]) {
209                         $output['plus'] = $wynik['plus'];
210                     }
211                     file_put_contents('./last_'.$skrot.'.txt', $output['data']);
212                     file_put_contents('./'.$skrot.'.txt', serialize($output));
213                     file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output));
214                 }
215             }
216             else
217             {
218                 $wynik = $this->wynik($gra);
9edc68 219                 $skrot = $data[3];
6e7958 220                 
50d2eb 221                 $last_data = @file_get_contents('./last_'.$skrot.'.txt');
JK 222                 if($last_data != $wynik['data']) {
223                     $output = array();
224                     $output['data'] = $wynik['data'];
225                     for($i = 0; $i < $data[0]; $i++) {
226                         $output[$i+1] = $wynik['liczby'][$i];
227                     }
228                     if($data[1]) {
229                         $output['plus'] = $wynik['plus'];
230                     }
d8d9ec 231                     if(($data[2] > 0) && isset($wynik['plus'])) {
JK 232                         $output['plus'] = $wynik['plus'];
233                     }
50d2eb 234                     file_put_contents('./last_'.$skrot.'.txt', $output['data']);
JK 235                     file_put_contents('./'.$skrot.'.txt', serialize($output));
236                     file_put_contents('./archiwum/'.$skrot.'_'.date('j.m.Y', strtotime($output['data'])).'.txt', serialize($output));
237                 }
238             }
239             echo OK;
240         }
241     }
8bd4d9 242 }
JK 243
244 $lotto = new lotto();
245 echo OK;
246
247 $lotto->pobierz();
a29a93 248 ?>