'cmd_kino', 'kina' => 'cmd_kino', 'k' => 'cmd_kino', 'rep' => 'cmd_kino', 'repertuar' => 'cmd_kino', 'u' => 'cmd_ustaw', 'ustaw' => 'cmd_ustaw', ); } static function help($cmd = NULL) { if($cmd === NULL) { GGapi::putRichText('kino ', TRUE); GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); GGapi::putRichText("\n".' Repertuar kina '); GGapi::putRichText('nazwa', FALSE, TRUE); GGapi::putRichText("\n"); GGapi::putRichText('ustaw ', TRUE); GGapi::putRichText('miasto nazwa', FALSE, TRUE); GGapi::putRichText("\n".' Ustawia domyślne kino '."\n\n"); } elseif(substr($cmd, 0, 1)=='u') { GGapi::putRichText('ustaw ', TRUE); GGapi::putRichText('miasto nazwa', FALSE, TRUE); GGapi::putRichText("\n".' Ustawia domyślną lokalizację dla komendy kino na '); GGapi::putRichText('[nazwa]', FALSE, TRUE); GGapi::putRichText(' w mieście '); GGapi::putRichText('[miasto]', FALSE, TRUE); } else { GGapi::putRichText('kino ', TRUE); GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); GGapi::putRichText("\n".' Repertuar kina '); GGapi::putRichText('nazwa', FALSE, TRUE); GGapi::putRichText(' w mieście '); GGapi::putRichText('miasto', FALSE, TRUE); GGapi::putRichText(' na '); GGapi::putRichText('[kiedy]', FALSE, TRUE); GGapi::putRichText(' (dziś, jutro, pojutrze)'); } } static function cmd_ustaw($cmd, $arg) { $arg = funcs::utfToAscii($arg); database::add($_GET['from'], 'kino', 'kino', $arg); if(empty($arg)) { GGapi::putText('Usunięto domyślne kino. Aby otrzymać listę dostępnych obiektów wpisz:'."\n"); GGapi::putRichText('kino', TRUE); GGapi::putRichText(' Miasto', FALSE, TRUE); } else { GGapi::putText('Podane kino zostało zapisane jako domyślne. Sprawdź, czy jest poprawne wpisując:'."\n"); GGapi::putRichText('kino', TRUE); } } static function cmd_kino($cmd, $arg) { $arg = funcs::utfToAscii($arg); if(empty($arg)) { $arg = database::get($_GET['from'], 'kino', 'kino'); if(empty($arg)) { GGapi::putText('Podaj nazwę miejscowości i kina.'."\n\n"); GGapi::putRichText('Przykłady', FALSE, FALSE, TRUE); GGapi::putRichText("\n".'kino Kraków'."\n".'kino Kraków Multikino'); return FALSE; } } else { $arg2 = database::get($_GET['from'], 'kino', 'kino'); } /* MIASTO */ $miasta = self::getMiasta(); $found = FALSE; if(!$miasta) { GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy miejscowości.'); return FALSE; } foreach($miasta as $miasto => $miasto_num) { if(($pos = strpos($arg, funcs::utfToAscii($miasto))) !== FALSE) { $found = $miasto_num; $arg = trim(str_replace(' ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen(funcs::utfToAscii($miasto))))); break; } } if($found===FALSE && !empty($arg2)) { foreach($miasta as $miasto => $miasto_num) { if(($pos = strpos($arg2, funcs::utfToAscii($miasto))) !== FALSE) { $found = $miasto_num; $arg2 = trim(str_replace(' ', ' ', substr($arg2, 0, $pos).substr($arg2, $pos+strlen(funcs::utfToAscii($miasto))))); break; } } } if($found === FALSE) { $txt = 'Wybrane miasto nie został odnalezione. Dostępne miejscowości:'; foreach($miasta as $miasto => $num) { $txt .= "\n".$miasto; } GGapi::putText($txt); return FALSE; } /* KIEDY */ $tydzien = array('niedziela', 'poniedzialek', 'wtorek', 'sroda', 'czwartek', 'piatek', 'sobota'); $data = array( 'dzis' => '', 'teraz' => '', 'jutro' => '1', 'pojutrze' => '2', 'po jutrze' => '2', ); for($i=0; $i<3; $i++) { $data[date('d.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); $data[date('j.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); } $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); $found = FALSE; if(!$kina) { GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy kin.'); return FALSE; } if(empty($kina)) { GGapi::putText(($czas == '1' ? 'Jutro' : ($czas == '2' ? 'Pojutrze' : 'Dziś')).' żadne filmy nie są wyświetlane w podanym mieście.'."\n\n"); GGapi::putRichText('Spróbuj też:', FALSE, FALSE, TRUE); GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas != '1' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')). "\n".'kino '.$miasto.' '.$kino.' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś'))); return FALSE; } if(!empty($arg)) { foreach($kina as $kino => $kino_id) { if(levenshtein(funcs::utfToAscii($kino), $arg, 1, 1, 0) < 2) { $found = $kino_id; break; } } } if($found===FALSE && !empty($arg2)) { foreach($kina as $kino => $kino_id) { if(levenshtein(funcs::utfToAscii($kino), $arg2, 1, 1, 0) < 2) { $found = $kino_id; break; } } } if($found === FALSE) { $txt = (!empty($arg) ? 'Podany obiekt nie został znaleziony. ' : '').'Dostępne kina w pasujących miastach:'; foreach($kina as $kino => $num) { $txt .= "\n".$miasto.' '.$kino; } GGapi::putText($txt."\n\n"); GGapi::putRichText('Przykład:', FALSE, FALSE, TRUE); GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś'))); return FALSE; } /* REPERTUAR */ $filmy = self::getKino($miasto_num, $kino_id, $czas); if(!$filmy) { GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy wyświelanych filmów.'); return FALSE; } GGapi::putRichText('Repertuar dla kina '.$kino.' ('.$miasto.') na '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś')).':', TRUE); if(empty($filmy)) { GGapi::putRichText("\n".'Brak repertuaru'); } else { foreach($filmy as $film) { $txt .= "\n".$film[0].' '.$film[1]; } } GGapi::putRichText($txt); } static function tidy($code) { $tidy = new tidy; $tidy->parseString($code, array( 'add-xml-decl' => true, 'output-xml' => true, ), 'raw'); $tidy->CleanRepair(); return str_replace(array(' ', 'margin:="'), array(' ', 'margin="'), (string)$tidy); } static function cache($url) { $time = '+2 hour'; $dir = './data/kino/cache/'; if(file_exists($dir.md5($url))) { $mtime = @filemtime($dir.md5($url)); } if($mtime && $mtime > strtotime('today '.$time) && $mtime < strtotime('tomorrow '.$time)) { return file_get_contents($dir.md5($url)); } else { $dane = @file_get_contents($url); if(!$dane) { trigger_error('Nie udało się pobrać repertuaru kina, przepraszamy.', E_USER_ERROR); } $dane = self::tidy($dane); file_put_contents($dir.md5($url), $dane); return $dane; } } static function getMiasta() { $return = array(); $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar')); if(!$dane) return FALSE; $dane = $dane->xpath('//div[@id=\'cities\']//a'); foreach($dane as $miasto) { $miasto['href'] = (string)$miasto['href']; $return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$miasto)] = substr($miasto['href'], strpos($miasto['href'], ',')+1); } return $return; } static function getKina($miasto, $kiedy='') { $return = array(); $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); if(!$dane) return FALSE; $dane = $dane->xpath('//div[@id=\'mainContent\']/table//th[@class=\'theatre\']/a[1]'); if(!empty($dane)) { foreach($dane as $kino) { $return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$kino)] = (string)$kino['name']; } } return $return; } static function getKino($miasto, $kino, $kiedy='') { $return = array(); $dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); if(!$dane) return FALSE; $dane = $dane->xpath('//div[@id=\'mainContent\']/table//a[@name=\''.$kino.'\']/../../following-sibling::tr'); if(!empty($dane)) { foreach($dane as $film) { if($film->th) break; $return[] = array((string)$film->td[1], str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$film->td[0]->a)); } } return $return; } } ?>