commit | author | age
|
8bd4d9
|
1 |
<?php |
JK |
2 |
class kino implements module { |
|
3 |
static function register_cmd() { |
|
4 |
return array( |
|
5 |
'kino' => 'cmd_kino', |
|
6 |
'kina' => 'cmd_kino', |
|
7 |
'k' => 'cmd_kino', |
|
8 |
'rep' => 'cmd_kino', |
|
9 |
'repertuar' => 'cmd_kino', |
|
10 |
'u' => 'cmd_ustaw', |
|
11 |
'ustaw' => 'cmd_ustaw', |
|
12 |
); |
|
13 |
} |
|
14 |
|
|
15 |
static function help($cmd = NULL) { |
|
16 |
if($cmd === NULL) { |
|
17 |
GGapi::putRichText('kino ', TRUE); |
|
18 |
GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); |
|
19 |
GGapi::putRichText("\n".' Repertuar kina '); |
|
20 |
GGapi::putRichText('nazwa', FALSE, TRUE); |
|
21 |
GGapi::putRichText("\n"); |
|
22 |
GGapi::putRichText('ustaw ', TRUE); |
|
23 |
GGapi::putRichText('miasto nazwa', FALSE, TRUE); |
|
24 |
GGapi::putRichText("\n".' Ustawia domyślne kino '."\n\n"); |
|
25 |
} |
|
26 |
elseif(substr($cmd, 0, 1)=='u') { |
|
27 |
GGapi::putRichText('ustaw ', TRUE); |
|
28 |
GGapi::putRichText('miasto nazwa', FALSE, TRUE); |
|
29 |
GGapi::putRichText("\n".' Ustawia domyślną lokalizację dla komendy kino na '); |
|
30 |
GGapi::putRichText('[nazwa]', FALSE, TRUE); |
|
31 |
GGapi::putRichText(' w mieście '); |
|
32 |
GGapi::putRichText('[miasto]', FALSE, TRUE); |
|
33 |
} |
|
34 |
else |
|
35 |
{ |
|
36 |
GGapi::putRichText('kino ', TRUE); |
|
37 |
GGapi::putRichText('miasto nazwa [kiedy]', FALSE, TRUE); |
|
38 |
GGapi::putRichText("\n".' Repertuar kina '); |
|
39 |
GGapi::putRichText('nazwa', FALSE, TRUE); |
|
40 |
GGapi::putRichText(' w mieście '); |
|
41 |
GGapi::putRichText('miasto', FALSE, TRUE); |
|
42 |
GGapi::putRichText(' na '); |
|
43 |
GGapi::putRichText('[kiedy]', FALSE, TRUE); |
|
44 |
GGapi::putRichText(' (dziś, jutro, pojutrze)'); |
|
45 |
} |
|
46 |
} |
|
47 |
|
|
48 |
static function cmd_ustaw($cmd, $arg) { |
|
49 |
$arg = funcs::utfToAscii($arg); |
|
50 |
|
|
51 |
database::add($_GET['from'], 'kino', 'kino', $arg); |
|
52 |
|
|
53 |
if(empty($arg)) { |
|
54 |
GGapi::putText('Usunięto domyślne kino. Aby otrzymać listę dostępnych obiektów wpisz:'."\n"); |
|
55 |
GGapi::putRichText('kino', TRUE); |
|
56 |
GGapi::putRichText(' Miasto', FALSE, TRUE); |
|
57 |
} |
|
58 |
else |
|
59 |
{ |
|
60 |
GGapi::putText('Podane kino zostało zapisane jako domyślne. Sprawdź, czy jest poprawne wpisując:'."\n"); |
|
61 |
GGapi::putRichText('kino', TRUE); |
|
62 |
} |
|
63 |
} |
|
64 |
|
|
65 |
static function cmd_kino($cmd, $arg) { |
|
66 |
$arg = funcs::utfToAscii($arg); |
|
67 |
if(empty($arg)) { |
|
68 |
$arg = database::get($_GET['from'], 'kino', 'kino'); |
|
69 |
if(empty($arg)) { |
|
70 |
GGapi::putText('Podaj nazwę miejscowości i kina.'."\n\n"); |
|
71 |
GGapi::putRichText('Przykłady', FALSE, FALSE, TRUE); |
|
72 |
GGapi::putRichText("\n".'kino Kraków'."\n".'kino Kraków Multikino'); |
|
73 |
return FALSE; |
|
74 |
} |
|
75 |
} |
|
76 |
else |
|
77 |
{ |
|
78 |
$arg2 = database::get($_GET['from'], 'kino', 'kino'); |
|
79 |
} |
|
80 |
|
|
81 |
/* |
|
82 |
MIASTO |
|
83 |
*/ |
|
84 |
$miasta = self::getMiasta(); $found = FALSE; |
|
85 |
|
|
86 |
if(!$miasta) { |
|
87 |
GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy miejscowości.'); |
|
88 |
return FALSE; |
|
89 |
} |
|
90 |
|
|
91 |
foreach($miasta as $miasto => $miasto_num) { |
|
92 |
if(($pos = strpos($arg, funcs::utfToAscii($miasto))) !== FALSE) { |
|
93 |
$found = $miasto_num; |
|
94 |
$arg = trim(str_replace(' ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen(funcs::utfToAscii($miasto))))); |
|
95 |
break; |
|
96 |
} |
|
97 |
} |
|
98 |
|
|
99 |
if($found===FALSE && !empty($arg2)) { |
|
100 |
foreach($miasta as $miasto => $miasto_num) { |
|
101 |
if(($pos = strpos($arg2, funcs::utfToAscii($miasto))) !== FALSE) { |
|
102 |
$found = $miasto_num; |
|
103 |
$arg2 = trim(str_replace(' ', ' ', substr($arg2, 0, $pos).substr($arg2, $pos+strlen(funcs::utfToAscii($miasto))))); |
|
104 |
break; |
|
105 |
} |
|
106 |
} |
|
107 |
} |
|
108 |
|
|
109 |
if($found === FALSE) { |
|
110 |
$txt = 'Wybrane miasto nie został odnalezione. Dostępne miejscowości:'; |
|
111 |
foreach($miasta as $miasto => $num) { |
|
112 |
$txt .= "\n".$miasto; |
|
113 |
} |
|
114 |
GGapi::putText($txt); |
|
115 |
return FALSE; |
|
116 |
} |
|
117 |
|
|
118 |
|
|
119 |
/* |
|
120 |
KIEDY |
|
121 |
*/ |
|
122 |
$tydzien = array('niedziela', 'poniedzialek', 'wtorek', 'sroda', 'czwartek', 'piatek', 'sobota'); |
|
123 |
$data = array( |
|
124 |
'dzis' => '', |
|
125 |
'teraz' => '', |
|
126 |
'jutro' => '1', |
|
127 |
'pojutrze' => '2', |
|
128 |
'po jutrze' => '2', |
|
129 |
); |
|
130 |
for($i=0; $i<3; $i++) { |
|
131 |
$data[date('d.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); |
|
132 |
$data[date('j.m', strtotime('+'.$i.' day'))] = ($i ? $i : ''); |
|
133 |
} |
|
134 |
|
|
135 |
$czas = ''; |
|
136 |
foreach($data as $known => $d) { |
|
137 |
if(($pos = strpos($arg, $known))!==FALSE) { |
|
138 |
$czas = $d; |
|
139 |
$arg = trim(str_replace(' ', ' ', substr($arg, 0, $pos).substr($arg, $pos+strlen($known)))); |
|
140 |
break; |
|
141 |
} |
|
142 |
} |
|
143 |
|
|
144 |
/* |
|
145 |
KINO |
|
146 |
*/ |
|
147 |
$kina = self::getKina($miasto_num, $czas); $found = FALSE; |
|
148 |
|
|
149 |
if(!$kina) { |
|
150 |
GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy kin.'); |
|
151 |
return FALSE; |
|
152 |
} |
|
153 |
|
|
154 |
if(empty($kina)) { |
|
155 |
GGapi::putText(($czas == '1' ? 'Jutro' : ($czas == '2' ? 'Pojutrze' : 'Dziś')).' żadne filmy nie są wyświetlane w podanym mieście.'."\n\n"); |
|
156 |
GGapi::putRichText('Spróbuj też:', FALSE, FALSE, TRUE); |
|
157 |
GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas != '1' ? 'jutro' : ($czas != '2' ? 'pojutrze' : 'dziś')). |
|
158 |
"\n".'kino '.$miasto.' '.$kino.' '.($czas != '' ? 'dziś' : ($czas != '2' ? 'pojutrze' : 'dziś'))); |
|
159 |
return FALSE; |
|
160 |
} |
|
161 |
|
|
162 |
if(!empty($arg)) { |
|
163 |
foreach($kina as $kino => $kino_id) { |
|
164 |
if(levenshtein(funcs::utfToAscii($kino), $arg, 1, 1, 0) < 2) { |
|
165 |
$found = $kino_id; |
|
166 |
break; |
|
167 |
} |
|
168 |
} |
|
169 |
} |
|
170 |
|
|
171 |
if($found===FALSE && !empty($arg2)) { |
|
172 |
foreach($kina as $kino => $kino_id) { |
|
173 |
if(levenshtein(funcs::utfToAscii($kino), $arg2, 1, 1, 0) < 2) { |
|
174 |
$found = $kino_id; |
|
175 |
break; |
|
176 |
} |
|
177 |
} |
|
178 |
} |
|
179 |
|
|
180 |
if($found === FALSE) { |
|
181 |
$txt = (!empty($arg) ? 'Podany obiekt nie został znaleziony. ' : '').'Dostępne kina w pasujących miastach:'; |
|
182 |
foreach($kina as $kino => $num) { |
|
183 |
$txt .= "\n".$miasto.' '.$kino; |
|
184 |
} |
|
185 |
GGapi::putText($txt."\n\n"); |
|
186 |
GGapi::putRichText('Przykład:', FALSE, FALSE, TRUE); |
|
187 |
GGapi::putRichText("\n".'kino '.$miasto.' '.$kino.' '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś'))); |
|
188 |
return FALSE; |
|
189 |
} |
|
190 |
|
|
191 |
/* |
|
192 |
REPERTUAR |
|
193 |
*/ |
|
194 |
$filmy = self::getKino($miasto_num, $kino_id, $czas); |
|
195 |
|
|
196 |
if(!$filmy) { |
|
197 |
GGapi::putText('Przepraszamy, wystąpił bład przy pobieraniu listy wyświelanych filmów.'); |
|
198 |
return FALSE; |
|
199 |
} |
|
200 |
|
|
201 |
GGapi::putRichText('Repertuar dla kina '.$kino.' ('.$miasto.') na '.($czas == '1' ? 'jutro' : ($czas == '2' ? 'pojutrze' : 'dziś')).':', TRUE); |
|
202 |
if(empty($filmy)) { |
|
203 |
GGapi::putRichText("\n".'Brak repertuaru'); |
|
204 |
} |
|
205 |
else |
|
206 |
{ |
|
207 |
foreach($filmy as $film) { |
|
208 |
$txt .= "\n".$film[0].' '.$film[1]; |
|
209 |
} |
|
210 |
} |
|
211 |
GGapi::putRichText($txt); |
|
212 |
} |
|
213 |
|
|
214 |
static function tidy($code) { |
|
215 |
$tidy = new tidy; |
|
216 |
$tidy->parseString($code, array( |
|
217 |
'add-xml-decl' => true, |
|
218 |
'output-xml' => true, |
|
219 |
), 'raw'); |
|
220 |
$tidy->CleanRepair(); |
|
221 |
return str_replace(array(' ', 'margin:="'), array(' ', 'margin="'), (string)$tidy); |
|
222 |
} |
|
223 |
|
|
224 |
static function cache($url) { |
|
225 |
$time = '+2 hour'; $dir = './data/kino/cache/'; |
|
226 |
|
|
227 |
if(file_exists($dir.md5($url))) { |
|
228 |
$mtime = @filemtime($dir.md5($url)); |
|
229 |
} |
|
230 |
if($mtime && $mtime > strtotime('today '.$time) && $mtime < strtotime('tomorrow '.$time)) { |
|
231 |
return file_get_contents($dir.md5($url)); |
|
232 |
} |
|
233 |
else |
|
234 |
{ |
|
235 |
$dane = @file_get_contents($url); |
|
236 |
if(!$dane) { |
|
237 |
trigger_error('Nie udało się pobrać repertuaru kina, przepraszamy.', E_USER_ERROR); |
|
238 |
} |
|
239 |
$dane = self::tidy($dane); |
|
240 |
file_put_contents($dir.md5($url), $dane); |
|
241 |
return $dane; |
|
242 |
} |
|
243 |
} |
|
244 |
|
|
245 |
static function getMiasta() { |
|
246 |
$return = array(); |
|
247 |
$dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar')); |
|
248 |
if(!$dane) return FALSE; |
|
249 |
$dane = $dane->xpath('//div[@id=\'cities\']//a'); |
|
250 |
foreach($dane as $miasto) { |
|
251 |
$miasto['href'] = (string)$miasto['href']; |
|
252 |
$return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$miasto)] = substr($miasto['href'], strpos($miasto['href'], ',')+1); |
|
253 |
} |
|
254 |
|
|
255 |
return $return; |
|
256 |
} |
|
257 |
|
|
258 |
static function getKina($miasto, $kiedy='') { |
|
259 |
$return = array(); |
|
260 |
$dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); |
|
261 |
if(!$dane) return FALSE; |
|
262 |
$dane = $dane->xpath('//div[@id=\'mainContent\']/table//th[@class=\'theatre\']/a[1]'); |
|
263 |
if(!empty($dane)) { |
|
264 |
foreach($dane as $kino) { |
|
265 |
$return[str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$kino)] = (string)$kino['name']; |
|
266 |
} |
|
267 |
} |
|
268 |
return $return; |
|
269 |
} |
|
270 |
|
|
271 |
static function getKino($miasto, $kino, $kiedy='') { |
|
272 |
$return = array(); |
|
273 |
$dane = @simplexml_load_string(self::cache('http://film.interia.pl/kino/repertuar//kina,'.$miasto.($kiedy ? ','.$kiedy : ''))); |
|
274 |
if(!$dane) return FALSE; |
|
275 |
$dane = $dane->xpath('//div[@id=\'mainContent\']/table//a[@name=\''.$kino.'\']/../../following-sibling::tr'); |
|
276 |
if(!empty($dane)) { |
|
277 |
foreach($dane as $film) { |
|
278 |
if($film->th) break; |
|
279 |
$return[] = array((string)$film->td[1], str_replace(array("\r\n", "\r", "\n"), array(' ', ' ', ' '), (string)$film->td[0]->a)); |
|
280 |
} |
|
281 |
} |
|
282 |
return $return; |
|
283 |
} |
|
284 |
} |
|
285 |
?> |