Skip to content
Stanisław Wasiutyński edited this page Dec 22, 2010 · 4 revisions

Wstęp

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.

Zakres projektu

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.

Specyfikacja techniczna

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.

Konfiguracja

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

Podsumowanie

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.

Clone this wiki locally