From f93f5587373b27c696d55890eca439b6d22b5f6e Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Mon, 17 Sep 2012 09:53:42 +0000
Subject: [PATCH] Poprawa błędnego warunku w zapytaniu SQL (zmienna=NULL na zmienna IS NULL)

---
 data/lotto/pobierz.php |  365 ++++++++++++++++++++++++++++++++--------------------
 1 files changed, 224 insertions(+), 141 deletions(-)

diff --git a/data/lotto/pobierz.php b/data/lotto/pobierz.php
index cf8aa83..3130d07 100644
--- a/data/lotto/pobierz.php
+++ b/data/lotto/pobierz.php
@@ -2,147 +2,230 @@
 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();

--
Gitblit v1.9.1