-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Tematem mojej pracy było napisanie uniwersalnego parsera rozkładów jazdy komunikacji miejskiej, który będzie potrafił przekonwertować je do uniwersalnego formatu, niezależnie od źródła danych. Po stworzeniu takiej bazy danych programiści będą mogli bez przeszkód tworzyć oprogramowanie wykorzystujące zgromadzone dane.
Wyciąganie, z oficjalnych stron internetowych polskich przewoźników miejskich, rozkładów jazdy i konwertowanie ich do przyjaznego formatu JSON. Program ma być kompatybilny w każdym typem rozkładów jazdy w języku HTML, a dodanie kolejnych miast ma nie wymagać niczego więcej, niż dodania paru linii konfiguracji.
Projekt został napisany w języku Javascript i wykorzystuje framework node.js i jego bilbioteki:
- jsdom - drzewo DOM w języku JavaScript, sizzle - implementacja selektorów
- CSS3 w jęzuku JavaScript, couchdb - komunikacja z bazą danych.
Wygenerowane dane zapisywane są w dokumentowej bazie danych CouchDB, która udostępnia RESTful HTTP API, co daje niezależnym programistom natchmiastowy dostęp do danych.
Aby dodać nowe źródło rozkładów należy dodać do pliku konfiguracyjnego wpis z następującymi informacjami:
- code - identyfikator bazy danych
- server - źródło danych, serwer HTTP
- home - url strony z wykazem wszystkich linii
- encoding - kodowanie znaków na stronie
- get - tablica haszująca z selektorami CSS
- lines - linki do trasy linii
- timetables - linki do rozkładów jazdy linii
- opposite - (opcjonalnie) link do przecinej linii (tylko jeżeli nie jest zawarta w lines)
- expiration - tekst zawierający informacje o dacie ważności rozkładu wraz z formatem (regexp)
- line_no - numer linii
- stop_name - nazwa przystanku
- route - trasa lub przystanke docelowy
- context - zbiór liści na drzewie DOM zawierający jedną z poniższych informacji
- days - opis dnia w którym obowiązuje rozkład
- hours - godzina odjazdu
- minutes - minuty lub minuta odjazdu
Uważam, że stworzona przeze mnie aplikacja może okazać się bardzo przydatna, gdyż spełnia wszystkie rygorystyczne założenia początkowe. W idealnym świecie nie istnieją programy implementujące tzw. odwrotną inżynierię, ale w rzeczywistości żaden przewoźnik nie udostępnia interfaców programistycznych i uzyskanie różnych ważnych danych staje się skomplikowane, dlatego uważam że warto im w tym pomóc.