0.0
No commit activity in last 3 years
No release in over 3 years
metra_schedule provides a ruby object interface to the Chicago metra train schedule
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

>= 1.4.1
 Project Readme

metra_schedule: A library to access the Chicago Metra schedule information as Ruby objects.¶ ↑

This is the data library that powers metra.blakesmith.me

Supported Lines:

Union Pacific Northwest => :up_nw
Union Pacific North => :up_n
North Central Service => :ncs
Milwaukee District West => :md_w
Milwaukee District North => :md_n
Union Pacific West => :up_w
BNSF Railway => :bnsf
Heritage Corrider => :hc
Southwest Service => :sws
Rock Island District => :ri
Metra Electric District => :me

metra_schedule provides:

Scraper

scrapes the metrarail.com website for schedule information.

Schedule objects

The scraper creates ruby objects for lines, trains and stops

Cacher

After a schedule is scraped, it can be serialized locally for subsequent object access

Flexible Query Language

Build complex scheduling constraints and permutations with the various query methods.

Usage¶ ↑

How to use metra_schedule

Setup¶ ↑

gem install metra_schedule -s http://gemcutter.org

Using¶ ↑

require 'metra'
line = Metra.new.line(:up_nw) # Union pacific Northwest line
line.load_schedule

Building a list of trains¶ ↑

# All outbound trains
line.outbound.trains

# All outbound weekday trains
line.outbound.weekday.trains

# All inbound saturday trains that start at Barrington and end at Ogilve
line.inbound.saturday.from(:barrington).to(:ogilve).trains

# All sunday/holiday outbound trains that start at Arlington Heights after 12:30PM and stop at Park Ridge
line.outbound.holiday.from(:arlington_heights).at(Time.parse('12:30PM')).to(:park_ridge).trains

# All inbound trains on December 30th 2009
line.inbound.on(Date.parse("December 30th 2009")).trains

Trains¶ ↑

Instance variables:¶ ↑

train.train_num

Metra train number.

train.stops

An array of all Stop objects. Contains the stop name and what time the train will arrive at that stop

train.schedule

Symbol representing the day the train runs. Either :weekday, :saturday, or :sunday (holidays run on a sunday schedule)

train.direction

Symbol representing the train direction. Either :inbound or :outbound

train.bike_limit

Maximum number of bikes per train. nil if no limit.

Instance methods:¶ ↑

train.my_travel_time

Travel time in minutes of your trip. Assumes you specified Line#from and Line#to when you built your query

train.print_my_travel_time

Same as above, but in human readable form EG - “1 hour 2 minutes”

train.has_stop?(stop)

Takes a station name symbol and determines whether this train has that stop

train.in_time?(station, time)

Takes a station name symbol and time. Returns true if the time is before the time the train reaches that stop

Stops¶ ↑

Stored inside each train.

Instance variables:¶ ↑

stop.station

Symbol representing the station name

stop.time

Time object with the time the train stops there

Instance methods:¶ ↑

stop.in_time?(time)

True if time is less than stop.time

Class methods:¶ ↑

Stop.pretty_print(station)

Converts the station symbol to something human readable - EG: :irving_park becomes “Irving Park”

Lines¶ ↑

Instance variables:¶ ↑

line.line_key

Symbol of the line name

line.name

Human readable line name EG - “Union Pacific Northwest”

line.url

Url that the parser scrapes from.

line.dir

Symbol representing selected line direction. :outbound or :inbound. Set with Line#outbound Line#inbound or deduced using Line#from and Line#to

line.sched

Symbol representing selected line schedule. :weekday, :saturday or :sunday. Set with Line#weekday, Line#saturday Line#sunday Line#on(date) or Line#deduce_schedule

line.start

Symbol representing starting station name. EG - :clyborn. Set with Line#from

line.destination

Symbol representing destanation station name. EG - :ogilve. Set with Line#to

line.time

Time object representing the time you’d like to depart. Used to filter down lines. Set with Line#at

Instance methods:¶ ↑

line.load_schedule

Load cached engine data from Marshaled cache dir (~/.metra_schedule) or if not available, fetch from the Metra website, parse and cache it

line.trains

Takes in all the other parameters you specified and returns only the trains that meet the criteria you specfied

line.from(station)

Set your starting station

line.to(station)

Set your destination station

line.direction(dir)

Set the line direction. :outbound or :inbound

line.outbound

Same as line.direction(:outbound)

line.inbound

Same as line.direction(:inbound)

line.deduce_direction

Infers line direction if you specified Line#from and Line#to

line.schedule(sched)

Sets the line schedule. Either :weekday :saturday or :sunday

line.weekday

Same as line.direction(:weekday)

line.saturday

Same as line.direction(:saturday)

line.sunday

Same as line.direction(:sunday)

line.holiday

Same as line.direction(:sunday)

line.on(date)

Sets schedule using the date you specified

line.deduce_schedule

Same as on(Date.today)

line.at(time)

Sets line time. Specifying this will only display trains that appear at your starting station (specified with Line#from) before the given time

Line Data¶ ↑

Current supported lines:

Union Pacific Northwest => :up_nw¶ ↑

stations:

:ogilve,
:clyborn,
:irving_park,
:jefferson_park,
:gladstone_park,
:norwood_park,
:edison_park,
:park_ridge,
:dee_road,
:des_plaines,
:cumberland,
:mount_prospect,
:arlington_heights,
:arlington_park,
:palatine,
:barrington,
:fox_river_grove,
:cary,
:pingree_road,
:crystal_lake,
:woodstock,
:mchenry,
:harvard

Union Pacific North => :up_n¶ ↑

stations:

:ogilve,
:clyborn,
:ravenswood,
:rogers_park,
:evanston_main_street,
:evanston_davis_street,
:evanston_central_street,
:wilmette,
:kenilworth,
:indian_hill,
:winnetka,
:hubbard_woods,
:glencoe,
:braeside,
:ravinia_park,
:ravinia,
:highland_park,
:highwood,
:fort_sheridan,
:lake_forest,
:lake_bluff,
:greate_lakes,
:north_chicago,
:waukegan,
:zion,
:winthrop_harbor,
:kenosha

North Central Service => :ncs¶ ↑

stations:

:union_station,
:western_avenue,
:river_grove,
:franklin_park,
:schiller_park,
:rosemont,
:ohare_transfer,
:prospect_heights,
:wheeling,
:buffalo_grove,
:prairie_view,
:vernon_hills,
:mundelein,
:libertyville,
:grayslake,
:round_lake_beach,
:lake_villa,
:antioch

Milwaukee District West => :md_w¶ ↑

stations:

:union_station,
:western_avenue,
:grand_cicero,
:hanson_park,
:galewood,
:mars,
:mont_clare,
:elmwood_park,
:river_park,
:franklin_park,
:mannheim,
:bensenville,
:wood_dale,
:itasca,
:medinah,
:roselle,
:schaumburg,
:hanover_park,
:bartlett,
:national_street,
:elgin,
:big_timber

Union Pacific West => :up_w¶ ↑

stations:

:ogilve,
:kedzie,
:oak_park,
:river_forest,
:maywood,
:melrose_park,
:bellwood,
:berkeley,
:elmhurst,
:villa_park,
:lombard,
:glen_ellyn,
:college_avenue,
:wheaton,
:winfield,
:west_chicago,
:geneva,
:la_fox,
:elburn

BNSF Railway => :bnsf¶ ↑

stations:

:union_station,
:halsted,
:western_avenue,
:cicero,
:lavergne,
:berwyn,
:harlem_ave,
:riverside,
:hollywood,
:brookfield,
:congress_park,
:lagrange_road,
:lagrange_stone_avenue,
:western_springs,
:highlands,
:hinsdale,
:west_hinsdale,
:clarendon_hills,
:westmont,
:fairview_avenue,
:downers_grove_main_street,
:belmont,
:lisle,
:naperville,
:route_59,
:aurora

Heritage Corrider => :hc¶ ↑

stations:

:union_station,
:summit,
:willow_springs,
:lemont,
:lockport,
:joliet

Rock Island District => :ri¶ ↑

stations:

:chicago_lasalle_station,
:gresham,
:longwood,
:washington_heights,
:brainerd,
:beverly_hills_91_street,
:beverly_hills_95_street,
:beverly_hills_99_street,
:beverly_hills_103_street,
:beverly_hills_107_street,
:morgan_park_111_street,
:morgan_park_115_street,
:street_119,
:street_123,
:prairie_street,
:blue_island,
:robbins,
:midlothian,
:oak_forest,
:tinley_park,
:tinley_park_80_avenue,
:hickory_creek,
:mokena,
:new_lenox,
:joliet

Metra Electric District => :me¶ ↑

stations:

:milennium_station,
:van_buren_street,
:museum_campus,
:street_18,
:mccormick_place,
:street_27,
:street_47,
:street_51_53,
:street_55_56_57,
:street_59,
:street_63,
:street_75,
:street_79,
:street_83,
:street_87,
:street_91,
:street_95,
:street_103,
:street_107,
:street_111,
:street_115,
:riverdale,
:ivanhoe,
:street_147,
:harvey,
:hazel_crest,
:calumet,
:homewood,
:flossmoor,
:olympia_fields,
:street_211,
:matteson,
:richton_park,
:university_park,
:stony_island,
:bryn_mawr,
:south_shore,
:windsor_park,
:street_79,
:street_83,
:street_87,
:street_93,
:state_street,
:stewart_ridge,
:west_pullman,
:racine,
:ashland,
:burr_oak,
:blue_island