cta-api 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cta-api.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 fbonetti
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,91 @@
1
+ ## Install
2
+
3
+ Via rubygems.org:
4
+
5
+ ```
6
+ $ gem install cta-api
7
+ ```
8
+
9
+ ## Usage
10
+
11
+ This gem allows you to access the Chicago Transit Authority API via Ruby. You can track the real-time locations of all public transportation vehicles, including buses and trains. You can obtain API keys from the CTA website:
12
+
13
+ http://www.transitchicago.com/developers/bustracker.aspx
14
+ http://www.transitchicago.com/developers/traintracker.aspx
15
+
16
+ ## Bus Tracker
17
+
18
+ ### Setup
19
+
20
+ ``` ruby
21
+ require 'cta-api'
22
+
23
+ key = "XXXXXXXXXXXXXXXXXXXXXXXXX"
24
+ @tracker = CTA::TrainTracker.new(key)
25
+ ```
26
+
27
+ ### Find Routes and Stops
28
+
29
+ ``` ruby
30
+ # list all available routes
31
+ @tracker.routes
32
+
33
+ # gets the available directions for the specified route (north, south, etc.)
34
+ @tracker.route_directions("50")
35
+
36
+ # list all stops that belong to a particular route
37
+ @tracker.stops("50", :north)
38
+ ```
39
+
40
+ ### Find Vehicles
41
+
42
+ ``` ruby
43
+ # returns an array of vehicles that travel the given routes
44
+ @tracker.vehicles_by_routes(["50", "52A"])
45
+
46
+ # returns an array of vehicles with the given vehicle ids
47
+ @tracker.vehicles_by_ids(["1782", "1419", "1773"])
48
+ ```
49
+
50
+ ### Get Predicted Arrival Times
51
+
52
+ ``` ruby
53
+ # get arrival times for a list of stop ids
54
+ # note that the second argument is optional
55
+ @tracker.predictions_by_stop_ids(["8751", "8752"], "50")
56
+
57
+ # get arrival times for a list of vehicle ids
58
+ @tracker.predictions_by_vehicle_ids(["1782", "1419", "1773"])
59
+ ```
60
+
61
+ ### Get System Time
62
+ ``` ruby
63
+ @tracker.time
64
+ ```
65
+
66
+ ## Train Tracker
67
+
68
+ ### Setup
69
+
70
+ ``` ruby
71
+ require 'cta-api'
72
+
73
+ key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
74
+ tracker = CTA::TrainTracker.new(key)
75
+ ```
76
+
77
+ ## Get a List of Stops and Stations
78
+
79
+ ``` ruby
80
+ # stops
81
+ @tracker.stops
82
+
83
+ # stations
84
+ @tracker.stations
85
+ ```
86
+
87
+ ## Get Predicted Arrival Times
88
+
89
+ ``` ruby
90
+ @tracker.arrivals stop_id: "30106"
91
+ ```
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'cta-api'
3
+ s.version = '1.0.0'
4
+ s.author = 'Frank Bonetti'
5
+ s.date = '2013-02-02'
6
+
7
+ s.license = 'MIT'
8
+ s.platform = Gem::Platform::RUBY
9
+
10
+ s.description = 'An easy way to access the Chicago Transit Authority API via the Ruby programming language'
11
+ s.summary = 'An easy way to access the Chicago Transit Authority API via the Ruby programming language'
12
+ s.email = 'frank.r.bonetti@gmail.com'
13
+
14
+ s.require_paths = ['lib']
15
+ s.files = Dir.glob("**/*").reject { |x| File.directory?(x) }
16
+ s.add_dependency('nokogiri', '>= 1.5.6')
17
+ end
@@ -0,0 +1,208 @@
1
+ module CTA
2
+ class BusTracker
3
+
4
+ def initialize(key)
5
+ @key = key
6
+ end
7
+
8
+ def time
9
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/gettime?"
10
+ url = "#{ base_url}key=#{ @key }"
11
+ Time.parse(Nokogiri::XML(open(url)).at("//tm").text)
12
+ end
13
+
14
+ def vehicles_by_routes(routes)
15
+ if routes.kind_of?(Array)
16
+ full_array = []
17
+ until routes.size == 0
18
+ full_array << vehicles(route: routes.shift(10))
19
+ end
20
+ full_array.flatten!
21
+ else
22
+ raise ArgumentError.new "Argument must be an Array."
23
+ end
24
+ end
25
+
26
+ def vehicles_by_ids(vids)
27
+ if vids.kind_of?(Array) && routes.size.between(1,10)
28
+ vehicles(vid: vids)
29
+ else
30
+ raise ArgumentError.new "must be an Array with 1 to 10 elements."
31
+ end
32
+ end
33
+
34
+ def patterns_by_route(route)
35
+ if route.kind_of?(String) && route.length > 0
36
+ patterns(route: route)
37
+ else
38
+ raise ArgumentError.new "must be a String with a length greater than zero."
39
+ end
40
+ end
41
+
42
+ def patterns_by_ids(pid)
43
+ if pid.kind_of?(Array) && pid.size.between?(1,10)
44
+ patterns(pid: pid)
45
+ else
46
+ raise ArgumentError.new "must be an Array with 1 to 10 elements."
47
+ end
48
+ end
49
+
50
+ def predictions_by_stop_ids(stop_id, route="")
51
+ if stop_id.kind_of?(Array) && stop_id.size.between?(1,10)
52
+ predictions(stop_id: stop_id, route: route)
53
+ else
54
+ raise ArgumentError.new "must be an Array with 1 to 10 elements."
55
+ end
56
+ end
57
+
58
+ def predictions_by_vehicle_ids(vid)
59
+ if vid.kind_of?(Array) && vid.size.between?(1,10)
60
+ predictions(vid: vid)
61
+ else
62
+ raise ArgumentError.new "must be an Array with 1 to 10 elements."
63
+ end
64
+ end
65
+
66
+ def routes
67
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getroutes?"
68
+ url = "#{ base_url }key=#{ @key }"
69
+ route_hash = {}
70
+ Nokogiri::XML(open(url)).xpath("//route").each do |route|
71
+ route_hash[route.at("rt").text] = route.at("rtnm").text
72
+ end
73
+ route_hash
74
+ end
75
+
76
+ def route_directions(route)
77
+ if route.kind_of?(String)
78
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getdirections?rt=#{ route }"
79
+ url = "#{ base_url }&key=#{ @key }"
80
+ Nokogiri::XML(open(url)).xpath("//dir").map { |x| x.text.split(/ /)[0].to_sym }
81
+ end
82
+ end
83
+
84
+ def stops(route, direction)
85
+ if (route.kind_of?(String) || route.kind_of?(Integer)) && direction.kind_of?(Symbol)
86
+ direction = direction.to_s + "+bound"
87
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getstops?"
88
+ url = "#{ base_url }key=#{ @key }&rt=#{ route }&dir=#{ direction }"
89
+
90
+ stop_array = Nokogiri::XML(open(url)).xpath("//stop").map do |item|
91
+ Stop.new({
92
+ :id => item.at("stpid").text,
93
+ :name => item.at("stpnm").text,
94
+ :latitude => item.at("lat").text,
95
+ :longitude => item.at("lon").text
96
+ })
97
+ end
98
+ stop_array
99
+ end
100
+ end
101
+
102
+ def service_bulletins(params)
103
+ route = params[:route] || []
104
+ route_direction = params[:route_direction]
105
+ stop_id = params[:stop_id] || []
106
+
107
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getservicebulletins?"
108
+ url = "#{ base_url }key=#{ @key }&rt=#{ route.join(',') }&rtdir=#{ route_direction }&stpid=#{ stop_id.join(',') }"
109
+ puts url
110
+
111
+ bulletin_array = Nokogiri::XML(open(url)).xpath("//sb").map do |item|
112
+ ServiceBulletin.new({
113
+ :name => item.at("nm") && item.at("nm").text,
114
+ :subject => item.at("sbj") && item.at("sbj").text,
115
+ :detail => item.at("dtl") && item.at("dtl").text.gsub("<br/>", "\n").strip,
116
+ :brief => item.at("brf") && item.at("brf").text,
117
+ :priority => item.at("prty") && item.at("prty").text,
118
+ :services => item.xpath("srvc") && item.xpath("srvc").map do |subitem|
119
+ ServiceBulletin::Service.new({
120
+ :route => subitem.at("rt") && subitem.at("rt").text,
121
+ :route_direction => subitem.at("rtdir") && subitem.at("rtdir").text,
122
+ :stop_id => subitem.at("stpid") && subitem.at("stpid").text,
123
+ :stop_name => subitem.at("stpnm") && subitem.at("stpnm").text
124
+ })
125
+ end
126
+ })
127
+ end
128
+ bulletin_array
129
+ end
130
+
131
+ private
132
+
133
+ def vehicles(params)
134
+ route = params[:route] || []
135
+ vid = params[:vid] || []
136
+
137
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getvehicles?"
138
+ url = "#{ base_url }key=#{ @key }&rt=#{ route.join(",") }&vid=#{ vid.join(",") }"
139
+
140
+ vehicle_array = Nokogiri::XML(open(url)).xpath("//vehicle").map do |item|
141
+ Vehicle.new({
142
+ :id => item.at("vid").text,
143
+ :timestamp => Time.parse(item.at("tmstmp").text),
144
+ :latitude => item.at("lat").text,
145
+ :longitude => item.at("lon").text,
146
+ :heading => item.at("hdg").text,
147
+ :pattern_id => item.at("pid").text,
148
+ :pattern_distance => item.at("pdist").text,
149
+ :destination => item.at("des").text,
150
+ :delay => item.at("dly") && item.at("dly").text.to_bool
151
+ })
152
+ end
153
+ vehicle_array
154
+ end
155
+
156
+ def patterns(params)
157
+ route = params[:route]
158
+ pid = params[:pid] || []
159
+
160
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getpatterns?"
161
+ url = "#{ base_url }key=#{ @key }&rt=#{ route }&pid=#{ pid.join(",") }"
162
+
163
+ pattern_array = Nokogiri::XML(open(url)).xpath("//ptr").map do |item|
164
+ Pattern.new({
165
+ :id => item.at("pid").text,
166
+ :length => item.at("ln").text.to_f,
167
+ :direction => item.at("rtdir").text,
168
+ :points => item.xpath("pt").map do |subitem|
169
+ Pattern::Point.new({
170
+ :sequence => subitem.at("seq").text,
171
+ :latitude => subitem.at("lat").text,
172
+ :longitude => subitem.at("lon").text,
173
+ :type => subitem.at("typ").text == "S" ? "stop" : "waypoint",
174
+ :id => subitem.at("stpid") && subitem.at("stpid").text,
175
+ :name => subitem.at("stpnm") && subitem.at("stpnm").text,
176
+ :distance => subitem.at("pdist") && subitem.at("pdist").text
177
+ })
178
+ end
179
+ })
180
+ end
181
+ pattern_array
182
+ end
183
+
184
+ def predictions(params)
185
+ stop_id = params[:stop_id] || []
186
+ route = params[:route] || []
187
+ vid = params[:vid] || []
188
+
189
+ base_url = "http://www.ctabustracker.com/bustime/api/v1/getpredictions?"
190
+ url = "#{ base_url }key=#{ @key }&stpid=#{ stop_id.join(',') }&rt=#{ route.join(',') }&vid=#{ vid.join(',') }"
191
+
192
+ prediction_array = Nokogiri::XML(open(url)).xpath("//prd").map do |item|
193
+ Prediction.new({
194
+ :timestamp => Time.parse(item.at("tmstmp").text),
195
+ :type => item.at("typ").text == "A" ? "arrival" : "departure",
196
+ :stop_name => item.at("stpnm").text,
197
+ :vehicle_id => item.at("vid").text,
198
+ :distance_from_stop => item.at("dstp").text.to_f,
199
+ :route => item.at("rt").text,
200
+ :route_direction => item.at("rtdir").text,
201
+ :destination => item.at("des").text,
202
+ :predicted_time => Time.parse(item.at("prdtm").text)
203
+ })
204
+ end
205
+ prediction_array
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class BusTracker
3
+ class Pattern
4
+ attr_reader :id, :length, :direction, :points
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module CTA
2
+ class BusTracker
3
+ class Pattern
4
+ class Point
5
+ attr_reader :sequence, :latitude, :longitude, :type, :id, :name, :distance
6
+
7
+ def initialize(params)
8
+ params.each do |key, value|
9
+ self.instance_variable_set("@#{ key }".to_sym, value)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class BusTracker
3
+ class Prediction
4
+ attr_reader :timestamp, :type, :stop_name, :stop_id, :vehicle_id, :distance_from_stop, :route, :route_direction, :destination, :predicted_time
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class BusTracker
3
+ class ServiceBulletin
4
+ attr_reader :name, :subject, :detail, :brief, :priority, :services
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module CTA
2
+ class BusTracker
3
+ class ServiceBulletin
4
+ class Service
5
+ attr_reader :route, :route_direction, :stop_id, :stop_name
6
+
7
+ def initialize(params)
8
+ params.each do |key, value|
9
+ self.instance_variable_set("@#{ key }".to_sym, value)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class BusTracker
3
+ class Stop
4
+ attr_reader :id, :name, :latitude, :longitude
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class BusTracker
3
+ class Vehicle
4
+ attr_reader :id, :timestamp, :latitude, :longitude, :heading, :pattern_id, :pattern_distance, :destination, :delay
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'time'
4
+ require 'csv'
5
+
6
+ require 'bus-tracker/bus-tracker'
7
+ require 'bus-tracker/pattern'
8
+ require 'bus-tracker/stop'
9
+ require 'bus-tracker/vehicle'
10
+ require 'bus-tracker/point'
11
+ require 'bus-tracker/prediction'
12
+ require 'bus-tracker/service-bulletin'
13
+ require 'bus-tracker/service'
14
+ require 'train-tracker/train-tracker'
15
+ require 'train-tracker/estimate'
16
+
17
+ class String
18
+ def to_bool
19
+ return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
20
+ return false if self == false || self =~ (/(false|f|no|n|0)$/i)
21
+ raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module CTA
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,299 @@
1
+ STOP_ID,DIRECTION_ID,STOP_NAME,LON,LAT,STATION_NAME,STATION_DESCRIPTIVE_NAME,PARENT_STOP_ID,ADA,Red,Blue,Brn,G,P,Pexp,Y,Pink,Org
2
+ 30162,W,18th (54th/Cermak-bound),-87.669147,41.857908,18th,18th (Pink Line),40830,1,0,0,0,0,0,0,0,1,0
3
+ 30161,E,18th (Loop-bound),-87.669147,41.857908,18th,18th (Pink Line),40830,1,0,0,0,0,0,0,0,1,0
4
+ 30022,N,35th/Archer (Loop-bound),-87.680622,41.829353,35th/Archer,35th/Archer (Orange Line),40120,1,0,0,0,0,0,0,0,0,1
5
+ 30023,S,35th/Archer (Midway-bound),-87.680622,41.829353,35th/Archer,35th/Archer (Orange Line),40120,1,0,0,0,0,0,0,0,0,1
6
+ 30214,S,35-Bronzeville-IIT (63rd-bound),-87.625826,41.831677,35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,1,0,0,0,1,0,0,0,0,0
7
+ 30213,N,35-Bronzeville-IIT (Harlem-bound),-87.625826,41.831677,35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,1,0,0,0,1,0,0,0,0,0
8
+ 30246,S,43rd (63rd-bound),-87.619021,41.816462,43rd,43rd (Green Line),41270,1,0,0,0,1,0,0,0,0,0
9
+ 30245,N,43rd (Harlem-bound),-87.619021,41.816462,43rd,43rd (Green Line),41270,1,0,0,0,1,0,0,0,0,0
10
+ 30210,S,47th (63rd-bound) Elevated (63rd-bound),-87.618826,41.809209,47th,47th (Green Line),41080,1,0,0,0,1,0,0,0,0,0
11
+ 30209,N,47th (SB) Elevated (Harlem-bound),-87.618826,41.809209,47th,47th (Green Line),41080,1,0,0,0,1,0,0,0,0,0
12
+ 30238,S,47th-Dan Ryan (95th-bound),-87.63094,41.810318,47th,47th (Red Line),41230,1,1,0,0,0,0,0,0,0,0
13
+ 30237,N,47th-Dan Ryan (Howard-bound),-87.63094,41.810318,47th,47th (Red Line),41230,1,1,0,0,0,0,0,0,0,0
14
+ 30025,S,51st (63rd-bound),-87.618487,41.80209,51st,51st (Green Line),40130,1,0,0,0,1,0,0,0,0,0
15
+ 30024,N,51st (Harlem-bound),-87.618487,41.80209,51st,51st (Green Line),40130,1,0,0,0,1,0,0,0,0,0
16
+ 30113,E,54th/Cermak (Loop-bound),-87.75669201,41.85177331,54th/Cermak,54th/Cermak (Pink Line),40580,1,0,0,0,0,0,0,0,1,0
17
+ 30114,W,54th/Cermak (Terminal arrival),-87.75669201,41.85177331,54th/Cermak,54th/Cermak (Pink Line),40580,1,0,0,0,0,0,0,0,1,0
18
+ 30178,S,63rd-Dan Ryan (95th-bound),-87.630952,41.780536,63rd,63rd (Red Line),40910,0,1,0,0,0,0,0,0,0,0
19
+ 30177,N,63rd-Dan Ryan (Howard-bound),-87.630952,41.780536,63rd,63rd (Red Line),40910,0,1,0,0,0,0,0,0,0,0
20
+ 30192,S,69th (95th-bound),-87.625724,41.768367,69th,69th (Red Line),40990,1,1,0,0,0,0,0,0,0,0
21
+ 30191,N,69th (Howard-bound),-87.625724,41.768367,69th,69th (Red Line),40990,1,1,0,0,0,0,0,0,0,0
22
+ 30047,S,79th (95th-bound),-87.625112,41.750419,79th,79th (Red Line),40240,1,1,0,0,0,0,0,0,0,0
23
+ 30046,N,79th (Howard-bound),-87.625112,41.750419,79th,79th (Red Line),40240,1,1,0,0,0,0,0,0,0,0
24
+ 30276,S,87th (95th-bound),-87.624717,41.735372,87th,87th (Red Line),41430,0,1,0,0,0,0,0,0,0,0
25
+ 30275,N,87th (Howard-bound),-87.624717,41.735372,87th,87th (Red Line),41430,0,1,0,0,0,0,0,0,0,0
26
+ 30089,S,95th/Dan Ryan (95th-bound),-87.624342,41.722377,95th/Dan Ryan,95th/Dan Ryan (Red Line),40450,1,1,0,0,0,0,0,0,0,0
27
+ 30088,N,95th/Dan Ryan (Howard-bound),-87.624342,41.722377,95th/Ran Ryan,95th/Ran Ryan (Red Line),40450,1,1,0,0,0,0,0,0,0,0
28
+ 30132,S,Adams/Wabash (Inner Loop),-87.626037,41.879507,Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,0,0,0,0,1,0,1,0,1,1
29
+ 30131,N,Adams/Wabash (Outer Loop),-87.626037,41.879507,Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,0,0,0,1,1,0,0,0,0,0
30
+ 30240,S,Addison (O'Hare Branch) (Forest Pk-bound),-87.71906,41.94738,Addison,Addison (Blue Line),41240,0,0,1,0,0,0,0,0,0,0
31
+ 30239,N,Addison (O'Hare Branch) (O'Hare-bound),-87.71906,41.94738,Addison,Addison (Blue Line),41240,0,0,1,0,0,0,0,0,0,0
32
+ 30277,N,Addison (Kimball-bound),-87.674642,41.947028,Addison,Addison (Brown Line),41440,1,0,0,1,0,0,0,0,0,0
33
+ 30278,S,Addison (Loop-bound),-87.674642,41.947028,Addison,Addison (Brown Line),41440,1,0,0,1,0,0,0,0,0,0
34
+ 30274,S,Addison (95th-bound),-87.653626,41.947428,Addison,Addison (Red Line),41420,1,1,0,0,0,0,0,0,0,0
35
+ 30273,N,Addison (Howard-bound),-87.653626,41.947428,Addison,Addison (Red Line),41420,1,1,0,0,0,0,0,0,0,0
36
+ 30230,S,Argyle (95th-bound),-87.65853,41.973453,Argyle,Argyle (Red Line),41200,0,1,0,0,0,0,0,0,0,0
37
+ 30229,N,Argyle (Howard-bound),-87.65853,41.973453,Argyle,Argyle (Red Line),41200,0,1,0,0,0,0,0,0,0,0
38
+ 30127,N,Armitage (Kimball-Linden-bound),-87.652644,41.918217,Armitage,Armitage (Brown & Purple Lines),40660,1,0,0,1,0,0,1,0,0,0
39
+ 30128,S,Armitage (Loop-bound),-87.652644,41.918217,Armitage,Armitage (Brown & Purple Lines),40660,1,0,0,1,0,0,1,0,0,0
40
+ 30205,N,Ashland (Loop-bound),-87.665317,41.839234,Ashland,Ashland (Orange Line),41060,1,0,0,0,0,0,0,0,0,1
41
+ 30206,S,Ashland (Midway-bound),-87.665317,41.839234,Ashland,Ashland (Orange Line),41060,1,0,0,0,0,0,0,0,0,1
42
+ 30032,E,Ashland (Harlem-54th/Cermak-bound),-87.666969,41.885269,Ashland,Ashland (Green & Pink Lines),40170,1,0,0,0,1,0,0,0,1,0
43
+ 30033,W,Ashland (Loop-63rd-bound),-87.666969,41.885269,Ashland,Ashland (Green & Pink Lines),40170,1,0,0,0,1,0,0,0,1,0
44
+ 30056,E,Ashland/63rd (Harlem-bound),-87.663766,41.77886,Ashland/63rd,Ashland/63rd (Green Line),40290,1,0,0,0,1,0,0,0,0,0
45
+ 30057,W,Ashland/63rd (Terminal arrival),-87.663766,41.77886,Ashland/63rd,Ashland/63rd (Green Line),40290,1,0,0,0,1,0,0,0,0,0
46
+ 30002,W,Austin (Forest Pk-bound),-87.776812,41.870851,Austin,Austin (Blue Line),40010,0,0,1,0,0,0,0,0,0,0
47
+ 30001,E,Austin (O'Hare-bound),-87.776812,41.870851,Austin,Austin (Blue Line),40010,0,0,1,0,0,0,0,0,0,0
48
+ 30243,E,Austin (63rd-bound),-87.774135,41.887293,Austin,Austin (Green Line),41260,0,0,0,0,1,0,0,0,0,0
49
+ 30244,W,Austin (Harlem-bound),-87.774135,41.887293,Austin,Austin (Green Line),41260,0,0,0,0,1,0,0,0,0,0
50
+ 30013,S,Belmont (O'Hare Branch) (Forest Pk-bound),-87.712359,41.938132,Belmont,Belmont (Blue Line),40060,0,0,1,0,0,0,0,0,0,0
51
+ 30012,N,Belmont (O'Hare Branch) (O'Hare-bound),-87.712359,41.938132,Belmont,Belmont (Blue Line),40060,0,0,1,0,0,0,0,0,0,0
52
+ 30256,S,Belmont (95th-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,1,0,0,0,0,0,0,0,0
53
+ 30255,N,Belmont (Howard-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,1,0,0,0,0,0,0,0,0
54
+ 30257,N,Belmont (Kimball-Linden-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,0,0,1,0,0,1,0,0,0
55
+ 30258,S,Belmont (Loop-bound),-87.65338,41.939751,Belmont,"Belmont (Red, Brown & Purple Lines)",41320,1,0,0,1,0,0,1,0,0,0
56
+ 30067,S,Berwyn (95th-bound),-87.658668,41.977984,Berwyn,Berwyn (Red Line),40340,0,1,0,0,0,0,0,0,0,0
57
+ 30066,N,Berwyn (Howard-bound),-87.658668,41.977984,Berwyn,Berwyn (Red Line),40340,0,1,0,0,0,0,0,0,0,0
58
+ 30268,S,Bryn Mawr (95th-bound),-87.65884,41.983504,Bryn Mawr,Bryn Mawr (Red Line),41380,0,1,0,0,0,0,0,0,0,0
59
+ 30267,N,Bryn Mawr (Howard-bound),-87.65884,41.983504,Bryn Mawr,Bryn Mawr (Red Line),41380,0,1,0,0,0,0,0,0,0,0
60
+ 30087,W,California (54th/Cermak-bound),-87.694774,41.854109,California,California (Pink Line),40440,1,0,0,0,0,0,0,0,1,0
61
+ 30086,E,California (Loop-bound),-87.694774,41.854109,California,California (Pink Line),40440,1,0,0,0,0,0,0,0,1,0
62
+ 30112,S,California/Milwaukee (Forest Pk-bound),-87.69689,41.921939,California,California (Blue Line),40570,0,0,1,0,0,0,0,0,0,0
63
+ 30265,E,California (63rd-bound),-87.696234,41.88422,California,California (Green Line),41360,1,0,0,0,1,0,0,0,0,0
64
+ 30266,W,California (Harlem-bound),-87.696234,41.88422,California,California (Green Line),41360,1,0,0,0,1,0,0,0,0,0
65
+ 30111,N,California/Milwaukee (O'Hare-bound),-87.69689,41.921939,California,California (Blue Line),40570,0,0,1,0,0,0,0,0,0,0
66
+ 30242,S,Central-Evanston (Howard-Loop-bound),-87.685617,42.063987,Central,Central (Purple Line),41250,0,0,0,0,0,1,1,0,0,0
67
+ 30241,N,Central-Evanston (Linden-bound),-87.685617,42.063987,Central,Central (Purple Line),41250,0,0,0,0,0,1,1,0,0,0
68
+ 30054,E,Central (63rd-bound),-87.76565,41.887389,Central,Central (Green Line),40280,1,0,0,0,1,0,0,0,0,0
69
+ 30055,W,Central (Harlem-bound),-87.76565,41.887389,Central,Central (Green Line),40280,1,0,0,0,1,0,0,0,0,0
70
+ 30152,W,Central Park (54th/Cermak-bound),-87.714842,41.853839,Central Park,Central Park (Pink Line),40780,1,0,0,0,0,0,0,0,1,0
71
+ 30151,E,Central Park (Loop-bound),-87.714842,41.853839,Central Park,Central Park (Pink Line),40780,1,0,0,0,0,0,0,0,1,0
72
+ 30194,S,Cermak-Chinatown (95th-bound),-87.630968,41.853206,Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,1,1,0,0,0,0,0,0,0,0
73
+ 30193,N,Cermak-Chinatown (Howard-bound),-87.630968,41.853206,Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,1,1,0,0,0,0,0,0,0,0
74
+ 30272,S,Chicago/Milwaukee (Forest Pk-bound),-87.655214,41.896075,Chicago,Chicago (Blue Line),41410,0,0,1,0,0,0,0,0,0,0
75
+ 30271,N,Chicago/Milwaukee (O'Hare-bound),-87.655214,41.896075,Chicago,Chicago (Blue Line),41410,0,0,1,0,0,0,0,0,0,0
76
+ 30137,N,Chicago/Franklin (Kimball-Linden-bound),-87.635924,41.89681,Chicago,Chicago (Brown & Purple Lines),40710,1,0,0,1,0,0,1,0,0,0
77
+ 30138,S,Chicago/Franklin (Loop-bound),-87.635924,41.89681,Chicago,Chicago (Brown & Purple Lines),40710,1,0,0,1,0,0,1,0,0,0
78
+ 30280,S,Chicago/State (95th-bound),-87.628176,41.896671,Chicago,Chicago (Red Line),41450,1,1,0,0,0,0,0,0,0,0
79
+ 30279,N,Chicago/State (Howard-bound),-87.628176,41.896671,Chicago,Chicago (Red Line),41450,1,1,0,0,0,0,0,0,0,0
80
+ 30083,W,Cicero (54th/Cermak-bound),-87.745336,41.85182,Cicero,Cicero (Pink Line),40420,1,0,0,0,0,0,0,0,1,0
81
+ 30082,E,Cicero (Loop-bound),-87.745336,41.85182,Cicero,Cicero (Pink Line),40420,1,0,0,0,0,0,0,0,1,0
82
+ 30188,W,Cicero (Forest Pk-bound),-87.745154,41.871574,Cicero,Cicero (Blue Line),40970,0,0,1,0,0,0,0,0,0,0
83
+ 30187,E,Cicero (O'Hare-bound),-87.745154,41.871574,Cicero,Cicero (Blue Line),40970,0,0,1,0,0,0,0,0,0,0
84
+ 30094,E,Cicero (63rd-bound),-87.744698,41.886519,Cicero,Cicero (Green Line),40480,1,0,0,0,1,0,0,0,0,0
85
+ 30009,W,Cicero (Harlem-bound),-87.744698,41.886519,Cicero,Cicero (Green Line),40480,1,0,0,0,1,0,0,0,0,0
86
+ 30122,S,Clark/Division (95th-bound),-87.631412,41.90392,Clark/Division,Clark/Division (Red Line),40630,0,1,0,0,0,0,0,0,0,0
87
+ 30121,N,Clark/Division (Howard-bound),-87.631412,41.90392,Clark/Division,Clark/Division (Red Line),40630,0,1,0,0,0,0,0,0,0,0
88
+ 30074,E,Clark/Lake (Inner Loop),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,0,0,1,0,1,0,1,1
89
+ 30075,W,Clark/Lake (Outer Loop),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,0,1,1,0,0,0,0,0
90
+ 30374,S,Clark/Lake (Forest Pk-bound),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,1,0,0,0,0,0,0,0
91
+ 30375,N,Clark/Lake (O'Hare-bound),-87.630886,41.885737,Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,1,0,1,0,0,0,0,0,0,0
92
+ 30085,W,Clinton (Forest Pk-bound),-87.640984,41.875539,Clinton,Clinton (Blue Line),40430,0,0,1,0,0,0,0,0,0,0
93
+ 30084,E,Clinton (O'Hare-bound),-87.640984,41.875539,Clinton,Clinton (Blue Line),40430,0,0,1,0,0,0,0,0,0,0
94
+ 30222,W,Clinton (Harlem-54th/Cermak-bound),-87.641782,41.885678,Clinton,Clinton (Green & Pink Lines),41160,1,0,0,0,1,0,0,0,1,0
95
+ 30221,E,Clinton (Loop-63rd-bound),-87.641782,41.885678,Clinton,Clinton (Green & Pink Lines),41160,1,0,0,0,1,0,0,0,1,0
96
+ 30291,E,Conservatory (63rd-bound),-87.716523,41.884904,Conservatory,Conservatory (Green Line),41670,1,0,0,0,1,0,0,0,0,0
97
+ 30292,W,Conservatory (Harlem-bound),-87.716523,41.884904,Conservatory,Conservatory (Green Line),41670,1,0,0,0,1,0,0,0,0,0
98
+ 30139,E,Cottage Grove (Terminal arrival),-87.605857,41.780309,Cottage Grove,Cottage Grove (Green Line),40720,1,0,0,0,1,0,0,0,0,0
99
+ 30140,W,East 63rd-Cottage Grove (Harlem-bound),-87.605857,41.780309,Cottage Grove,Cottage Grove (Green Line),40720,1,0,0,0,1,0,0,0,0,0
100
+ 30045,S,Cumberland (Forest Pk-bound),-87.838028,41.984246,Cumberland,Cumberland (Blue Line),40230,1,0,1,0,0,0,0,0,0,0
101
+ 30044,N,Cumberland (O'Hare-bound),-87.838028,41.984246,Cumberland,Cumberland (Blue Line),40230,1,0,1,0,0,0,0,0,0,0
102
+ 30041,W,Damen (54th/Cermak-bound),-87.675975,41.854517,Damen,Damen (Pink Line),40210,1,0,0,0,0,0,0,0,1,0
103
+ 30040,E,Damen (Loop-bound),-87.675975,41.854517,Damen,Damen (Pink Line),40210,1,0,0,0,0,0,0,0,1,0
104
+ 30116,S,Damen/Milwaukee (Forest Pk-bound),-87.677437,41.909744,Damen,Damen (Blue Line),40590,0,0,1,0,0,0,0,0,0,0
105
+ 30115,N,Damen/Milwaukee (O'Hare-bound),-87.677437,41.909744,Damen,Damen (Blue Line),40590,0,0,1,0,0,0,0,0,0,0
106
+ 30018,N,Damen (Kimball-bound),-87.678639,41.966286,Damen,Damen (Brown Line),40090,1,0,0,1,0,0,0,0,0,0
107
+ 30019,S,Damen (Loop-bound),-87.678639,41.966286,Damen,Damen (Brown Line),40090,1,0,0,1,0,0,0,0,0,0
108
+ 30011,S,Davis (Howard-Loop-bound),-87.683543,42.04771,Davis,Davis (Purple Line),40050,1,0,0,0,0,1,1,0,0,0
109
+ 30010,N,Davis (Linden-bound),-87.683543,42.04771,Davis,Davis (Purple Line),40050,1,0,0,0,0,1,1,0,0,0
110
+ 30134,S,Dempster (Howard-Loop-bound),-87.681602,42.041655,Dempster,Dempster (Purple Line),40690,0,0,0,0,0,1,1,0,0,0
111
+ 30133,N,Dempster (Linden-bound),-87.681602,42.041655,Dempster,Dempster (Purple Line),40690,0,0,0,0,0,1,1,0,0,0
112
+ 30103,N,Diversey (Kimball-Linden-bound),-87.653131,41.932732,Diversey,Diversey (Brown & Purple Lines),40530,1,0,0,1,0,0,1,0,0,0
113
+ 30104,S,Diversey (Loop-bound),-87.653131,41.932732,Diversey,Diversey (Brown & Purple Lines),40530,1,0,0,1,0,0,1,0,0,0
114
+ 30063,S,Division/Milwaukee (Forest Pk-bound),-87.666496,41.903355,Division,Division (Blue Line),40320,0,0,1,0,0,0,0,0,0,0
115
+ 30062,N,Division/Milwaukee (O'Hare-bound),-87.666496,41.903355,Division,Division (Blue Line),40320,0,0,1,0,0,0,0,0,0,0
116
+ 30076,E,Forest Park (O'Hare-bound),-87.817318,41.874257,Forest Park,Forest Park (Blue Line),40390,1,0,1,0,0,0,0,0,0,0
117
+ 30077,W,Forest Park (Terminal Arrival),-87.817318,41.874257,Forest Park,Forest Park (Blue Line),40390,1,0,1,0,0,0,0,0,0,0
118
+ 30102,S,Foster (Howard-Loop-bound),-87.68356,42.05416,Foster,Foster (Purple Line),40520,0,0,0,0,0,1,1,0,0,0
119
+ 30101,N,Foster (Linden-bound),-87.68356,42.05416,Foster,Foster (Purple Line),40520,0,0,0,0,0,1,1,0,0,0
120
+ 30167,N,Francisco (Kimball-bound),-87.701644,41.966046,Francisco,Francisco (Brown Line),40870,1,0,0,1,0,0,0,0,0,0
121
+ 30168,S,Francisco (Loop-bound),-87.701644,41.966046,Francisco,Francisco (Brown Line),40870,1,0,0,1,0,0,0,0,0,0
122
+ 30234,S,Fullerton (95th-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,1,0,0,0,0,0,0,0,0
123
+ 30233,N,Fullerton (Howard-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,1,0,0,0,0,0,0,0,0
124
+ 30235,N,Fullerton (Kimball-Linden-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,0,0,1,0,0,1,0,0,0
125
+ 30236,S,Fullerton (Loop-bound),-87.652866,41.925051,Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,1,0,0,1,0,0,1,0,0,0
126
+ 30100,S,Garfield (63rd-bound),-87.618327,41.795172,Garfield,Garfield (Green Line),40510,1,0,0,0,1,0,0,0,0,0
127
+ 30099,N,Garfield (Harlem-bound),-87.618327,41.795172,Garfield,Garfield (Green Line),40510,1,0,0,0,1,0,0,0,0,0
128
+ 30224,S,Garfield-Dan Ryan (95th-bound),-87.631157,41.79542,Garfield,Garfield (Red Line),41170,0,1,0,0,0,0,0,0,0,0
129
+ 30223,N,Garfield-Dan Ryan (Howard-bound),-87.631157,41.79542,Garfield,Garfield (Red Line),41170,0,1,0,0,0,0,0,0,0,0
130
+ 30096,S,Grand/Milwaukee (Forest Pk-bound),-87.647578,41.891189,Grand,Grand (Blue Line),40490,0,0,1,0,0,0,0,0,0,0
131
+ 30095,N,Grand/Milwaukee (O'Hare-bound),-87.647578,41.891189,Grand,Grand (Blue Line),40490,0,0,1,0,0,0,0,0,0,0
132
+ 30065,S,Grand/State (95th-bound),-87.628021,41.891665,Grand,Grand (Red Line),40330,1,1,0,0,0,0,0,0,0,0
133
+ 30064,N,Grand/State (Howard-bound),-87.628021,41.891665,Grand,Grand (Red Line),40330,1,1,0,0,0,0,0,0,0,0
134
+ 30148,S,Granville (95th-bound),-87.659202,41.993664,Granville,Granville (Red Line),40760,1,1,0,0,0,0,0,0,0,0
135
+ 30147,N,Granville (Howard-bound),-87.659202,41.993664,Granville,Granville (Red Line),40760,1,1,0,0,0,0,0,0,0,0
136
+ 30215,N,Halsted (Loop-bound),-87.648088,41.84678,Halsted,Halsted (Orange Line),41130,1,0,0,0,0,0,0,0,0,1
137
+ 30216,S,Halsted (Midway-bound),-87.648088,41.84678,Halsted,Halsted (Orange Line),41130,1,0,0,0,0,0,0,0,0,1
138
+ 30184,W,Halsted/63rd (Ashland-bound),-87.644244,41.778943,Halsted,Halsted (Green Line),40940,1,0,0,0,1,0,0,0,0,0
139
+ 30183,E,Halsted/63rd (Harlem-bound),-87.644244,41.778943,Halsted,Halsted (Green Line),40940,1,0,0,0,1,0,0,0,0,0
140
+ 30190,W,Harlem (Forest Pk-bound),-87.806961,41.87349,Harlem,Harlem (Blue Line - Forest Park Branch),40980,0,0,1,0,0,0,0,0,0,0
141
+ 30189,E,Harlem (O'Hare-bound),-87.806961,41.87349,Harlem,Harlem (Blue Line - Forest Park Branch),40980,0,0,1,0,0,0,0,0,0,0
142
+ 30146,S,Harlem (O'Hare Branch) (Forest Pk-bound),-87.8089,41.98227,Harlem,Harlem (Blue Line - O'Hare Branch),40750,1,0,1,0,0,0,0,0,0,0
143
+ 30145,N,Harlem (O'Hare Branch) (O'Hare-bound),-87.8089,41.98227,Harlem,Harlem (Blue Line - O'Hare Branch),40750,1,0,1,0,0,0,0,0,0,0
144
+ 30004,W,Harlem (Terminal arrival),-87.803176,41.886848,Harlem/Lake,Harlem/Lake (Green Line),40020,1,0,0,0,1,0,0,0,0,0
145
+ 30003,E,Harlem (63rd-bound),-87.803176,41.886848,Harlem/Lake,Harlem/Lake (Green Line),40020,1,0,0,0,1,0,0,0,0,0
146
+ 30166,W,Library (Inner Loop),-87.628196,41.876862,Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,1,0,0,0,0,0,1,0,1,1
147
+ 30165,E,Library (Outer Loop),-87.628196,41.876862,Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,1,0,0,1,0,0,0,0,0,0
148
+ 30286,S,Harrison (95th-bound),-87.627479,41.874039,Harrison,Harrison (Red Line),41490,0,1,0,0,0,0,0,0,0,0
149
+ 30285,N,Harrison (Howard-bound),-87.627479,41.874039,Harrison,Harrison (Red Line),41490,0,1,0,0,0,0,0,0,0,0
150
+ 30175,N,"Howard (NB) (Linden, Skokie-bound)",-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,0,0,0,0,1,1,1,0,0
151
+ 30176,S,Howard (Terminal arrival),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,0,0,0,0,1,1,1,0,0
152
+ 30173,N,Howard (Terminal arrival),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,1,0,0,0,0,0,0,0,0
153
+ 30174,S,Howard (95th-Bound),-87.672892,42.019063,Howard,"Howard (Red, Purple & Yellow Lines)",40900,1,1,0,0,0,0,0,0,0,0
154
+ 30158,W,Illinois Medical District (Forest Pk-bound),-87.673932,41.875706,Illinois Medical District,Illinois Medical District (Blue Line),40810,1,0,1,0,0,0,0,0,0,0
155
+ 30157,E,Illinois Medical District (O'Hare-bound),-87.673932,41.875706,Illinois Medical District,Illinois Medical District (Blue Line),40810,1,0,1,0,0,0,0,0,0,0
156
+ 30059,S,Indiana (63rd-bound),-87.621371,41.821732,Indiana,Indiana (Green Line),40300,1,0,0,0,1,0,0,0,0,0
157
+ 30058,N,Indiana (Harlem-bound),-87.621371,41.821732,Indiana,Indiana (Green Line),40300,1,0,0,0,1,0,0,0,0,0
158
+ 30108,S,Irving Park (O'Hare Branch) (Forest Pk-bound),-87.729229,41.952925,Irving Park,Irving Park (Blue Line),40550,0,0,1,0,0,0,0,0,0,0
159
+ 30107,N,Irving Park (O'Hare Branch) (O'Hare-bound),-87.729229,41.952925,Irving Park,Irving Park (Blue Line),40550,0,0,1,0,0,0,0,0,0,0
160
+ 30281,N,Irving Park (Kimball-bound),-87.674868,41.954521,Irving Park,Irving Park (Brown Line),41460,1,0,0,1,0,0,0,0,0,0
161
+ 30282,S,Irving Park (Loop-bound),-87.674868,41.954521,Irving Park,Irving Park (Brown Line),41460,1,0,0,1,0,0,0,0,0,0
162
+ 30015,S,Jackson/Dearborn (Forest Pk-bound),-87.629296,41.878183,Jackson,Jackson (Blue Line),40070,1,0,1,0,0,0,0,0,0,0
163
+ 30014,N,Jackson/Dearborn (O'Hare-bound),-87.629296,41.878183,Jackson,Jackson (Blue Line),40070,1,0,1,0,0,0,0,0,0,0
164
+ 30110,S,Jackson/State (95th-bound),-87.627596,41.878153,Jackson,Jackson (Red Line),40560,1,1,0,0,0,0,0,0,0,0
165
+ 30109,N,Jackson/State (Howard-bound),-87.627596,41.878153,Jackson,Jackson (Red Line),40560,1,1,0,0,0,0,0,0,0,0
166
+ 30228,S,Jarvis (95th-bound),-87.669092,42.015876,Jarvis,Jarvis (Red Line),41190,0,1,0,0,0,0,0,0,0,0
167
+ 30227,N,Jarvis (Howard-bound),-87.669092,42.015876,Jarvis,Jarvis (Red Line),41190,0,1,0,0,0,0,0,0,0,0
168
+ 30248,S,Jefferson Park (Forest Pk-bound),-87.760892,41.970634,Jefferson Park,Jefferson Park (Blue Line),41280,1,0,1,0,0,0,0,0,0,0
169
+ 30247,N,Jefferson Park (O'Hare-bound),-87.760892,41.970634,Jefferson Park,Jefferson Park (Blue Line),41280,1,0,1,0,0,0,0,0,0,0
170
+ 30219,N,Kedzie (Loop-bound),-87.704406,41.804236,Kedzie,Kedzie (Orange Line),41150,1,0,0,0,0,0,0,0,0,1
171
+ 30220,S,Kedzie (Midway-bound),-87.704406,41.804236,Kedzie,Kedzie (Orange Line),41150,1,0,0,0,0,0,0,0,0,1
172
+ 30202,W,Kedzie (54th/Cermak-bound),-87.705408,41.853964,Kedzie,Kedzie (Pink Line),41040,1,0,0,0,0,0,0,0,1,0
173
+ 30201,E,Kedzie (Loop-bound),-87.705408,41.853964,Kedzie,Kedzie (Pink Line),41040,1,0,0,0,0,0,0,0,1,0
174
+ 30225,N,Kedzie (Kimball-bound),-87.708821,41.965996,Kedzie,Kedzie (Brown Line),41180,1,0,0,1,0,0,0,0,0,0
175
+ 30226,S,Kedzie (Loop-bound),-87.708821,41.965996,Kedzie,Kedzie (Brown Line),41180,1,0,0,1,0,0,0,0,0,0
176
+ 30207,E,Kedzie (63rd-bound),-87.706155,41.884321,Kedzie,Kedzie (Green Line),41070,1,0,0,0,1,0,0,0,0,0
177
+ 30208,W,Kedzie (Harlem-bound),-87.706155,41.884321,Kedzie,Kedzie (Green Line),41070,1,0,0,0,1,0,0,0,0,0
178
+ 30049,W,Kedzie-Homan (Forest Pk-bound),-87.70604,41.874341,Kedzie-Homan,Kedzie-Homan (Blue Line),40250,1,0,1,0,0,0,0,0,0,0
179
+ 30048,E,Kedzie-Homan (O'Hare-bound),-87.70604,41.874341,Kedzie-Homan,Kedzie-Homan (Blue Line),40250,1,0,1,0,0,0,0,0,0,0
180
+ 30250,S,Kimball (Loop-bound),-87.713065,41.967901,Kimball,Kimball (Brown Line),41290,1,0,0,1,0,0,0,0,0,0
181
+ 30249,N,Kimball (Terminal arrival),-87.713065,41.967901,Kimball,Kimball (Brown Line),41290,1,0,0,1,0,0,0,0,0,0
182
+ 30217,E,King Drive (Cottage Grove-bound),-87.615546,41.78013,King Drive,King Drive (Green Line),41140,1,0,0,0,1,0,0,0,0,0
183
+ 30218,W,King Drive (Harlem-bound),-87.615546,41.78013,King Drive,King Drive (Green Line),41140,1,0,0,0,1,0,0,0,0,0
184
+ 30118,W,Kostner (54th/Cermak-bound),-87.733258,41.853751,Kostner,Kostner (Pink Line),40600,1,0,0,0,0,0,0,0,1,0
185
+ 30117,E,Kostner (Loop-bound),-87.733258,41.853751,Kostner,Kostner (Pink Line),40600,1,0,0,0,0,0,0,0,1,0
186
+ 30290,S,Lake/State (95th-bound),-87.627813,41.884809,Lake,Lake (Red Line),41660,1,1,0,0,0,0,0,0,0,0
187
+ 30289,N,Lake/State (Howard-bound),-87.627813,41.884809,Lake,Lake (Red Line),41660,1,1,0,0,0,0,0,0,0,0
188
+ 30135,E,Laramie (63rd-bound),-87.754986,41.887163,Laramie,Laramie (Green Line),40700,1,0,0,0,1,0,0,0,0,0
189
+ 30136,W,Laramie (Harlem-bound),-87.754986,41.887163,Laramie,Laramie (Green Line),40700,1,0,0,0,1,0,0,0,0,0
190
+ 30262,W,LaSalle (Forest Pk-bound),-87.631722,41.875568,LaSalle,LaSalle (Blue Line),41340,0,0,1,0,0,0,0,0,0,0
191
+ 30261,E,LaSalle (O'Hare-bound),-87.631722,41.875568,LaSalle,LaSalle (Blue Line),41340,0,0,1,0,0,0,0,0,0,0
192
+ 30031,W,LaSalle/Van Buren (Inner Loop),-87.631739,41.8768,LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,0,0,0,0,0,0,1,0,1,1
193
+ 30030,E,LaSalle/Van Buren (Outer Loop),-87.631739,41.8768,LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,0,0,0,1,0,0,0,0,0,0
194
+ 30150,S,Lawrence (95th-bound),-87.658493,41.969139,Lawrence,Lawrence (Red Line),40770,0,1,0,0,0,0,0,0,0,0
195
+ 30149,N,Lawrence (Howard-bound),-87.658493,41.969139,Lawrence,Lawrence (Red Line),40770,0,1,0,0,0,0,0,0,0,0
196
+ 30204,S,Linden (Howard-Loop-bound),-87.69073,42.073153,Linden,Linden (Purple Line),41050,1,0,0,0,0,1,1,0,0,0
197
+ 30203,N,Linden (Linden-bound),-87.69073,42.073153,Linden,Linden (Purple Line),41050,1,0,0,0,0,1,1,0,0,0
198
+ 30198,S,Logan Square (Forest Pk-bound),-87.708541,41.929728,Logan Square,Logan Square (Blue Line),41020,1,0,1,0,0,0,0,0,0,0
199
+ 30197,N,Logan Square (O'Hare-bound),-87.708541,41.929728,Logan Square,Logan Square (Blue Line),41020,1,0,1,0,0,0,0,0,0,0
200
+ 30252,S,Loyola (95th-bound),-87.661061,42.001073,Loyola,Loyola (Red Line),41300,1,1,0,0,0,0,0,0,0,0
201
+ 30251,N,Loyola (Howard-bound),-87.661061,42.001073,Loyola,Loyola (Red Line),41300,1,1,0,0,0,0,0,0,0,0
202
+ 30124,S,Madison/Wabash (Inner Loop),-87.626098,41.882023,Madison/Wabash,"Madison/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40640,0,0,0,0,1,0,1,0,1,1
203
+ 30123,N,Madison/Wabash (Outer Loop),-87.626098,41.882023,Madison/Wabash,"Madison/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40640,0,0,0,1,1,0,0,0,0,0
204
+ 30053,S,Main (Howard-Loop-bound),-87.679538,42.033456,Main,Main (Purple Line),40270,0,0,0,0,0,1,1,0,0,0
205
+ 30052,N,Main (Linden-bound),-87.679538,42.033456,Main,Main (Purple Line),40270,0,0,0,0,0,1,1,0,0,0
206
+ 30090,N,Merchandise Mart (Kimball-Linden-bound),-87.633924,41.888969,Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,1,0,0,1,0,0,1,0,0,0
207
+ 30091,S,Merchandise Mart (Loop-bound),-87.633924,41.888969,Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,1,0,0,1,0,0,1,0,0,0
208
+ 30182,S,Midway (Arrival),-87.737875,41.78661,Midway,Midway (Orange Line),40930,1,0,0,0,0,0,0,0,0,1
209
+ 30181,N,Midway (Loop-bound),-87.737875,41.78661,Midway,Midway (Orange Line),40930,1,0,0,0,0,0,0,0,0,1
210
+ 30154,S,Monroe/Dearborn (Forest Pk-bound),-87.629378,41.880703,Monroe,Monroe (Blue Line),40790,0,0,1,0,0,0,0,0,0,0
211
+ 30153,N,Monroe/Dearborn (O'Hare-bound),-87.629378,41.880703,Monroe,Monroe (Blue Line),40790,0,0,1,0,0,0,0,0,0,0
212
+ 30212,S,Monroe/State (95th-bound),-87.627696,41.880745,Monroe,Monroe (Red Line),41090,0,1,0,0,0,0,0,0,0,0
213
+ 30211,N,Monroe/State (Howard-bound),-87.627696,41.880745,Monroe,Monroe (Red Line),41090,0,1,0,0,0,0,0,0,0,0
214
+ 30260,S,Montrose (Forest Pk-bound),-87.743574,41.961539,Montrose,Montrose (Blue Line),41330,0,0,1,0,0,0,0,0,0,0
215
+ 30259,N,Montrose (O'Hare-bound),-87.743574,41.961539,Montrose,Montrose (Blue Line),41330,0,0,1,0,0,0,0,0,0,0
216
+ 30287,N,Montrose (Kimball-bound),-87.675047,41.961756,Montrose,Montrose (Brown Line),41500,1,0,0,1,0,0,0,0,0,0
217
+ 30288,S,Montrose (Loop-bound),-87.675047,41.961756,Montrose,Montrose (Brown Line),41500,1,0,0,1,0,0,0,0,0,0
218
+ 30296,W,Morgan (Harlem-54th/Cermak-bound),-87.652193,41.885586,Morgan,Morgan (Green & Pink Lines),41510,1,0,0,0,1,0,0,0,1,0
219
+ 30295,E,Morgan (Loop-63rd-bound),-87.652193,41.885586,Morgan,Morgan (Green & Pink Lines),41510,1,0,0,0,1,0,0,0,1,0
220
+ 30021,S,Morse (95th-bound),-87.665909,42.008362,Morse,Morse (Red Line),40100,0,1,0,0,0,0,0,0,0,0
221
+ 30020,N,Morse (Howard-bound),-87.665909,42.008362,Morse,Morse (Red Line),40100,0,1,0,0,0,0,0,0,0,0
222
+ 30126,S,North/Clybourn (95th-bound),-87.649177,41.910655,North/Clybourn,North/Clybourn (Red Line),40650,0,1,0,0,0,0,0,0,0,0
223
+ 30125,N,North/Clybourn (Howard-bound),-87.649177,41.910655,North/Clybourn,North/Clybourn (Red Line),40650,0,1,0,0,0,0,0,0,0,0
224
+ 30079,S,Noyes (Howard-Loop-bound),-87.683337,42.058282,Noyes,Noyes (Purple Line),40400,0,0,0,0,0,1,1,0,0,0
225
+ 30078,N,Noyes (Linden-bound),-87.683337,42.058282,Noyes,Noyes (Purple Line),40400,0,0,0,0,0,1,1,0,0,0
226
+ 30035,W,Oak Park (Forest Pk-bound),-87.791602,41.872108,Oak Park,Oak Park (Blue Line),40180,0,0,1,0,0,0,0,0,0,0
227
+ 30034,E,Oak Park (O'Hare-bound),-87.791602,41.872108,Oak Park,Oak Park (Blue Line),40180,0,0,1,0,0,0,0,0,0,0
228
+ 30263,E,Oak Park (63rd-bound),-87.793783,41.886988,Oak Park,Oak Park (Green Line),41350,0,0,0,0,1,0,0,0,0,0
229
+ 30264,W,Oak Park (Harlem-bound),-87.793783,41.886988,Oak Park,Oak Park (Green Line),41350,0,0,0,0,1,0,0,0,0,0
230
+ 30297,N,Oakton (Dempster-Skokie-bound),-87.74722084,42.02624348,Oakton-Skokie,Oakton-Skokie (Yellow Line),41680,1,0,0,0,0,0,0,1,0,0
231
+ 30298,S,Oakton (Howard-bound),-87.74722084,42.02624348,Oakton-Skokie,Oakton-Skokie (Yellow Line),41680,1,0,0,0,0,0,0,1,0,0
232
+ 30172,S,O'Hare Airport (Forest Pk-bound),-87.90422307,41.97766526,O'Hare,O'Hare (Blue Line),40890,1,0,1,0,0,0,0,0,0,0
233
+ 30171,N,O'Hare Airport (Terminal Arrival),-87.90422307,41.97766526,O'Hare,O'Hare (Blue Line),40890,1,0,1,0,0,0,0,0,0,0
234
+ 30253,N,Paulina (Kimball-bound),-87.670907,41.943623,Paulina,Paulina (Brown Line),41310,1,0,0,1,0,0,0,0,0,0
235
+ 30254,S,Paulina (Loop-bound),-87.670907,41.943623,Paulina,Paulina (Brown Line),41310,1,0,0,1,0,0,0,0,0,0
236
+ 30200,W,Polk (54th/Cermak-bound),-87.66953,41.871551,Polk,Polk (Pink Line),41030,1,0,0,0,0,0,0,0,1,0
237
+ 30199,E,Polk (Loop-bound),-87.66953,41.871551,Polk,Polk (Pink Line),41030,1,0,0,0,0,0,0,0,1,0
238
+ 30185,N,Pulaski (Loop-bound),-87.724493,41.799756,Pulaski,Pulaski (Orange Line),40960,1,0,0,0,0,0,0,0,0,1
239
+ 30186,S,Pulaski (Midway-bound),-87.724493,41.799756,Pulaski,Pulaski (Orange Line),40960,1,0,0,0,0,0,0,0,0,1
240
+ 30029,W,Pulaski (54th/Cermak-bound),-87.724311,41.853732,Pulaski,Pulaski (Pink Line),40150,1,0,0,0,0,0,0,0,1,0
241
+ 30028,E,Pulaski (Loop-bound),-87.724311,41.853732,Pulaski,Pulaski (Pink Line),40150,1,0,0,0,0,0,0,0,1,0
242
+ 30180,W,Pulaski (Forest Pk-bound),-87.725663,41.873797,Pulaski,Pulaski (Blue Line),40920,0,0,1,0,0,0,0,0,0,0
243
+ 30179,E,Pulaski (O'Hare-bound),-87.725663,41.873797,Pulaski,Pulaski (Blue Line),40920,0,0,1,0,0,0,0,0,0,0
244
+ 30005,E,Pulaski (63rd-bound),-87.725404,41.885412,Pulaski,Pulaski (Green Line),40030,1,0,0,0,1,0,0,0,0,0
245
+ 30006,W,Pulaski (Harlem-bound),-87.725404,41.885412,Pulaski,Pulaski (Green Line),40030,1,0,0,0,1,0,0,0,0,0
246
+ 30007,N,Quincy/Wells (Inner Loop),-87.63374,41.878723,Quincy/Wells,"Quincy/Wells (Brown, Orange, Purple & Pink Lines)",40040,0,0,0,0,0,0,1,0,1,1
247
+ 30008,S,Quincy/Wells (Outer Loop),-87.63374,41.878723,Quincy/Wells,"Quincy/Wells (Brown, Orange, Purple & Pink Lines)",40040,0,0,0,1,0,0,0,0,0,0
248
+ 30093,W,Racine (Forest Pk-bound),-87.659458,41.87592,Racine,Racine (Blue Line),40470,0,0,1,0,0,0,0,0,0,0
249
+ 30092,E,Racine (O'Hare-bound),-87.659458,41.87592,Racine,Racine (Blue Line),40470,0,0,1,0,0,0,0,0,0,0
250
+ 30039,S,Randolph/Wabash (Inner Loop),-87.626149,41.884431,Randolph/Wabash,"Randolph/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40200,0,0,0,0,1,0,1,0,1,1
251
+ 30038,N,Randolph/Wabash (Outer Loop),-87.626149,41.884431,Randolph/Wabash,"Randolph/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40200,0,0,0,1,1,0,0,0,0,0
252
+ 30119,E,Ridgeland (63rd-bound),-87.783661,41.887159,Ridgeland,Ridgeland (Green Line),40610,0,0,0,0,1,0,0,0,0,0
253
+ 30120,W,Ridgeland (Harlem-bound),-87.783661,41.887159,Ridgeland,Ridgeland (Green Line),40610,0,0,0,0,1,0,0,0,0,0
254
+ 30195,N,Rockwell (Kimball-bound),-87.6941,41.966115,Rockwell,Rockwell (Brown Line),41010,1,0,0,1,0,0,0,0,0,0
255
+ 30196,S,Rockwell (Loop-bound),-87.6941,41.966115,Rockwell,Rockwell (Brown Line),41010,1,0,0,1,0,0,0,0,0,0
256
+ 30080,N,Roosevelt/Wabash (Loop-Harlem-bound),-87.62659,41.867405,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,0,0,0,1,0,0,0,0,1
257
+ 30081,S,Roosevelt/Wabash (Midway-63rd-bound),-87.62659,41.867405,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,0,0,0,1,0,0,0,0,1
258
+ 30269,N,Roosevelt/State (Howard-bound),-87.627402,41.867368,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,1,0,0,0,0,0,0,0,0
259
+ 30270,S,Roosevelt/State (Howard-bound),-87.627402,41.867368,Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,1,1,0,0,0,0,0,0,0,0
260
+ 30160,S,Rosemont (Forest Pk-bound),-87.859388,41.983507,Rosemont,Rosemont (Blue Line),40820,1,0,1,0,0,0,0,0,0,0
261
+ 30159,N,Rosemont (O'Hare-bound),-87.859388,41.983507,Rosemont,Rosemont (Blue Line),40820,1,0,1,0,0,0,0,0,0,0
262
+ 30155,N,Sedgwick (Kimball-Linden-bound),-87.639302,41.910409,Sedgwick,Sedgwick (Brown & Purple Lines),40800,1,0,0,1,0,0,1,0,0,0
263
+ 30156,S,Sedgwick (Loop-bound),-87.639302,41.910409,Sedgwick,Sedgwick (Brown & Purple Lines),40800,1,0,0,1,0,0,1,0,0,0
264
+ 30017,S,Sheridan (95th-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,1,0,0,0,0,0,0,0,0
265
+ 30016,N,Sheridan (Howard-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,1,0,0,0,0,0,0,0,0
266
+ 30293,N,Sheridan (Howard-Linden-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,0,0,0,0,0,0,0,0,0
267
+ 30294,S,Sheridan (Loop-bound),-87.654929,41.953775,Sheridan,Sheridan (Red Line),40080,0,0,0,0,0,0,0,0,0,0
268
+ 30026,N,Skokie (Arrival),-87.751919,42.038951,Skokie,Dempster-Skokie (Yellow Line),40140,1,0,0,0,0,0,0,1,0,0
269
+ 30027,S,Skokie (Howard-bound),-87.751919,42.038951,Skokie,Dempster-Skokie (Yellow Line),40140,1,0,0,0,0,0,0,1,0,0
270
+ 30164,S,South Blvd (Howard-Loop-bound),-87.678329,42.027612,South Boulevard,South Boulevard (Purple Line),40840,0,0,0,0,0,1,1,0,0,0
271
+ 30163,N,South Blvd (Linden-bound),-87.678329,42.027612,South Boulevard,South Boulevard (Purple Line),40840,0,0,0,0,0,1,1,0,0,0
272
+ 30070,N,Southport (Kimball-bound),-87.663619,41.943744,Southport,Southport (Brown Line),40360,1,0,0,1,0,0,0,0,0,0
273
+ 30071,S,Southport (Loop-bound),-87.663619,41.943744,Southport,Southport (Brown Line),40360,1,0,0,1,0,0,0,0,0,0
274
+ 30037,S,Sox-35th (95th-bound),-87.630636,41.831191,Sox-35th,Sox-35th (Red Line),40190,1,1,0,0,0,0,0,0,0,0
275
+ 30036,N,Sox-35th (Howard-bound),-87.630636,41.831191,Sox-35th,Sox-35th (Red Line),40190,1,1,0,0,0,0,0,0,0,0
276
+ 30050,E,State/Lake (Inner Loop),-87.627835,41.88574,State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,0,0,0,0,1,0,1,0,1,1
277
+ 30051,W,State/Lake (Outer Loop),-87.627835,41.88574,State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,0,0,0,1,1,0,0,0,0,0
278
+ 30170,S,Thorndale (95th-bound),-87.659076,41.990259,Thorndale,Thorndale (Red Line),40880,0,1,0,0,0,0,0,0,0,0
279
+ 30169,N,Thorndale (Howard-bound),-87.659076,41.990259,Thorndale,Thorndale (Red Line),40880,0,1,0,0,0,0,0,0,0,0
280
+ 30069,W,UIC-Halsted (Forest Pk-bound),-87.649707,41.875474,UIC-Halsted,UIC-Halsted (Blue Line),40350,1,0,1,0,0,0,0,0,0,0
281
+ 30068,E,UIC-Halsted (O'Hare-bound),-87.649707,41.875474,UIC-Halsted,UIC-Halsted (Blue Line),40350,1,0,1,0,0,0,0,0,0,0
282
+ 30073,S,Washington/Dearborn (Forest Pk-bound),-87.62944,41.883164,Washington,Washington (Blue Line),40370,0,0,1,0,0,0,0,0,0,0
283
+ 30072,N,Washington/Dearborn (O'Hare-bound),-87.62944,41.883164,Washington,Washington (Blue Line),40370,0,0,1,0,0,0,0,0,0,0
284
+ 30141,N,Washington/Wells (Inner Loop),-87.63378,41.882695,Washington/Wells,"Washington/Wells (Brown, Orange, Purple & Pink Lines)",40730,1,0,0,0,0,0,1,0,1,1
285
+ 30142,S,Washington/Wells (Outer Loop),-87.63378,41.882695,Washington/Wells,"Washington/Wells (Brown, Orange, Purple & Pink Lines)",40730,1,0,0,1,0,0,0,0,0,0
286
+ 30231,N,Wellington (Kimball-Linden-bound),-87.653266,41.936033,Wellington,Wellington (Brown & Purple Lines),41210,1,0,0,1,0,0,1,0,0,0
287
+ 30232,S,Wellington (Loop-bound),-87.653266,41.936033,Wellington,Wellington (Brown & Purple Lines),41210,1,0,0,1,0,0,1,0,0,0
288
+ 30060,N,Western (Loop-bound),-87.684019,41.804546,Western,Western (Orange Line),40310,1,0,0,0,0,0,0,0,0,1
289
+ 30061,S,Western (Midway-bound),-87.684019,41.804546,Western,Western (Orange Line),40310,1,0,0,0,0,0,0,0,0,1
290
+ 30144,W,Western (54th/Cermak-bound),-87.685129,41.854225,Western,Western (Pink Line),40740,1,0,0,0,0,0,0,0,1,0
291
+ 30143,E,Western (Loop-bound),-87.685129,41.854225,Western,Western (Pink Line),40740,1,0,0,0,0,0,0,0,1,0
292
+ 30043,W,Western (Forest Pk-bound),-87.688436,41.875478,Western,Western (Blue Line - Forest Park Branch),40220,0,0,1,0,0,0,0,0,0,0
293
+ 30042,E,Western (O'Hare-bound),-87.688436,41.875478,Western,Western (Blue Line - Forest Park Branch),40220,0,0,1,0,0,0,0,0,0,0
294
+ 30130,S,Western/Milwaukee (Forest Pk-bound),-87.687364,41.916157,Western,Western (Blue Line - O'Hare Branch),40670,1,0,1,0,0,0,0,0,0,0
295
+ 30129,N,Western/Milwaukee (O'Hare-bound),-87.687364,41.916157,Western,Western (Blue Line - O'Hare Branch),40670,1,0,1,0,0,0,0,0,0,0
296
+ 30283,N,Western (Kimball-bound),-87.688502,41.966163,Western,Western (Brown Line),41480,1,0,0,1,0,0,0,0,0,0
297
+ 30284,S,Western (Loop-bound),-87.688502,41.966163,Western,Western (Brown Line),41480,1,0,0,1,0,0,0,0,0,0
298
+ 30106,S,Wilson (95th-bound),-87.657588,41.964273,Wilson,Wilson (Red Line),40540,0,1,0,0,0,0,0,0,0,0
299
+ 30105,N,Wilson (Howard-bound),-87.657588,41.964273,Wilson,Wilson (Red Line),40540,0,1,0,0,0,0,0,0,0,0
@@ -0,0 +1,13 @@
1
+ module CTA
2
+ class TrainTracker
3
+ class Estimate
4
+ attr_reader :station_id, :stop_id, :station_name, :stop_description, :run_number, :route, :destination_stop_id, :destination_name, :direction, :timestamp, :arrival_time, :approaching, :schedule, :fit, :delay
5
+
6
+ def initialize(params)
7
+ params.each do |key, value|
8
+ self.instance_variable_set("@#{ key }".to_sym, value)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,56 @@
1
+ module CTA
2
+ class TrainTracker
3
+
4
+ def initialize(key)
5
+ @key = key
6
+ @line_table = {
7
+ :red => "Red",
8
+ :blue => "Blue",
9
+ :brown => "Brn",
10
+ :orange => "Org",
11
+ :purple => "P",
12
+ :pink => "Pink",
13
+ :yellow => "Y"
14
+ }
15
+ end
16
+
17
+ def arrivals(params)
18
+ station_id = params[:station_id]
19
+ stop_id = params[:stop_id]
20
+ max = params[:max]
21
+ route = @line_table[params[:route]]
22
+
23
+ base_url = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?"
24
+ url = "#{ base_url }key=#{ @key }&mapid=#{ station_id }&stpid=#{ stop_id }&max=#{ max }&rt=#{ route }"
25
+
26
+ estimate_array = Nokogiri::XML(open(url)).xpath("//eta").map do |item|
27
+ Estimate.new({
28
+ :station_id => item.at("staId").text,
29
+ :stop_id => item.at("stpId").text,
30
+ :station_name => item.at("staNm").text,
31
+ :stop_description => item.at("stpDe").text,
32
+ :run_number => item.at("rn").text,
33
+ :route => @line_table.key(item.at("rt").text),
34
+ :destination_stop_id => item.at("destSt").text,
35
+ :destination_name => item.at("destNm").text,
36
+ :direction => item.at("trDr").text,
37
+ :timestamp => Time.parse(item.at("prdt").text),
38
+ :arrival_time => Time.parse(item.at("arrT").text),
39
+ :approaching => item.at("isApp").text.to_bool,
40
+ :schedule => item.at("isSch").text.to_bool,
41
+ :fit => item.at("isFlt").text.to_bool,
42
+ :delay => item.at("isDly").text.to_bool
43
+ })
44
+ end
45
+ estimate_array
46
+ end
47
+
48
+ def stops
49
+ CSV.read("lib/cta_L_stops.csv").map { |x| {x[0] => x[2]} }
50
+ end
51
+
52
+ def stations
53
+ CSV.read("lib/cta_L_stops.csv").map { |x| {x[7] => x[5]} }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1 @@
1
+ #$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cta-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Frank Bonetti
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.5.6
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.6
30
+ description: An easy way to access the Chicago Transit Authority API via the Ruby
31
+ programming language
32
+ email: frank.r.bonetti@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - cta-api-1.0.0.gem
38
+ - cta-api.gemspec
39
+ - Gemfile
40
+ - lib/bus-tracker/bus-tracker.rb
41
+ - lib/bus-tracker/pattern.rb
42
+ - lib/bus-tracker/point.rb
43
+ - lib/bus-tracker/prediction.rb
44
+ - lib/bus-tracker/service-bulletin.rb
45
+ - lib/bus-tracker/service.rb
46
+ - lib/bus-tracker/stop.rb
47
+ - lib/bus-tracker/vehicle.rb
48
+ - lib/cta-api/version.rb
49
+ - lib/cta-api.rb
50
+ - lib/cta_L_stops.csv
51
+ - lib/train-tracker/estimate.rb
52
+ - lib/train-tracker/train-tracker.rb
53
+ - LICENSE
54
+ - Rakefile
55
+ - README.md
56
+ - spec/spec_helper.rb
57
+ homepage:
58
+ licenses:
59
+ - MIT
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 1.8.24
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: An easy way to access the Chicago Transit Authority API via the Ruby programming
82
+ language
83
+ test_files: []