exec(); libxml_use_internal_errors(TRUE); $dom = new DOMDocument(); if(!$dom->loadHTML($dane)) { libxml_use_internal_errors(FALSE); $down->cacheFor(1800); return FALSE; } $down->cacheUntil(strtotime('tomorrow midnight')); return $dom; } function getMiasta() { $xml = $this->cache('http://film.interia.pl/repertuar-kin'); if(!$xml) return FALSE; $xpath = new DOMXPath($xml); $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, strrpos($href, ',')+1); } return $return; } function getKina($miasto, $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="content"]//div[@class="showtimes-accordion-heading"]//p[@class="showtimes-cinema-name"]'); $return = array(); foreach($dane as $id => $kino) { $name = trim($kino->textContent); $return[$name] = $id; } return $return; } function getKino($miasto, $kino, $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=\'content\']//div[@class=\'showtimes-accordion-body\']'); $return = array(); $dane = $xpath->query('.//div[@class=\'showtimes-cinema-movie\']', $dane[$kino]); foreach($dane as $film) { $title = $xpath->query('.//span[@class=\'showtimes-cinema-movie-title\']', $film); $hours = $xpath->query('.//span[@data-time]', $film); $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($title->item(0)->textContent), $hours_ret ); } return $return; } function ustaw($msg, $params) { $arg = funcs::utfToAscii($msg->args); $msg->session->setClass('kino'); if(empty($arg)) { unset($msg->session->kino); return new BotMsg('Ustawienie domyślnego kino zostało usunięte. Aby ponownie je ustawić, wpisz:
'."\n" . 'ustaw miasto kino'); } else { $msg->session->kino = $arg; return new BotMsg('Podane miasto/kino zostało zapisane jako domyślne. Sprawdź, czy jest poprawne wysyłając komendę kino bez argumentów.'); } } function handle($msg, $params) { $arg = funcs::utfToAscii($msg->args); $msg->session->setClass('kino'); if(empty($arg)) { $arg = $msg->session->kino; if(empty($arg)) { return new BotMsg('Podaj nazwę miejscowości i kina.
'."\n" . '
'."\n" . 'Przykłady:
'."\n" . 'kino Kraków
'."\n" . 'kino Kraków Multikino'); } } else { $arg2 = $msg->session->kino; } /* MIASTO */ $miasta = self::getMiasta(); $miasto_num = $miasto_nazw = ''; if(!$miasta) { return new BotMsg('Przepraszamy, wystąpił bład przy pobieraniu listy miejscowości.'); } foreach($miasta as $miasto => $numer) { $szukaj = funcs::utfToAscii($miasto); if(($pos = strpos($arg, $szukaj)) !== FALSE) { $miasto_nazw = htmlspecialchars($miasto); $miasto_num = $numer; $arg = trim(str_replace(' ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen($szukaj)))); break; } } if($miasto_num === '' && !empty($arg2)) { foreach($miasta as $miasto => $numer) { $szukaj = funcs::utfToAscii($miasto); if(($pos = strpos($arg2, $szukaj)) !== FALSE) { $miasto_nazw = htmlspecialchars($miasto); $miasto_num = $numer; $arg2 = trim(str_replace(' ', ' ', substr($arg2, 0, $pos).substr($arg2, $pos+strlen($szukaj)))); break; } } } if($miasto_num === '') { $txt = 'Wybrane miasto nie został odnalezione. Obsługiwane miejscowości:'; $miasto = 'Warszawa'; foreach($miasta as $miasto => $num) { $txt .= '
'."\n".htmlspecialchars($miasto); } $txt .= '
'."\n" . '
'."\n" . 'Przykład:
'."\n" . 'kino '.htmlspecialchars($miasto); return new BotMsg($txt); } /* KIEDY */ $tydzien = array('niedziela', 'poniedzialek', 'wtorek', 'sroda', 'czwartek', 'piatek', 'sobota'); $data = array( 'dzis' => '', 'teraz' => '', 'jutro' => 'jutro', 'pojutrze' => 'pojutrze', 'po jutrze' => 'pojutrze', ); $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) { if(($pos = strpos($arg, $known))!==FALSE) { $czas = $d; $arg = trim(str_replace(' ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen($known)))); break; } } /* KINO */ $kina = self::getKina($miasto_num, $czas); $kino_num = $kino_nazw = ''; if(!$kina) { $txt = 'Brak seansów w tym mieście w wybranym dniu.'; $txt .= '
'."\n" . '
'."\n" . 'Spróbuj też:
'."\n" . 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != 'dzis' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')).'
'."\n" . 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś')); return new BotMsg($txt); } if(empty($kina)) { return new BotMsg(($czas == '' ? 'Dziś' : ucfirst($czas)).' żadne filmy nie są wyświetlane w podanym mieście.
'."\n" . '
'."\n" . 'Spróbuj też:
'."\n" . 'kino '.$miasto_nazw.' '.htmlspecialchars($arg).' '.($czas != 'dzis' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')).'
'."\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) { $kino_num = $kino_id; $kino_nazw = htmlspecialchars($kino); break; } } } if($kino_num === '' && !empty($arg2)) { foreach($kina as $kino => $kino_id) { if(levenshtein(funcs::utfToAscii($kino), $arg2, 1, 1, 0) < 2) { $kino_num = $kino_id; $kino_nazw = htmlspecialchars($kino); break; } } } 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 .= '
'."\n".$miasto_nazw.' '.htmlspecialchars($kino); } return new BotMsg($txt.'
'."\n" . '
'."\n" . 'Przykład:
'."\n" . 'kino '.$miasto_nazw.' '.htmlspecialchars($kino).' '.($czas == '' ? 'dziś' : $czas)); } /* REPERTUAR */ $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 = 'Repertuar dla kina '.$kino_nazw.' ('.$miasto_nazw.') na '.($czas == '' ? 'dziś' : $czas).':
'."\n"; if(empty($filmy)) { $txt .= '
'."\n".'Brak projekcji.'; } else { foreach($filmy as $film) { $txt .= '
'."\n".htmlspecialchars($film[0]).'
'."\n"; $info = array(); foreach($film[1] as $dane) { $info[] = ''.$dane[0].''.($dane[1] ? ' ('.implode(', ', $dane[1]).')' : ''); } $txt .= implode(', ', $info)."\n".'
'; } } return new BotMsg($txt); } } ?>