RSS_READER_v0.1 - prosty czytnik wiadomości a kanału RSS TVP
Autor: Radosław
Ilnicki
Prowadzący: dr
inż. Witold Paluszyński.
Data wykonania:
17.06.2007 r.
Zadnie, w głównym stopniu, polegało na stworzenie aplikacji, która umożliwi pobieranie informacji z kanału RSS, a następnie pozwoli na wyszukiwanie w niej interesujących nas informacji. Informacje, które dla potrzeb tego projektu zostaną wykorzystane, dotyczą ogólnie rzecz ujmując sportu. Pobierane zostaną z kanału Telewizji Polskiej: (http://tvp.pl/rss/125.xml)
RSS czyli Really Simple Syndication to, mówiąc najprościej, umowna rodzina języków znacznikowych do przesyłania nagłówków wiadomości. Wszystkie z rodziny tych języków w większym lub mniejszym zakresie bazują na XML-u. Aby skorzystać z kanału RSS, potrzebny jest odpowiedni program, tzw. czytnik kanałów, który umożliwi odczytanie jego specyficznej, ale dość prostej składni. Programy takie są dostępne jako zupełnie samodzielnie aplikacje, lub jako elementy program. Tak właśnie jest w przypadku min. najnowszej wersji programu Mozilla Firefox. Wstępnie czytnik taki możemy wykorzystać do pobierania danych do dalszej, bardziej skomplikowanej analizy.
Dane zawarte w kanałach RSS posiadają zazwyczaj krótkie
informacje na jakiś temat, będące swoistym streszczeniem jakiejś
większej ilości informacji, których RSS dotyczy. Przykładowe
informacje pobrane z RSS, po wyeliminowaniu elementów składni
XML'a mogą wyglądać następując:
Title : Smolarek: to był
przełomowy moment meczu
Description: Zdaniem zdobywcy pierwszej bramki
dla Polski w wygranym 3:1sobotnim meczu eliminacji mistrzostw Europy
w Baku z Azerbejdżanem Euzebiusza Smolarka, był to przełomowy i
najważniejszy moment tego spotkania. Był to jego czwarty gol w
obecnych eliminacjach.
Title: Alonso szybki w Indianapolis
Discription : Mistrz świata Fernando Alonso
(McLaren-Mercedes) uzyskał najlepszy czas na drugim treningu przed
niedzielnym wyścigiem o Grand Prix USA Formuły 1 na torze w
Indianapolis. Hiszpan był najszybszy także podczas pierwszej sesji.
gdzie Title
to tytuł
wiadomości, natomiast Description
to
dłuższy opis, z którego możemy pobrać trochę więcej
informacji.
Poniżej znajduje się opis sposobu wykonania aplikacji, jak również sposób jej obsługi, dane, które możemy dzięki niej uzyskać, oraz krótki przykład działania.
W chwili wykonywania raportu program umożliwiał przede wszystkim:
Pobieranie nowych wiadomości z kanału RSS po sprawdzeniu, czy wcześniej nie były już pobrane.
Wyszukiwanie danych na temat zadeklarowany przez użytkownika.
Wyświetlanie listy tytułów artykułów znajdujących się w pliku, zawierających dane na zadany temat
Wyświetlanie na życzenie opisu wybranego tematu z listy znalezionych.
Zasadnicza część założenia projektowego, związanego z wykonaniem samego czytnika, z parsowaniem danych do odpowiedniego formatu, oraz umożliwiająca wyszukiwanie istotnych informacji, stworzyłem przy wykorzystaniu języka C.
Pobieranie pliku ze RSS zostało wykonane przy użyciu
darmowego programu dostępnego dla systemów Linux, a mianowicie
wget
. Jego wywołanie z programu
głównego, jako oddzielnego proces, przy użyciu funkcji execlp
,
dla kanału RSS, z którego pobierałem dane, spowoduje
wygenerowanie pliku 125.xml, który zawiera źródło
kanału. Dla zapobieżenia wysyłania na ekran informacje o procesach
dokonywanych podczas pobierania, program został wywołana z opcję -q
(quiet). Plik ten następnie poddawany jest parsowaniu w taki sposób,
aby po zakończeniu procesu w pliku zawierającym uzyskane dane
pozostał tylko tytuł artykułu, oraz jego opis.
Oczywiście nie jest tak, że musimy dane pobrać. Plik, z którego wzięte zostaną dane do analizy nawet bez wykonania tego posiada kilkadziesiąt artykułów.
Program posiada procedurę weryfikującą pobrane dane. Jeśli okaże się, że najnowsze dane zostały już wcześniej pobrane, nie nastąpi ich dopisanie do pliku, co zapobiega powtarzaniu się informacji, co podczas wyświetlania mogłoby być wyjątkowo irytujące.
Jeszcze jedną bardzo istotną sprawą, jest fakt, że
aplikacja napisana jest na platformy Linuxowe. Wykorzystanie programu
wget,
co najmniej w dużym stopniu,
utrudnia pracę pod systemami z rodziny Windowsem. Jednak to nie
wszystko na co należy zwrócić uwagę. Sprawa kodowania polskich
znaków również ma znaczenia. Dla dystrybucji Ubuntu,
pod którą program działał, mamy do czynienia z kodowaniem
utf-8
. Program nie daje gwarancji
prawidłowego działania na dystrybucjach posiadających inne formaty
kodowania.
Program umożliwia użytkownikowi wyszukanie w pobranych interesujących go informacji przez wpisanie po zapytaniu zagadnienia, które chce odnaleźć. Wpisane przez niego zagadnienie jest interpretowane jako jeden długi ciąg znaków, który będzie wyszukiwany. Wyszukiwanie polega na porównaniu zgodności wszystkich znaków zagadnienia z danymi w pliku zawierającym pobrane informacje. Procedura wyszukiwania przeszukuje zarówno tytuły artykułów, jak i ich opisy, zapamiętując przy tym, w którym artykule znaleziono interesujące użytkownika zagadnienie. Te dane posłużą do wyświetlania informacji.
Jeśli nie chcemy wyszukiwać żadnych informacji, musimy,
po pojawieniu się zapytania o interesujący nas temat, wpisać #exit
.
Spowoduje to opuszczenie programu.
Po dokonaniu przeszukiwania można wyświetlić jego wyniki, pod warunkiem oczywiście, że coś zostało znalezione. Pierwsze wyświetlanie interesujących użytkownika danych, polega na ukazaniu ponumerowanej listy tematów artykułów, które zawierają informacje na podane wcześniej zagadnienie. Dzięki temu istnieje możliwość podglądnięcia wyniku poszukiwania, co sprawia, możemy wyboru artykułu zawierającego informacje, o które faktycznie chodziło.
Jeśli jakiś temat jest dla nas szczególnie interesujący możemy pobrać jego pełny opis przez podanie jego numeru na liście tematów wyświetlonych. Możliwość takiego wyświetlania jest powodowana działaniem pętli dającej zapytania o tematy których opisy chcemy uzyskać. Aby pętlę tą opuścić musimy podać wartość liczbową większą niż ilość tematów występujących na liście.
Fakt podania właśnie wartości liczbowej jest tu nad wyraz istotny, ponieważ, w momencie tworzenia raportu, nie było zabezpieczenia przed wprowadzeniem wartości nieliczbowej. Wprowadzenia innej wartości spowoduje błędne działanie aplikacji, co skończy się wpadnięciem w pętlę bez wyjścia. W tej sytuacji pozostaje jedynie zatrzymanie programu.
******************************************************
|Witaj uzytkowniku w programie RSS-READER_v0.1,
ktory|
|sluzy do uzyskiwania danych z kanalu sportowego
RSS |
|Telewizji Polskiej - http://tvp.pl/rss/125.xml |
|Znajdziesz tu najnowsze informacje ze wszystkich
|
|dyscyplin sportu. Milej zabawy |
******************************************************
Czy chcesz dodać nowe informacje Podanie t doda
nowe informacje - t
Dane wczesnej pobrano
Jakie zagadnienie Cie interesuje (wyjscie -
#exit)
Kub
Do zapytania o Kub znalazlem 1 tematy:
1 - *Vettel czwarty na treningu
Czy wyswieltlic ktorys (wyjscie = podaj cyfre
wieksza niz ilosc tematow):
1
***********************************************************************
Zastępujący w teamie BMW_Sauber Roberta Kubicę
19-letni Niemiec Sebastian Vettel uzyskał czwarty czas na treningu
przed niedzielnym wyścigiem o Grand Prix USA Formuły 1 na torze w
Inianalpolis. Najszybszy był obrońca tytułu mistrza świata Hiszpan
Fernando Alonso (McLaren-Mercedes)
***********************************************************************
Czy wyswieltlic ktorys (wyjscie = podaj cyfre
wieksza niz ilosc tematow):
2
Jakie zagadnienie Cie interesuje (wyjscie -
#exit)
ALmn
Nie znalazlem zapytanie do ALmn
Jakie zagadnienie Cie interesuje (wyjscie -
#exit)
#exit
*****************************************************
|Do widzenia. Milego dnia |
*****************************************************
Jak widać podstawowe zadanie stworzenia czytnika RSS udało się bardzo dobrze. Pobiera on prawidłowo dane, oraz umożliwia ich selekcję na podstawie prostych zapytań. Dane są przechowywane w sposób łatwy do dalszej analizy.
Kolejnym krokiem w celu ulepszania aplikacji, nie związanym bezpośrednio z kanałem RSS, jest sprzężenie z jakimś językiem, który pozwoli nadać jej dodatkowo charakter informatycznego, pseudointeligentnego bota.
Z moich dotychczasowych doświadczeń stawiałbym tu na język regałowy AIML. Jest on bowiem dość intuicyjny, a ponadto powinien dość łatwo poradzić sobie z danymi przechowywanymi w wyżej opasanej formie, i wygenerować odpowiednią ilość regał dla prowadzenia z użytkownikiem czegoś na kształt wymiany zdań.
Odnośnie RSS:
http://sequoia.ict.pwr.wroc.pl/~witold/aiuwr/2006_projekty/PiotrWolny/
http://pl.wikipedia.org/wiki/RSS
Odnośnie AIML
http://www.alicebot.org/TR/2005/WD-aiml/
http://www.pandorabots.com/pandora/pics/wallaceaimltutorial.htm