Projekt

 

POBIERANIE STRON WWW

Klasa:  Downloader

- całe pobieranie w run()

- przykładowe stałe:

public static final int TIMEOUT=60; (czas pomiędzy powtórzeniami 60 sekund)

- przykładowe konstruktory:

Downloader d = new Downloader(properties);

gdzie properties - obiekt klasy Properties - określa:

  1.   adres strony,

  2.   timeout,

  3.   liczbę ponowień pobrania,

  4.   flagę czy pobierać plik z ErrorStream, itp.

Downloader(String)  --- adres strony

Downloader(URL)  --- adres strony

Downloader(String, String)  --- adres strony, plik na dysku

Downloader(URL, File)  --- adres strony, plik na dysku

- przykładowe metody:

getFile()  --- zwraca pobrany File lub null, jeśli plik nie został pobrany

setProperties(Properties) --- ustawiamy nagłówki

setAuthorization(login, password)  --- przekazujemy dane do pobrania strony wymagającej hasła


Klasa:  DownloaderPool

DownloaderPool dp = new DownloaderPool(propertiesA);

dp.stopNow()  --- kończy natychmiast pracę wątków.

dp.addAll(list);  --- dodajemy obiekt który ma się wykonać, gdzie list - obiekt: ArrayList<Downloader>. Metoda zwraca ArrayList<Future>, i rozpoczyna pobieranie - lista do pobrania jest zamknięta.


PARSOWANIE

Parsujemy (TYLKO!) lokalny plik używając Jericho, JSoup lub korzystając z JSON.

Na przykład dla Jericho:   Source s = new Source(file.toURI().toURL() );

3 - aplikacja graficzna dla ENIGMA2

Celem aplikacji graficznej jest prezentacja danych opisujących kanały dekoderów z systemem ENIGMA2. Wszelka informacja o stronach pobieranych zapisywana jest jako plik properties, w standardzie XML lub txt.

Uwaga: Przykładowe pliki dl ENIGMA2:
[students.zip] [wiele stron wyjaśniających zależności i strukturę lamedb bouquets w środowsisku ENIGMA2]

Proszę pamiętać, że plikiem nadrzędnym jest lamedb (baza danych o kanałach), kanały zaś są zorganizowane w paczki których opisy znajdują się w plikach nadrzędnych bouquets.tv i bouquets.radio.

1 - aplikacja parsująca

Pobieramy zadane strony, przy czym lista stron może być modyfikowana, użytkownik może dodać stronę, usunąć stronę, a także dla każdej strony ustawić specyficzne dane (lub wykorzystać domyślne - chodzi tu o timeout, listę ponowień, ustawienie cookies, nazwa i hasło, itp.).

Aplikacja winna wielowątkowo pobierać pliki. Prawidłowe pobranie winno zostać oznaczone. Proszę obejrzeć inne aplikacje tego typu, jak np. JDownloader.
Lista stron może być modyfikowana przez użytkownika (w tym może on ustawić specyficzne dane lub wykorzystać domyślne parametry dostępu, takie jak timeout, listę ponowień, ustawienie cookies, nazwa i hasło, itp.). Wszelka informacja o stronach pobieranych odczytywana jest jako plik properties, w standardzie XML lub txt.

1A - Zapis sparsowanych danych do pliku tekstowego

Należy pobrać zadaną listę plików i następnie każdy z nich sparsować wyłuskując zawarte tam stosowne informacje a następnie zapisać je w pliku pliku tekstowym.

Proszę pamiętać o zdefiniowaniu formatu pliku (można zapisywać w XML).

1B - Zapis sparsowanych danych do pliku xmltv

Należy pobrać zadaną listę plików i następnie każdy z nich sparsować wyłuskując zawarte tam stosowne informacje a następnie zapisać je w pliku w standardzie xmltv.

Odsyłam na stronę: http://wiki.xmltv.org/index.php/Main_Page.  Warto też zapoznać się z działaniem (istotą działania tej aplikacji lub tej).

1C - Zapis sparsowanych danych do bazy SQLite

Należy pobrać zadaną listę plików i następnie każdy z nich sparsować wyłuskując zawarte tam stosowne informacje. W przypadku zapisu do bazy SQLite należy wcześniej przeanalizować strukturę treści strony i zaproponować odpowiednią strukturę bazy danych. Kilka tabel winno zawierać stałe wartości - polecam pobrać: http://www.softpedia.com/progDownload/SQlite-Designer-Download-170178.html  lub  http://sourceforge.net/projects/sqlitebrowser/files/latest/download

I. INFORMACJE

II. UWAGI ZASADNICZE

Należy zastosować następujące zasady:

  1. 1.Piszemy kod wykonujący pewne czynności i umieszczamy je jako klasy w pakiecie o określonej nazwie, na przykład:   agh.project.

    Nasze własne klasy wyjątków (o ile je stosujemy) umieszczamy w określonym pakiecie, przykładowo: agh.project.exception

    Wszelkie inne klasy dodatkowe mogą być w podpakietach:  agh.project.util, agh.project.test, etc.

  2. 2.Wszelkie aplikacje nie wchodzą w skład żadnego pakietu lecz korzystają z klas znajdujących się w pakietach.

  3. 3.Mile widziane będzie wygenerowanie stosownej dokumentacji za pomocą javadoc.

  4. 4.Wszelkie czynności logujemy stosując pakiet: log4j

  5. 5.Należy opracować zbiór klas odpowiedzialnych za pobieranie dowolnej strony WWW:
    - Klasa: Downloader i opcjonalne własne klasy wyjątków
    - Klasa Downloader odpowiada za pobieranie pojedynczej strony.
    - Stosujemy obsługę kodowania (znaki międzynarodowe) i "udawania" przeglądarki.
    - Klasa próbuje pobrać stronę (InputStream lub ErrorStream, ew. połączenie uwierzytelnione)
    - Parametry w konstruktorze. (Kilka konstruktorów)
    - Aplikacja testująca pokazuje jak korzystać z konstruktorów z klasy Downloader

  6. 6.Klasa do pobierania wielowątkowego to: DownloaderPool, TestDownloaderPool to klasa do przetestowania aplikacji, oraz stosowne klasy do obsługi wyjątków.

  7. 7.Proszę pamiętać, że nazwa klasy stanowiącej wyjątek winna kończyć się na Exception

  8. 8.Klasa DownloaderPool korzysta z Downloader, która implementuje Runnable.

  9. 9.Proszę zaproponować stosowną klasę do obsługi (tworzenia i odczytu) plików .properties.
    Stosowne pliki .properties dotyczą parametrów pobierania stron (obsługa Downloader - na przykład parametry przeglądarki, oraz dla DownloaderPool tu np. timeouty połączeń).

  10. 10. Proszę (o ile dotyczy) zaproponować klasę do obsługi parsowania pobranych plików i zapisu danych. Klasa parsująca pobrany plik czyni to zgodnie z ustawieniami  zawartymi s tosownym pliku lub plikach:  .properties.

  11. 11. Po sparsowaniu wyniki (w zależności od zadania) zapisujemy do bazy SQLite lub pliku w standardzie xmltv, czy innego pliku tekstowego.

III. INNE UWAGI

Strony dla zadań 1A/1B/1C

(a) TEMATYKA: Parsowanie listy kanałów satelitarnych
Pobieranie danych o kanałach telewizyjnych i radiowych

  http://www.lyngsat.com

W szczególności  (1):

  http://www.lyngsat.com/Eutelsat-Hot-Bird-13A.html

  http://www.lyngsat.com/Eutelsat-Hot-Bird-13B.html

  http://www.lyngsat.com/Eutelsat-Hot-Bird-13C.html

  http://www.lyngsat.com/Eutelsat-36A.html

  http://www.lyngsat.com/Eutelsat-36B.html

oraz przykładowo:
  http://www.lyngsat.com/packages/NC-.html

  http://www.lyngsat.com/packages/Cyfrowy-Polsat.html

  http://www.lyngsat.com/packages/Tricolor-TV-36E.html

  http://www.lyngsat.com/packages/NTV-Plus.html

(b) TEMATYKA: Parsowanie listy programów telewizyjnych (JSON): 
Pobieramy i analizujemy stronę (2):

  http://www.cyfraplus.pl/program

Po wykorzystaniu Firebug warto zobaczyć co jest pobierane, przykładowo:

  http://www.cyfraplus.pl/page/schedule/select_channels.ajax?channels=&sort=undefined

  http://www.cyfraplus.pl/page/schedule/broadcasts.json?date=2015-06-07&channels=ACN

  http://www.cyfraplus.pl/page/schedule/broadcasts.json?date=2015-06-09&channels=HBO

(c) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://tv.wp.pl

Po wykorzystaniu Firebug warto zobaczyć co jest pobierane, przykładowo:

  http://tv.wp.pl/program.html?name=TVP-1&stid=1&date=2015-06-10&time=

  http://tv.wp.pl/name,Polityka-przy-kawie,prid,8771120,opis.html

  http://tv.wp.pl/date,2015-06-10,name,TVN-24,stid,151,time,0,program.html

  http://tv.wp.pl/opisdlg.html?prid=8771120&name=Polityka-przy-kawie

(d) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://www.telemagazyn.pl

Po wykorzystaniu Firebug warto zobaczyć co jest pobierane, przykładowo:

  http://www.telemagazyn.pl/tvp_2/20150605,3,1,dz,go,cpr.html              
  http://www.telemagazyn.pl/wyszukiwarka/wyniki/22,20150605,3,1,1,1,st,dz,go,cpl,cpr,cpa.html

oraz przykładowo:
  http://www.telemagazyn.pl/tv/618165/wojciech-cejrowski-boso-przez-swiat

  http://www.telemagazyn.pl//tv/582002/ziemia-planeta-roslin

(e) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

Należy rozpracować stronę i pozyskać informację jak pobrać: listę kanałów, a przede wszystkim program tv dla pojedynczego kanału TV na konkretny okres.

  http://programtv.onet.pl

(f) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://www.vsetv.com

Po analizie (Firebug) sprawdzamy stosowne podstrony


(g) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://tv.mail.ru

Po analizie (Firebug) sprawdzamy stosowne podstrony


(g) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://tvprogram.idnes.cz/stanice.asp

Po analizie (Firebug) sprawdzamy stosowne podstrony


(h) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://www.programma.tv

Po analizie (Firebug) sprawdzamy stosowne podstrony


(i) TEMATYKA: Parsowanie listy programów telewizyjnych (HTML):
Pobieramy i analizujemy stronę (2):

  http://www.vida.ru/tvgrid/base.asp

Po analizie (Firebug) sprawdzamy stosowne podstrony

IV. TEMATY ZADAŃ

RADIO

VIDEO

provider

ścieżka AUDIO wraz
z informacją
o języku m.in. ścieżki:
E - English
Po - Polish

NA DANYM TRANSPONDERZE ZNAJDUJĄ SIĘ PROGRAMY WCHODZĄCE W SKŁAD PAKIETU I SĄ ONE WYŚWIETLANE NA STRONIE PAKIETÓW DANEGO PROVIDERA

11075 V

tp 128

UWAGI:

  1. (1)Celem aplikacji jest utworzenie bazy danych zawierającej (stosowne części) struktury opisywanej na stronach Lyngsat.
    Dokładnie chodzi o zapisanie informacji o satelitach, i ich lokalizacjach, transponderach, kanałach i pakietach.

    W szczególności ALGORYTM zadania 1A i 1C:
    - wejść na stronę (zapisaną w ustawieniach) www.lyngsat.com i następnie po sparsowaniu strony (jak sparsować jest zapisane w ustawieniach) pobieramy dane o grupach satelitów z całego świata (tak jak zaznaczono)

Wybieramy wiersz dla Satelites i pobieramy dane Asia, Europe, Atlantic i America, oraz obszary których dana grupa dotyczy, a także adresy WWW.
W GUI (1A/1C) użytkownik określa jaki zakres wschód E i zachód W go interesuje.
Następnie wielowątkowa aplikacja łączy się i pobiera dane dla wszystkich obszarów tworząc jedną listę satelitów.
Np. dla Europe (http://www.lyngsat.com/europe.html) wstępnie parsujemy

i odczytujemy:   nazwa satelitypozycja orbitalna  oraz  data modyfikacji.
Ostatecznie ma zostać wyświetlona lista satelitów w GUI (Zadanie A1 - wybrany zakres lub  całość) a stosowne pliki zostaną pobrane wielowątkowo i zapisane na dysk.

W przypadku zadania 1C, zostanie sprawdzone czy coś uległo zmianie i jeśli tak to baza o satelitach zostanie zaktualizowana. Zapisujemy: pozycja orbitalna, nazwa satelity, link (URL) do strony oraz data modyfikacji i data wprowadzenia przez nas zmiany (oraz charakter: dodanie satelity, usunięcie z listy, modyfikacja). Modyfikacja może mieć charakter: zmiany pozycji orbitalnej (rzadko) oraz modyfikacji listy kanałów transponderów, czyli wprowadzenie daty ostatniej zmiany tak, jak stanowi 3 kolumna w tabelce na rysunku powyżej. Na koniec pobieramy ze strony (jak poniżej i wybieramy tylko i wyłącznie listę transponderów (nazwa / częstotliwość i polaryzacja).

W przypadku zadania 1A:
- wejść na strony (zapisane w ustawieniach) i następnie po sparsowaniu strony (jak sparsować jest zapisane w ustawieniach Aplikacji) pobieramy dane o kanałach zawartych na wybranych satelitach i zapisujemy w pliku tekstowym.

Ważne (warianty):
- tylko pobieranie zadanej listy satelitów i zapisanie jej na dysk. Dla pobranego satelity wyświetlanie listy transponderów, zaś przy wybraniu listy transpondera wyświetlanie nazwy stacji, kodowania i kilku innych informacji. Ponadto informacji o pakietach TV.

- pobieranie zadanej listy satelitów i zapisanie sparsowanej informacji do bazy.
Proszę pamiętać przy tworzeniu bazy danych, że kanał (Channel Name) - jeden kanał może być na wielu satelitach, zaś na tym samym satelicie może być na różnych transponderach (nadajnikach) (Tp).

Dany transponder (Tp) jest przypisany oczywiście tylko do jednego satelity i ma określone parametry nadawania, tj. częstotliwość (Freq.) i polaryzacja. Polaryzacja może przyjmować jedną z czterech wartości: H, V, L i R, czyli odpowiednio: pozioma, pionowa, lewoskrętna i prawoskrętna. Transpondery nie muszą nadawać żadnych kanałów, lub mogą nadawać przekazy (feed) lub kanały radiowe czy telewizyjne, oraz inne dane (np. strumień danych - internet). Transmisja może być analogowa lub cyfrowa. Transmisja cyfrowa opisywana jest parametrami SR i FEC. Jeden transponder nadając cyfrowo może nadawać więcej niż jeden program TV/radio. Każdy taki kanał posiada unikalny identyfikator SID. Ponadto istotnym parametrem transmisji wideo jest przekaz wizji (parametr VPID) i fonii (APID). Stacje radiowe mają tylko parametr APID. Stacje telewizyjne mogą mieć więcej niż jedną ścieżkę AUDIO. Proszę zwrócić uwagę, że oznaczenia na Lyngsat nie odpowadają zdefiniowanym standardom (Po - Polish, E - English).

  1. (2) ALGORYTM zadania 1B:
    - pobranie listy kanałów TV dostępnych oraz zakresu czasu dla których dostępny jest EPG.
    - następnie należy pobrać programy dla 5 kanałów na 3 kolejne dni.
    - po pobraniu i zapisaniu na lokalny dysk należy odpowiednio sparsować opisy i umieścić je w bazie SQLite lub pliku XMLTV.
    - Czasem dostępny jest szczegółowy opis dla danej pozycji. Opis taki należy pobrać i po sparsowaniu umieścić w stosownym miejscu.
    UWAGA:
    Proszę sprawdzić za pomocą Firebug co i jak jest przekazywane, czasem stosowane są pobrania w oparciu AJAX, a wartości zwracana zgodnie z formatem JSON.

            W GUI pobranie winno być płynne, czyli najpierw pobierana jest lista dostępnych kanałów, oraz okres opisów EPG.
    Użytkownik zaznacza kilka kanałów TV oraz okres dla których nastąpi pobranie stacji TV.
            W przypadku aplikacji z zapisem do bazy danych można to zrealizować jako kilka osobnych aplikacji: pobranie listy programów - sprawdzenie w bazie / update / insert, tego czego nie ma. Druga aplikacja: użytkownik podając kody kanałów i konkretną datę wymusza pobranie EPG kanału (z pełną informacją o programie) i każdorazowo następuje aktualizacja bazy.


        W obu przypadkach (EPG) można to zrealizować jako kilka osobnych aplikacji: pobranie listy programów - zapisanie listy do pliku .properties. Druga aplikacja: użytkownik podając listę kodów kanałów i konkretne daty wymusza pobranie EPG kanałów (z pełną informacją o programie) a następnie zostanie stworzony stosowny plik XMLTV.

Dany kanał może być kodowany w więcej niż jednym systemie. Wynika to z tego, że jest on dołączaniu do pakietów więcej niż jednego providera - proszę przyglądnąć się tp128
i porównać z listą stacji wchodzących w skład pakietów (trzy rysunki poniżej).
                    
Rysunek pochodzi ze strony: http://www.lyngsat.com/Eutelsat-Hot-Bird-13A-13B-13C.html

Proszę także zwrócić uwagę na poniższe oznaczenie:

Widać z tego, że kanały providera zazwyczaj jednak nie są prezentowane na zbiorczej liście, lecz na liście kanałów oferowanych przez danego providera.

Klikając na literę P zobaczymy stronę: http://www.lyngsat.com/packages/NC-.html

Dopiero tutaj zobaczymy pełną listę stacji.
Poniżej wspomniana zdublowana informacja o kanałach z tp128 - też na stronie providera:
http://www.lyngsat.com/packages/NC-.html

Ostateczna rzecz którą należy zauważyć to kolory komórek tabeli. Legenda jest poniżej i informację tę również należy przetworzyć.

Ważne jest aby baza danych została sensownie rozplanowana zgodnie z informacjami zawartymi powyżej.

Osoby które nie zgłosiły do tej pory projektu wybierają go z listy na Doodle.

Cyfra oznacza: 

1. Parser:  stosujemy JSoup lub Jericho

  1. 2.GUI do bazy danych SQLite.

  2. 3.GUI do plików konfiguracyjnych dekodera z systemem ENIGMA.

PROSZĘ WYBRAĆ JEDEN INDYWIDUALNY TEMAT na Doodle

2 - GUI dla bazy SQLite

Należy zaprojektować określoną strukturę bazy danych (minimum 3 tabele). Zastoswać normalizację w celu zdefiniowania optymalnej struktury. Używać należy kluczy obcych.
Aplikacja winna wspierać przeglądanie, aktualizację danych, usuwanie rekordów i wporwadzanie nowych.

Kilka tabel winno zawierać stałe wartości - polecam pobrać: http://www.softpedia.com/progDownload/SQlite-Designer-Download-170178.html  lub  http://sourceforge.net/projects/sqlitebrowser/files/latest/download