Zadanie 1 - KOMIKSY =================== WPROWADZENIE ============ Celem tego zadania jest napisanie skryptu służącego do tworzenia i zarządzania podręcznym zbiorkiem ulubionych komiksów. Zajrzyj tutaj: http://www.gocomics.com Możesz wybierać z bogatej oferty komiksów, z których większość ma nowe odcinki codziennie. Na przykład: http://www.gocomics.com/garfield http://www.gocomics.com/adamathome Naszym celem jest usprawnienie ściągania nowych odcinków ulubionych komiksów tak, aby nie trzeba było codziennie uruchamiać przeglądarki, wchodzić na strony itd... Na przykład obrazek z Garfieldem znajduje się zawsze w pliku http://images.ucomics.com/comics/ga/YYYY/gaYYMMDD.gif gdzie Y-rok, M-miesiac, D-dzień. Podobnie mają inne komiksy (zajrzyj do źródeł strony). Wystarczy ograniczyć się do takich komiksów, które pasują do tej reguły nazewnictwa (niektóre trochę odbiegają np. Calvin and Hobbes). Skrypt powinien umożliwiać ściąganie kilku komiksów z bieżącego dnia. Na stronie gocomics można przeglądać poprzednie odcinki każdego komiksu, do miesiąca wstecz. Komiksy często grupują się w dłuższe serie, powiązane ze sobą tematycznie. Na przykład Garfieldy z okresu od 2006.10.10 do 2006.10.14, możnaby opatrzyć wspólnym tytułem "Beware of dog". Chcemy, żeby skrypt pozwalał na takie przydzielanie komiksów do większych serii (w obrębie jednego typu komiksu). Wreszcie skrypt ma służyć do wyświetlania komiksów według typu, daty lub serii w obrębie komiksu. SZCZEGÓŁY ========= Rozwiązaniem zadania jest skrypt o nazwie comic, który ściąga co najmniej 2 różne komiksy (ustalone przez rozwiązującego). Wszystkie dane skryptu i ściągnięte obrazki powinny być przechowywane w katalogu .comic w katalogu domowym użytkownika, który skrypt wywołał. Do rozwiązania proszę dołączyć kompletny katalog .comic zawierający choć kilka obrazków (żebym miał od czego zacząć). Skrypt obsługuje następujące opcje: comic list ---------- Wypisuje obsługiwane komiksy. Najlepiej, żeby ich nazwy były krótkie, bo będą często używane np. "gar", "cal", "adam". Przykład: ./comic list gar adam comic show _komiks [_n] ----------------------- Pokazuje _n ostatnich odcinków komiksu _komiks. Jeśli nie podano _n wtedy jakąś stałą liczbę np. 5. Przykład: ./comic show gar 3 comic today ----------- Pokazuje wszystkie komiksy z dzisiaj. Jeżeli dzisiejszych nie ma, to pokazuje dla każdego komiksu ostatni odcinek, który jest. comic get --------- Ściąga dzisiejsze komiksy. Dla każdego komiksu, jeżeli jego dzisiejszy odcinek już jest ściągnięty, to nie należy łączyć się z serwerem i ściągać go ponownie. Tylko w tym poleceniu wchodzimy w interakcję z siecią, pozostałe są lokalne. comic Slist _komiks ------------------- Pokaż listę serii komiksu _komiks. Każda seria powinna mieć kolejny numer, nazwę i liczbę odcinków w tej serii. Ostatnia powinna byc sztuczna seria obejmująca te odcinki, które nie są w żadnej innej serii. Przykład: ./comic Slist gar 1: Beware of dog, 5 2: Going to the vet, 8 3: Going to see Liz, 3 4: Inne, 5 comic Sshow _komiks _seria [_n] ------------------------------- Wyświetl wszystkie odcinki komiksu _komiks które należą do serii _seria. Serię można podać na dwa sposoby: jako numer serii (według numerów z listy powyżej) lub jako nazwę serii lub fragment tej nazwy. Jeżeli nie ma serii o takim numerze lub takiej nazwie, lub (uwaga!) jeśli podany fragment nazwy pasuje do wielu nazw serii należy wypisać stosowny komunikat. Obrazki z serii należy pokazywać w kolejności chronologicznej, od najstarszych. Parametr _n jest opcjonalny - jeśli podany to wyświetlamy tylko _n najnowszych obrazków z danej serii. Przykłady: ./comic Sshow gar 2 [pokazuje serię o weterynarzu] ./comic Sshow gar Beware [pokazuje serię numer 1] ./comic Sshow gar "Going" 6 Niejednoznaczna nazwa serii comic Sadd _komiks _seria [_data] --------------------------------- Dodaj odcinek z dnia _data komiksu _komiks do serii _seria. Opis serii jak porzednio. Jeżeli data nie jest podana to chodzi o dzisiejszy (lub jeśli go nie ma, ostatni jaki jest) odcinek. Jeden odcinek można dodać do wielu serii. Przykład: comic Sadd gar Beware comic Snew _komiks _nazwa ------------------------- Stwórz nową, pustą serię o nazwie _nazwa w komiksie _komiks. Przykład: comic Snew gar "Eating lasagna" UWAGI ===== Do ściągania stron, obrazków itp. z WWW służy program wget. Do wyświetlania obrazka lub listy obrazków służy wiele programów np. ee, qiv, display. Przykłady: wget -nd "http://images.ucomics.com/ga/2006/ga061019.gif" display obr1.gif obr2.gif obr3.gif Po każdej operacji byłoby miło wypisać jakiś krótki komunikat co się stało. Jeżeli w wywołaniu brakuje obowiązkowych parametrów to też. Skrypt powinien sprawdzić, czy używany program do wyświetlania obrazków jest zainstalowany w systemie - jeżeli nie to odmówić działania. Byłoby dobrze, żeby skrypt dawał się łatwo rozbudowywać. Łatwo widać, że najbardziej newralgicznym momentem jest ściąganie obrazków: trzeba to robić indywidualnie dla każdego obsługiwanego komiksu, reszta operacji jest taka sama dla każdego typu komiksów. Wobec tego może np. realizacja polecenia get dla każdego komiksu powinna znajdować się w osobnym skrypcie i takie skrypty dla nowych komiksów dałoby się dodawać przy minimalnych (a najlepiej żadnych!) zmianach w skrypcie głównym. To nie będzie testowane, ale polecam przemyślenie takiego eleganckiego rozwiązania. Do uznania rozwiązującego pozostawiam też organizację danych w katalogu .comic oraz format daty wczytywanej od użytkownika. TERMIN ITP. =========== Proszę wysłać skrypt i jakąś małą bazkę spakowane w jednym archiwum do 30.11.2006 na aszek@mimuw.edu.pl. Tam też wszelkie pytania, problemy itp. NIEOBOWIĄZKOWE ROZSZERZENIA =========================== Gdyby to kogoś wciągnęło to można później np. pomyśleć o tym aby: 1) comic get ściągało zaległe komiksy z poprzednich dni, jeżeli przez kilka dni nie ściągaliśmy 2) dało się ściągać komiksy o innej budowie nazwy pliku np. Calvin and Hobbes, albo nie pojawiające się codziennie. W szczególności chodzi tu o komiks PHD: www.phdcomic.com (to ma związek z poprzednią uwagą o łatwym rozbudowywaniu skryptu!!!). 3) przenoszenie starych komiksów do jakiegoś archiwum