From 9f47c0fd4f94f45ce02c8c67ae59f5fc74f8ad9e Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Sat, 13 Feb 2016 01:05:20 +0000
Subject: [PATCH] [mod_pogoda] Poprawka błędnego wyświetlania danych w komendzie miasto

---
 modules/70_kino/handler.php |  121 +++++++++++++++++++++-------------------
 1 files changed, 63 insertions(+), 58 deletions(-)

diff --git a/modules/70_kino/handler.php b/modules/70_kino/handler.php
index b22ddf9..af9e6eb 100644
--- a/modules/70_kino/handler.php
+++ b/modules/70_kino/handler.php
@@ -19,77 +19,70 @@
 	}
 	
 	function getMiasta() {
-		$xml = $this->cache('http://film.interia.pl/kino/repertuar');
+		$xml = $this->cache('http://film.interia.pl/repertuar-kin');
 		if(!$xml) return FALSE;
 		
 		$xpath = new DOMXPath($xml);
-		$dane = $xpath->query('//div[@id=\'cities\']//a');
+		$dane = $xpath->query('//a[contains(@class, "showtimes-city")]');
 		$return = array();
 		
 		foreach($dane as $miasto) {
 			$href = $miasto->getAttribute('href');
 			$data = trim($miasto->textContent);
-			$return[$data] = substr($href, strpos($href, ',')+1);
+			$return[$data] = substr($href, strrpos($href, ',')+1);
 		}
 		
 		return $return;
 	}
 	
 	function getKina($miasto, $kiedy='') {
-		$xml = $this->cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''));
+		$xml = $this->cache('http://film.interia.pl/repertuar-kin/miasto-a,cId,'.$miasto.($kiedy ? ',when,'.$kiedy : ''));
 		if(!$xml) return FALSE;
 		
 		$xpath = new DOMXPath($xml);
-		$dane = $xpath->query('//div[@id=\'mainContent\']/table//th[@class=\'theatre\']/a[1]');
+		$dane = $xpath->query('//div[@id="content"]//div[@class="showtimes-accordion-heading"]//p[@class="showtimes-cinema-name"]');
 		$return = array();
 		
-		foreach($dane as $kino) {
+		foreach($dane as $id => $kino) {
 			$name = trim($kino->textContent);
-			$return[$name] = $kino->getAttribute('href');
+			$return[$name] = $id;
 		}
 		
 		return $return;
 	}
 	
 	function getKino($miasto, $kino, $kiedy='') {
-		$xml = $this->cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''));
+		$xml = $this->cache('http://film.interia.pl/repertuar-kin/miasto-a,cId,'.$miasto.($kiedy ? ',when,'.$kiedy : ''));
 		if(!$xml) return FALSE;
 		
 		$xpath = new DOMXPath($xml);
-		$dane = $xpath->query('//div[@id=\'mainContent\']/table//a[@href=\''.$kino.'\']/../../following-sibling::tr');
+		$dane = $xpath->query('//div[@id=\'content\']//div[@class=\'showtimes-accordion-body\']');
 		$return = array();
 		
+		$dane = $xpath->query('.//div[@class=\'showtimes-cinema-movie\']', $dane[$kino]);
+		
 		foreach($dane as $film) {
-			if(!$film->firstChild) {
-				break;
-			}
-			if($film->firstChild->nodeName == 'th') {
-				break;
-			}
-			if($film->firstChild->nodeName != 'td') {
-				break;
-			}
+			$title = $xpath->query('.//span[@class=\'showtimes-cinema-movie-title\']', $film);
+			$hours = $xpath->query('.//span[@data-time]', $film);
 			
-			$tds = $xpath->query('td', $film);
-			$name = $xpath->query('a[1]', $tds->item(0));
-			
-			$more = array();
-			$more_desc = array(
-				's3d-movie' => '3D',
-				'dubbing-movie' => 'dubbing',
-			);
-			$more_xml = $xpath->query('span[@class=\'reper\']/div', $tds->item(0));
-			foreach($more_xml as $more_x) {
-				$more_x = $more_x->getAttribute('class');
-				if(isset($more_desc[$more_x])) {
-					$more[] = $more_desc[$more_x];
+			$hours_ret = array();
+			foreach($hours as $hour) {
+				$sub = array();
+				if($xpath->query('.//span[@showtimes-cinema-movie-dubbing]', $hour)) {
+					$sub[] = 'DUB';
 				}
+				if($xpath->query('.//span[@showtimes-cinema-movie-3d]', $hour)) {
+					$sub[] = '3D';
+				}
+				
+				$hour = $hour->getAttribute('data-time');
+				
+				$hours_ret[] = array(substr($hour, 0, -2).':'.substr($hour, -2), $sub);
 			}
 			
 			$return[] = array(
-				trim($tds->item(1)->textContent),
-				trim($name->item(0)->textContent),
-				implode(', ', $more),
+				trim($title->item(0)->textContent),
+				$hours_ret
 			);
 		}
 		
@@ -135,7 +128,6 @@
 			MIASTO
 		*/
 		$miasta = self::getMiasta();
-		$found = FALSE;
 		$miasto_num = $miasto_nazw = '';
 		
 		if(!$miasta) {
@@ -145,7 +137,6 @@
 		foreach($miasta as $miasto => $numer) {
 			$szukaj = funcs::utfToAscii($miasto);
 			if(($pos = strpos($arg, $szukaj)) !== FALSE) {
-				$found = TRUE;
 				$miasto_nazw = htmlspecialchars($miasto);
 				$miasto_num = $numer;
 				
@@ -154,11 +145,10 @@
 			}
 		}
 		
-		if($found===FALSE && !empty($arg2)) {
+		if($miasto_num === '' && !empty($arg2)) {
 			foreach($miasta as $miasto => $numer) {
 				$szukaj = funcs::utfToAscii($miasto);
 				if(($pos = strpos($arg2, $szukaj)) !== FALSE) {
-					$found = TRUE;
 					$miasto_nazw = htmlspecialchars($miasto);
 					$miasto_num = $numer;
 					
@@ -168,8 +158,9 @@
 			}
 		}
 		
-		if($found === FALSE) {
+		if($miasto_num === '') {
 			$txt = 'Wybrane miasto nie został odnalezione. Obsługiwane miejscowości:';
+			$miasto = 'Warszawa';
 			foreach($miasta as $miasto => $num) {
 				$txt .= '<br />'."\n".htmlspecialchars($miasto);
 			}
@@ -188,14 +179,19 @@
 		$data = array(
 			'dzis' => '',
 			'teraz' => '',
-			'jutro' => '1',
-			'pojutrze' => '2',
-			'po jutrze' => '2',
+			'jutro' => 'jutro',
+			'pojutrze' => 'pojutrze',
+			'po jutrze' => 'pojutrze',
 		);
-		for($i=0; $i<3; $i++) {
-			$data[date('d.m', strtotime('+'.$i.' day'))] = ($i ? $i : '');
-			$data[date('j.m', strtotime('+'.$i.' day'))] = ($i ? $i : '');
-		}
+		$data[date('d.m')] = '';
+		$data[date('j.m')] = '';
+		$data[$tydzien[date('w')]] = '';
+		$data[date('d.m', strtotime('+1 day'))] = 'jutro';
+		$data[date('j.m', strtotime('+1 day'))] = 'jutro';
+		$data[$tydzien[date('w', strtotime('+1 day'))]] = 'jutro';
+		$data[date('d.m', strtotime('+2 day'))] = 'pojutrze';
+		$data[date('j.m', strtotime('+2 day'))] = 'pojutrze';
+		$data[$tydzien[date('w', strtotime('+2 day'))]] = 'pojutrze';
 		
 		$czas = '';
 		foreach($data as $known => $d) {
@@ -210,25 +206,29 @@
 			KINO
 		*/
 		$kina = self::getKina($miasto_num, $czas);
-		$found = FALSE;
 		$kino_num = $kino_nazw = '';
 		
 		if(!$kina) {
-			return new BotMsg('Przepraszamy, wystąpił bład przy pobieraniu listy kin.');
+			$txt = 'Brak seansów w tym mieście w wybranym dniu.';
+			$txt .= '<br />'."\n"
+				. '<br />'."\n"
+				. '<u>Spróbuj też:</u><br />'."\n"
+				. 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != 'dzis' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')).'<br />'."\n"
+				. 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś'));
+			return new BotMsg($txt);
 		}
 		
 		if(empty($kina)) {
-			return new BotMsg(($czas == '1' ? 'Jutro' : ($czas == '2' ? 'Pojutrze' : 'Dziś')).' żadne filmy nie są wyświetlane w podanym mieście.<br />'."\n"
+			return new BotMsg(($czas == '' ? 'Dziś' : ucfirst($czas)).' żadne filmy nie są wyświetlane w podanym mieście.<br />'."\n"
 				. '<br />'."\n"
 				. '<u>Spróbuj też:</u><br />'."\n"
-				. 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != '1' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')).'<br />'."\n"
+				. 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != 'dzis' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')).'<br />'."\n"
 				. 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś')));
 		}
 		
 		if(!empty($arg)) {
 			foreach($kina as $kino => $kino_id) {
 				if(levenshtein(funcs::utfToAscii($kino), $arg, 1, 1, 0) < 2) {
-					$found = TRUE;
 					$kino_num = $kino_id;
 					$kino_nazw = htmlspecialchars($kino);
 					break;
@@ -236,10 +236,9 @@
 			}
 		}
 		
-		if($found===FALSE && !empty($arg2)) {
+		if($kino_num === '' && !empty($arg2)) {
 			foreach($kina as $kino => $kino_id) {
 				if(levenshtein(funcs::utfToAscii($kino), $arg2, 1, 1, 0) < 2) {
-					$found = TRUE;
 					$kino_num = $kino_id;
 					$kino_nazw = htmlspecialchars($kino);
 					break;
@@ -247,8 +246,9 @@
 			}
 		}
 		
-		if($found === FALSE) {
+		if($kino_num === '') {
 			$txt = (!empty($arg) ? 'Podany obiekt nie został znaleziony. ' : '').'Dostępne kina w pasujących miastach:';
+			$kino = '';
 			foreach($kina as $kino => $num) {
 				$txt .= '<br />'."\n".$miasto_nazw.' '.htmlspecialchars($kino);
 			}
@@ -256,26 +256,31 @@
 			return new BotMsg($txt.'<br />'."\n"
 				. '<br />'."\n"
 				. '<u>Przykład:</u><br />'."\n"
-				. 'kino '.$miasto_nazw.' '.htmlspecialchars($kino).' '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś')));
+				. 'kino '.$miasto_nazw.' '.htmlspecialchars($kino).' '.($czas == '' ? 'dziś' : $czas));
 		}
 		
 		/*
 			REPERTUAR
 		*/
-		$filmy = self::getKino($miasto_num, $kino_id, $czas);
+		$filmy = self::getKino($miasto_num, $kino_num, $czas);
 		
 		if(!$filmy) {
 			return new BotMsg('Przepraszamy, wystąpił bład przy pobieraniu listy wyświelanych filmów.');
 		}
 		
-		$txt = '<b>Repertuar dla kina '.$kino_nazw.' ('.$miasto_nazw.') na '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś')).':</b>';
+		$txt = '<b>Repertuar dla kina '.$kino_nazw.' ('.$miasto_nazw.') na '.($czas == '' ? 'dziś' : $czas).':</b><br />'."\n";
 		if(empty($filmy)) {
 			$txt .= '<br />'."\n".'Brak projekcji.';
 		}
 		else
 		{
 			foreach($filmy as $film) {
-				$txt .= '<br />'."\n".htmlspecialchars($film[0]).' '.htmlspecialchars($film[1]).($film[2]!='' ? ' ('.htmlspecialchars($film[2]).')' : '');
+				$txt .= '<br />'."\n".htmlspecialchars($film[0]).'<br />'."\n";
+				$info = array();
+				foreach($film[1] as $dane) {
+					$info[] = '<b>'.$dane[0].'</b>'.($dane[1] ? ' ('.implode(', ', $dane[1]).')' : '');
+				}
+				$txt .= implode(', ', $info)."\n".'<br />';
 			}
 		}
 		

--
Gitblit v1.9.1