Konkurs Dobrychprogramów trwa w najlepsze. 12 października nieco się zmienił sposób wyświetlania diody, przez co trzeba było skrypt pisać od nowa, gdyż poprzedni już nie działą. Zajęło mi to dosłownie chwilkę - 2-3 godziny. Myślę, że mógłbym to nawet zrobić szybciej, ale dopiero "raczkuję" w bibliotece GD, więc trochę mi to zeszło. Tak jak w
poprzednim artykule na ten temat, tak i teraz nakreślę sposób działania mojego skryptu informującego nas natychmiast o pojawieniu się diody. Chciałbym tylko zaznaczyć, że do zrozumienia tego artykułu, potrzebna jest znajomość poprzedniego. :) A więc do dzieła.
Na samym początku należy przeanalizować, skąd tak naprawdę bierze się żółta dioda. Wkopujemy się więc jak zawsze do źródła strony. Interesuje nas wyłącznie linijka 71, z której dowiadujemy się praktycznie wszystkiego, więc ją przeanalizujmy:
Dowiadujemy się tutaj, że wczytywany obrazek to jest tak naprawdę
http://konkurs.dobreprogramy.pl/ContestHandler.ashx. Następnie możemy odczytać, że z tego obrazka jest
wycinany fragment o rozmiarach 36x36 pikseli. Nieco dalej jest zdefiniowany styl #diode, który
wybiera wycinany obrazek o współrzędnych macierzystego -36px oraz -72px. W CSS tak właśnie jest, że punkt 00 jest w lewym, górnym rogu, dlatego są liczby ujemne. Myślę, że dotychczas jest wszystko jasne, bo teraz dopiero zacznie się kombinowanie. ;)
Cały problem polega na tym, że współrzędne zmieniają się co tyle samo sekund czy minut, co obrazek. Wyklucza nam to wycinanie zdefiniowanych raz już współrzędnych z obrazka. Czyli:
za każdym razem, kiedy wykonujemy skrypt, musimy pobierać 2 pliki: kod strony i obrazek.
Na samym początku kodu naszego skryptu, najlepiej wczytać stronę główną konkursu (default.aspx) do tablicy (funkcja
file), a obrazek zapisać na serwerze. Następnie musimy wyodrębnić współrzędne przesunięcia. Ja wpadłem na pomysł, żeby funkcją
explode podzielić ciąg na dwie części, jak separatora użyłem "#diode{background-position:". Później usuwamy funkcją
str_replace pozostałości, czyli najpierw ";}</style></a>" (a na końcu pamiętajcie jeszcze o znaku powrotu karetki i nowej linii), a następnie usuwamy "px". I tym oto sposobem powinniśmy otrzymać (z powyższego przykładu) ciąg: "-36 -72". I tutaj tak znowu używamy
explode, tyle że jako separatora używamy spację i każdą wartość przypisujemy już do konkretnych zmiennych. Pamiętajmy teraz, żeby przekonwertować nasze "stringi" (nie, to nie majtki, czy coś na ich kształt, tylko to jest tekstowy typ danych ;) do "integerów" (liczby całkowite). Teraz pozostaje nam wyliczyć wartość bezwzględną tych zmiennych (funkcja
abs), gdyż w bibliotece GD, współrzędne liczone są tak samo jak w CSS, ale na liczbach dodatnich. Chodzi tutaj o uporządkowanie wartości w argumentach.
Kiedy mamy już obrazek na serwerze i przygotowane współrzędne, obcinamy obrazek (funkcja
imagecopyresampled) i nadpisujemy go.
Teraz to tylko sprawdzenie zakodowanego ciągu obrazków, porównanie ich, wysłanie maila, zapisanie informacji o wysłaniu w bazie. A wszystko to zrobi za nas co minutę CRON. :) Ci, którzy czytali poprzednią część artykułu, wiedzą o czym mówię. ;]
Tak więc nie jest to sprawa niewykonalna. Można by rzecz, że nawet prosta. Ciekaw tylko jestem, czy deweloperzy Dobrychprogramów ponownie zastosują jakąś nową metodę wyświetlania diody w przyszłości.
Wiem i zdaję sobie sprawę z tego, że może i w moim toku myślenia jest dużo kombinowania, ale mój skrypt jest całkiem przyjazny każdemu, kto się choć trochę w niego wgłębi. O jego prostocie na pewno świadczą jedyne 52 linijki kodu. :)
Podobał się artykuł? Myślę, że tak. :) Czekam na Twój komentarz poniżej. Bądź ze mną na bieżąco na Facebooku i obserwuj mnie na X.
BĄDŹ ZE MNĄ NA BIEŻĄCO NA FACEBOOKU ORAZ X |
|