--- a/maxious-canberra-transit-feed/01-extracttimes.rb +++ b/maxious-canberra-transit-feed/01-extracttimes.rb @@ -11,7 +11,7 @@ def makeTimetable(table, period, short_name) - timetable = {"stop_times" => [], "between_stops" => [], "short_name" => short_name} + timetable = {"between_stops" => [], "short_name" => short_name} time_points = table.xpath('tr[1]//th').map do |tp| if tp.content != "\302\240" && tp.content != "" && tp.content != "
" timing_point = tp.content.squeeze(" ").gsub("\r\n Platform"," - Platform").gsub(" - "," - ").gsub("\n","").gsub("\r","").gsub("\\"," / ").strip @@ -23,8 +23,11 @@ periodtimes = [] table.css('tr').each do |row| times = row.css('td').map do |cell| - #TODO convert to GTFS time ie. replace " AM" with a time = cell.content.squeeze(" ").strip + time = time.gsub(" AM","a").gsub(" PM","p").gsub("12:08 AM","1208x").gsub(":","").gsub("1.","1").gsub("2.","2") + time = time.gsub("3.","3").gsub("4.","4") + time = time.gsub("5.","5").gsub("6.","6").gsub("7.","7").gsub("8.","8").gsub("9.","9").gsub("10.","10") + time = time.gsub("11.","11").gsub("12.","12").gsub(/\.+/,"-") end if not times.empty? if not (route = times.shift) @@ -36,7 +39,7 @@ if periodtimes.size < 1 raise "No times for route " + short_name + " in period " + period end - timetable["stop_times"] = { period => periodtimes.to_a } + timetable[period] = periodtimes.to_a # pp timetable filename = timetable["short_name"] + "-" + timetable["long_name"].downcase.gsub(" ","-").gsub("/","") + "." + period + ".yml" puts "Saving " + filename @@ -61,26 +64,26 @@ end doc.xpath('//table[preceding::text()="Weekdays"]').each do |table| - timetables << makeTimetable(table, "weekday", short_name) + timetables << makeTimetable(table, "stop_times", short_name) end #weekends doc.xpath('//table[preceding::text()="Saturdays" and following::a]').each do |table| - timetables << makeTimetable(table, "saturday", short_name) + timetables << makeTimetable(table, "stop_times_saturday", short_name) end doc.xpath('//table[preceding::text()="Sundays"]').each do |table| - timetables << makeTimetable(table, "sunday", short_name) + timetables << makeTimetable(table, "stop_times_sunday", short_name) end #930/934 special cases doc.xpath('//table[preceding::text()="Saturday" and following::h2]').each do |table| - timetables << makeTimetable(table, "saturday", short_name) + timetables << makeTimetable(table, "stop_times_saturday", short_name) end doc.xpath('//table[preceding::text()="Sunday"]').each do |table| - timetables << makeTimetable(table, "sunday", short_name) + timetables << makeTimetable(table, "stop_times_sunday", short_name) end #route 81 = Weekdays - School Holidays Only doc.xpath('//table[preceding::text()="Weekdays - School Holidays Only "]').each do |table| - timetable = makeTimetable(table, "weekday", short_name) + timetable = makeTimetable(table, "stop_times", short_name) #TODO set active date range to only be holidays timetables << timetable; end