Fix up time display format
[bus.git] / maxious-canberra-transit-feed / 01-extracttimes.rb
blob:a/maxious-canberra-transit-feed/01-extracttimes.rb -> blob:b/maxious-canberra-transit-feed/01-extracttimes.rb
--- 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 != "<br/>"
 			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