translink 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +21 -0
  5. data/README.md +34 -0
  6. data/Rakefile +10 -0
  7. data/bin/translink +7 -0
  8. data/doc/schema.graffle +786 -0
  9. data/doc/schema.png +0 -0
  10. data/lib/translink.rb +18 -0
  11. data/lib/translink/cli.rb +53 -0
  12. data/lib/translink/code.rb +9 -0
  13. data/lib/translink/crawler.rb +21 -0
  14. data/lib/translink/db.rb +20 -0
  15. data/lib/translink/model/route.rb +28 -0
  16. data/lib/translink/model/service.rb +20 -0
  17. data/lib/translink/model/stop.rb +31 -0
  18. data/lib/translink/model/stop/extractor.rb +67 -0
  19. data/lib/translink/page.rb +22 -0
  20. data/lib/translink/page/route.rb +29 -0
  21. data/lib/translink/page/timetable.rb +31 -0
  22. data/lib/translink/page/trip.rb +35 -0
  23. data/lib/translink/version.rb +3 -0
  24. data/test/fixtures/sample/route.html +1288 -0
  25. data/test/fixtures/sample/timetable.html +568 -0
  26. data/test/fixtures/verbatim/route.html +8484 -0
  27. data/test/fixtures/verbatim/timetable.html +6962 -0
  28. data/test/fixtures/verbatim/trip.html +856 -0
  29. data/test/helper.rb +9 -0
  30. data/test/unit/cli_test.rb +78 -0
  31. data/test/unit/code_test.rb +12 -0
  32. data/test/unit/crawler_test.rb +42 -0
  33. data/test/unit/model/route_test.rb +35 -0
  34. data/test/unit/model/service_test.rb +23 -0
  35. data/test/unit/model/stop/extractor_test.rb +112 -0
  36. data/test/unit/model/stop_test.rb +37 -0
  37. data/test/unit/page/route_test.rb +41 -0
  38. data/test/unit/page/timetable_test.rb +26 -0
  39. data/test/unit/page/trip_test.rb +35 -0
  40. data/test/unit/page_test.rb +11 -0
  41. data/tmp/.gitkeep +0 -0
  42. data/translink.gemspec +30 -0
  43. metadata +175 -0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in conformist.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2011 Tate Johnson <tate@tatey.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # Translink
2
+
3
+ [![Build Status](https://secure.travis-ci.org/tatey/translink.png)](http://travis-ci.org/tatey/translink)
4
+
5
+ [Translink](http://translink.com.au/) (Organisation) coordinates public transport operations in
6
+ Brisbane. Their website has an abundance of data with no easy way for a developer
7
+ to query it.
8
+
9
+ Translink (Program) scrapes bus stops, routes and service times into a nicely structured
10
+ database. Data is sourced from the [Translink website](http://translink.com.au/). Only routes
11
+ with codes 100..499, GLIDER and LOOP are persisted. You should be aware their data is protected by [copyright](http://translink.com.au/site-information/legal/copyright).
12
+
13
+ ## Usage
14
+
15
+ First install.
16
+
17
+ $ [sudo] gem install translink
18
+
19
+ Then scrape all bus stops, routes and services for Thursday, 24 November 2011 saving
20
+ them into a SQLite database named "2011-11-24.sqlite3" in the current working directory.
21
+
22
+ $ translink scrape 2011-11-24
23
+
24
+ Change the path to the SQLite database.
25
+
26
+ $ translink scrape 2011-11-24 --uri="sqlite:///Users/Tate/Downloads/translink.sqlite3"
27
+
28
+ ## Schema
29
+
30
+ ![Class Analysis Diagram](https://github.com/tatey/translink/raw/master/doc/schema.png)
31
+
32
+ ## Copyright
33
+
34
+ Copyright © 2011 Tate Johnson. Released under the MIT license. See LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'bundler/setup'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new :test do |test|
6
+ test.libs << 'test'
7
+ test.pattern = 'test/**/*_test.rb'
8
+ end
9
+
10
+ task :default => :test
data/bin/translink ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ require 'translink'
6
+
7
+ Translink::CLI.new(Dir.pwd).run ARGV.join(' ')
@@ -0,0 +1,786 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>ActiveLayerIndex</key>
6
+ <integer>0</integer>
7
+ <key>ApplicationVersion</key>
8
+ <array>
9
+ <string>com.omnigroup.OmniGraffle</string>
10
+ <string>138.33.0.157554</string>
11
+ </array>
12
+ <key>AutoAdjust</key>
13
+ <true/>
14
+ <key>BackgroundGraphic</key>
15
+ <dict>
16
+ <key>Bounds</key>
17
+ <string>{{0, 0}, {559, 783}}</string>
18
+ <key>Class</key>
19
+ <string>SolidGraphic</string>
20
+ <key>ID</key>
21
+ <integer>2</integer>
22
+ <key>Style</key>
23
+ <dict>
24
+ <key>shadow</key>
25
+ <dict>
26
+ <key>Draws</key>
27
+ <string>NO</string>
28
+ </dict>
29
+ <key>stroke</key>
30
+ <dict>
31
+ <key>Draws</key>
32
+ <string>NO</string>
33
+ </dict>
34
+ </dict>
35
+ </dict>
36
+ <key>CanvasOrigin</key>
37
+ <string>{0, 0}</string>
38
+ <key>ColumnAlign</key>
39
+ <integer>1</integer>
40
+ <key>ColumnSpacing</key>
41
+ <real>36</real>
42
+ <key>CreationDate</key>
43
+ <string>2011-12-03 07:12:33 +0000</string>
44
+ <key>Creator</key>
45
+ <string>Tate Johnson</string>
46
+ <key>DisplayScale</key>
47
+ <string>1 0/72 in = 1.0000 in</string>
48
+ <key>GraphDocumentVersion</key>
49
+ <integer>8</integer>
50
+ <key>GraphicsList</key>
51
+ <array>
52
+ <dict>
53
+ <key>Bounds</key>
54
+ <string>{{213.29623, 311.6265}, {15, 14}}</string>
55
+ <key>Class</key>
56
+ <string>ShapedGraphic</string>
57
+ <key>FitText</key>
58
+ <string>YES</string>
59
+ <key>Flow</key>
60
+ <string>Resize</string>
61
+ <key>ID</key>
62
+ <integer>55</integer>
63
+ <key>Line</key>
64
+ <dict>
65
+ <key>ID</key>
66
+ <integer>53</integer>
67
+ <key>Offset</key>
68
+ <real>8.3333330154418945</real>
69
+ <key>Position</key>
70
+ <real>0.76637172698974609</real>
71
+ <key>RotationType</key>
72
+ <integer>0</integer>
73
+ </dict>
74
+ <key>Shape</key>
75
+ <string>Rectangle</string>
76
+ <key>Style</key>
77
+ <dict>
78
+ <key>fill</key>
79
+ <dict>
80
+ <key>Draws</key>
81
+ <string>NO</string>
82
+ </dict>
83
+ <key>shadow</key>
84
+ <dict>
85
+ <key>Draws</key>
86
+ <string>NO</string>
87
+ </dict>
88
+ <key>stroke</key>
89
+ <dict>
90
+ <key>Draws</key>
91
+ <string>NO</string>
92
+ </dict>
93
+ </dict>
94
+ <key>Text</key>
95
+ <dict>
96
+ <key>Align</key>
97
+ <integer>0</integer>
98
+ <key>Text</key>
99
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
100
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
101
+ {\colortbl;\red255\green255\blue255;}
102
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
103
+
104
+ \f0\fs24 \cf0 *}</string>
105
+ <key>VerticalPad</key>
106
+ <integer>0</integer>
107
+ </dict>
108
+ <key>Wrap</key>
109
+ <string>NO</string>
110
+ </dict>
111
+ <dict>
112
+ <key>Bounds</key>
113
+ <string>{{185.63945, 308.30548}, {16, 14}}</string>
114
+ <key>Class</key>
115
+ <string>ShapedGraphic</string>
116
+ <key>FitText</key>
117
+ <string>Vertical</string>
118
+ <key>Flow</key>
119
+ <string>Resize</string>
120
+ <key>ID</key>
121
+ <integer>54</integer>
122
+ <key>Line</key>
123
+ <dict>
124
+ <key>ID</key>
125
+ <integer>53</integer>
126
+ <key>Offset</key>
127
+ <real>11.666666984558105</real>
128
+ <key>Position</key>
129
+ <real>0.28574752807617188</real>
130
+ <key>RotationType</key>
131
+ <integer>0</integer>
132
+ </dict>
133
+ <key>Shape</key>
134
+ <string>Rectangle</string>
135
+ <key>Style</key>
136
+ <dict>
137
+ <key>fill</key>
138
+ <dict>
139
+ <key>Draws</key>
140
+ <string>NO</string>
141
+ </dict>
142
+ <key>shadow</key>
143
+ <dict>
144
+ <key>Draws</key>
145
+ <string>NO</string>
146
+ </dict>
147
+ <key>stroke</key>
148
+ <dict>
149
+ <key>Draws</key>
150
+ <string>NO</string>
151
+ </dict>
152
+ </dict>
153
+ <key>Text</key>
154
+ <dict>
155
+ <key>Align</key>
156
+ <integer>0</integer>
157
+ <key>Text</key>
158
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
159
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
160
+ {\colortbl;\red255\green255\blue255;}
161
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
162
+
163
+ \f0\fs24 \cf0 1}</string>
164
+ <key>VerticalPad</key>
165
+ <integer>0</integer>
166
+ </dict>
167
+ </dict>
168
+ <dict>
169
+ <key>Class</key>
170
+ <string>LineGraphic</string>
171
+ <key>Head</key>
172
+ <dict>
173
+ <key>ID</key>
174
+ <integer>38</integer>
175
+ </dict>
176
+ <key>ID</key>
177
+ <integer>53</integer>
178
+ <key>Points</key>
179
+ <array>
180
+ <string>{177.5, 326.97943}</string>
181
+ <string>{234, 326.95386}</string>
182
+ </array>
183
+ <key>Style</key>
184
+ <dict>
185
+ <key>stroke</key>
186
+ <dict>
187
+ <key>HeadArrow</key>
188
+ <string>0</string>
189
+ <key>LineType</key>
190
+ <integer>1</integer>
191
+ <key>TailArrow</key>
192
+ <string>0</string>
193
+ </dict>
194
+ </dict>
195
+ <key>Tail</key>
196
+ <dict>
197
+ <key>ID</key>
198
+ <integer>41</integer>
199
+ </dict>
200
+ </dict>
201
+ <dict>
202
+ <key>Bounds</key>
203
+ <string>{{334.79999, 311.66666}, {15, 14}}</string>
204
+ <key>Class</key>
205
+ <string>ShapedGraphic</string>
206
+ <key>FitText</key>
207
+ <string>YES</string>
208
+ <key>Flow</key>
209
+ <string>Resize</string>
210
+ <key>ID</key>
211
+ <integer>46</integer>
212
+ <key>Line</key>
213
+ <dict>
214
+ <key>ID</key>
215
+ <integer>19</integer>
216
+ <key>Offset</key>
217
+ <real>8.3333330154418945</real>
218
+ <key>Position</key>
219
+ <real>0.3061947226524353</real>
220
+ <key>RotationType</key>
221
+ <integer>0</integer>
222
+ </dict>
223
+ <key>Shape</key>
224
+ <string>Rectangle</string>
225
+ <key>Style</key>
226
+ <dict>
227
+ <key>fill</key>
228
+ <dict>
229
+ <key>Draws</key>
230
+ <string>NO</string>
231
+ </dict>
232
+ <key>shadow</key>
233
+ <dict>
234
+ <key>Draws</key>
235
+ <string>NO</string>
236
+ </dict>
237
+ <key>stroke</key>
238
+ <dict>
239
+ <key>Draws</key>
240
+ <string>NO</string>
241
+ </dict>
242
+ </dict>
243
+ <key>Text</key>
244
+ <dict>
245
+ <key>Align</key>
246
+ <integer>0</integer>
247
+ <key>Text</key>
248
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
249
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
250
+ {\colortbl;\red255\green255\blue255;}
251
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
252
+
253
+ \f0\fs24 \cf0 *}</string>
254
+ <key>VerticalPad</key>
255
+ <integer>0</integer>
256
+ </dict>
257
+ <key>Wrap</key>
258
+ <string>NO</string>
259
+ </dict>
260
+ <dict>
261
+ <key>Bounds</key>
262
+ <string>{{360.14474, 308.33334}, {16, 14}}</string>
263
+ <key>Class</key>
264
+ <string>ShapedGraphic</string>
265
+ <key>FitText</key>
266
+ <string>Vertical</string>
267
+ <key>Flow</key>
268
+ <string>Resize</string>
269
+ <key>ID</key>
270
+ <integer>45</integer>
271
+ <key>Line</key>
272
+ <dict>
273
+ <key>ID</key>
274
+ <integer>19</integer>
275
+ <key>Offset</key>
276
+ <real>11.666666984558105</real>
277
+ <key>Position</key>
278
+ <real>0.76362365484237671</real>
279
+ <key>RotationType</key>
280
+ <integer>0</integer>
281
+ </dict>
282
+ <key>Shape</key>
283
+ <string>Rectangle</string>
284
+ <key>Style</key>
285
+ <dict>
286
+ <key>fill</key>
287
+ <dict>
288
+ <key>Draws</key>
289
+ <string>NO</string>
290
+ </dict>
291
+ <key>shadow</key>
292
+ <dict>
293
+ <key>Draws</key>
294
+ <string>NO</string>
295
+ </dict>
296
+ <key>stroke</key>
297
+ <dict>
298
+ <key>Draws</key>
299
+ <string>NO</string>
300
+ </dict>
301
+ </dict>
302
+ <key>Text</key>
303
+ <dict>
304
+ <key>Align</key>
305
+ <integer>0</integer>
306
+ <key>Text</key>
307
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
308
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
309
+ {\colortbl;\red255\green255\blue255;}
310
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
311
+
312
+ \f0\fs24 \cf0 1}</string>
313
+ <key>VerticalPad</key>
314
+ <integer>0</integer>
315
+ </dict>
316
+ </dict>
317
+ <dict>
318
+ <key>Class</key>
319
+ <string>LineGraphic</string>
320
+ <key>Head</key>
321
+ <dict>
322
+ <key>ID</key>
323
+ <integer>35</integer>
324
+ </dict>
325
+ <key>ID</key>
326
+ <integer>19</integer>
327
+ <key>Points</key>
328
+ <array>
329
+ <string>{325, 327}</string>
330
+ <string>{381.5, 327}</string>
331
+ </array>
332
+ <key>Style</key>
333
+ <dict>
334
+ <key>stroke</key>
335
+ <dict>
336
+ <key>HeadArrow</key>
337
+ <string>0</string>
338
+ <key>LineType</key>
339
+ <integer>1</integer>
340
+ <key>TailArrow</key>
341
+ <string>0</string>
342
+ </dict>
343
+ </dict>
344
+ <key>Tail</key>
345
+ <dict>
346
+ <key>ID</key>
347
+ <integer>38</integer>
348
+ </dict>
349
+ </dict>
350
+ <dict>
351
+ <key>Class</key>
352
+ <string>TableGroup</string>
353
+ <key>Graphics</key>
354
+ <array>
355
+ <dict>
356
+ <key>Bounds</key>
357
+ <string>{{87, 271}, {90, 14}}</string>
358
+ <key>Class</key>
359
+ <string>ShapedGraphic</string>
360
+ <key>FitText</key>
361
+ <string>Vertical</string>
362
+ <key>Flow</key>
363
+ <string>Resize</string>
364
+ <key>ID</key>
365
+ <integer>40</integer>
366
+ <key>Shape</key>
367
+ <string>Rectangle</string>
368
+ <key>Style</key>
369
+ <dict>
370
+ <key>fill</key>
371
+ <dict>
372
+ <key>GradientCenter</key>
373
+ <string>{-0.29411799, -0.26470599}</string>
374
+ </dict>
375
+ </dict>
376
+ <key>Text</key>
377
+ <dict>
378
+ <key>Text</key>
379
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
380
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
381
+ {\colortbl;\red255\green255\blue255;}
382
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
383
+
384
+ \f0\b\fs24 \cf0 Stop}</string>
385
+ <key>VerticalPad</key>
386
+ <integer>0</integer>
387
+ </dict>
388
+ <key>TextPlacement</key>
389
+ <integer>0</integer>
390
+ </dict>
391
+ <dict>
392
+ <key>Bounds</key>
393
+ <string>{{87, 285}, {90, 84}}</string>
394
+ <key>Class</key>
395
+ <string>ShapedGraphic</string>
396
+ <key>FitText</key>
397
+ <string>Vertical</string>
398
+ <key>Flow</key>
399
+ <string>Resize</string>
400
+ <key>ID</key>
401
+ <integer>41</integer>
402
+ <key>Shape</key>
403
+ <string>Rectangle</string>
404
+ <key>Style</key>
405
+ <dict>
406
+ <key>fill</key>
407
+ <dict>
408
+ <key>GradientCenter</key>
409
+ <string>{-0.29411799, -0.26470599}</string>
410
+ </dict>
411
+ </dict>
412
+ <key>Text</key>
413
+ <dict>
414
+ <key>Align</key>
415
+ <integer>0</integer>
416
+ <key>Text</key>
417
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
418
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
419
+ {\colortbl;\red255\green255\blue255;}
420
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
421
+
422
+ \f0\fs24 \cf0 id\
423
+ name\
424
+ summary\
425
+ street1\
426
+ street2\
427
+ locality}</string>
428
+ <key>VerticalPad</key>
429
+ <integer>0</integer>
430
+ </dict>
431
+ <key>TextPlacement</key>
432
+ <integer>0</integer>
433
+ </dict>
434
+ </array>
435
+ <key>GridH</key>
436
+ <array>
437
+ <integer>40</integer>
438
+ <integer>41</integer>
439
+ <array/>
440
+ </array>
441
+ <key>ID</key>
442
+ <integer>39</integer>
443
+ </dict>
444
+ <dict>
445
+ <key>Class</key>
446
+ <string>TableGroup</string>
447
+ <key>Graphics</key>
448
+ <array>
449
+ <dict>
450
+ <key>Bounds</key>
451
+ <string>{{234.5, 285}, {90, 14}}</string>
452
+ <key>Class</key>
453
+ <string>ShapedGraphic</string>
454
+ <key>FitText</key>
455
+ <string>Vertical</string>
456
+ <key>Flow</key>
457
+ <string>Resize</string>
458
+ <key>ID</key>
459
+ <integer>37</integer>
460
+ <key>Shape</key>
461
+ <string>Rectangle</string>
462
+ <key>Style</key>
463
+ <dict>
464
+ <key>fill</key>
465
+ <dict>
466
+ <key>GradientCenter</key>
467
+ <string>{-0.29411799, -0.26470599}</string>
468
+ </dict>
469
+ </dict>
470
+ <key>Text</key>
471
+ <dict>
472
+ <key>Text</key>
473
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
474
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
475
+ {\colortbl;\red255\green255\blue255;}
476
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
477
+
478
+ \f0\b\fs24 \cf0 Service}</string>
479
+ <key>VerticalPad</key>
480
+ <integer>0</integer>
481
+ </dict>
482
+ <key>TextPlacement</key>
483
+ <integer>0</integer>
484
+ </dict>
485
+ <dict>
486
+ <key>Bounds</key>
487
+ <string>{{234.5, 299}, {90, 56}}</string>
488
+ <key>Class</key>
489
+ <string>ShapedGraphic</string>
490
+ <key>FitText</key>
491
+ <string>Vertical</string>
492
+ <key>Flow</key>
493
+ <string>Resize</string>
494
+ <key>ID</key>
495
+ <integer>38</integer>
496
+ <key>Shape</key>
497
+ <string>Rectangle</string>
498
+ <key>Style</key>
499
+ <dict>
500
+ <key>fill</key>
501
+ <dict>
502
+ <key>GradientCenter</key>
503
+ <string>{-0.29411799, -0.26470599}</string>
504
+ </dict>
505
+ </dict>
506
+ <key>Text</key>
507
+ <dict>
508
+ <key>Align</key>
509
+ <integer>0</integer>
510
+ <key>Text</key>
511
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
512
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
513
+ {\colortbl;\red255\green255\blue255;}
514
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
515
+
516
+ \f0\fs24 \cf0 id\
517
+ time\
518
+ route_id\
519
+ stop_id}</string>
520
+ <key>VerticalPad</key>
521
+ <integer>0</integer>
522
+ </dict>
523
+ <key>TextPlacement</key>
524
+ <integer>0</integer>
525
+ </dict>
526
+ </array>
527
+ <key>GridH</key>
528
+ <array>
529
+ <integer>37</integer>
530
+ <integer>38</integer>
531
+ <array/>
532
+ </array>
533
+ <key>ID</key>
534
+ <integer>36</integer>
535
+ </dict>
536
+ <dict>
537
+ <key>Class</key>
538
+ <string>TableGroup</string>
539
+ <key>Graphics</key>
540
+ <array>
541
+ <dict>
542
+ <key>Bounds</key>
543
+ <string>{{382, 285}, {90, 14}}</string>
544
+ <key>Class</key>
545
+ <string>ShapedGraphic</string>
546
+ <key>FitText</key>
547
+ <string>Vertical</string>
548
+ <key>Flow</key>
549
+ <string>Resize</string>
550
+ <key>ID</key>
551
+ <integer>34</integer>
552
+ <key>Shape</key>
553
+ <string>Rectangle</string>
554
+ <key>Style</key>
555
+ <dict>
556
+ <key>fill</key>
557
+ <dict>
558
+ <key>GradientCenter</key>
559
+ <string>{-0.29411799, -0.26470599}</string>
560
+ </dict>
561
+ </dict>
562
+ <key>Text</key>
563
+ <dict>
564
+ <key>Text</key>
565
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
566
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
567
+ {\colortbl;\red255\green255\blue255;}
568
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
569
+
570
+ \f0\b\fs24 \cf0 Route}</string>
571
+ <key>VerticalPad</key>
572
+ <integer>0</integer>
573
+ </dict>
574
+ <key>TextPlacement</key>
575
+ <integer>0</integer>
576
+ </dict>
577
+ <dict>
578
+ <key>Bounds</key>
579
+ <string>{{382, 299}, {90, 56}}</string>
580
+ <key>Class</key>
581
+ <string>ShapedGraphic</string>
582
+ <key>FitText</key>
583
+ <string>Vertical</string>
584
+ <key>Flow</key>
585
+ <string>Resize</string>
586
+ <key>ID</key>
587
+ <integer>35</integer>
588
+ <key>Shape</key>
589
+ <string>Rectangle</string>
590
+ <key>Style</key>
591
+ <dict>
592
+ <key>fill</key>
593
+ <dict>
594
+ <key>GradientCenter</key>
595
+ <string>{-0.29411799, -0.26470599}</string>
596
+ </dict>
597
+ </dict>
598
+ <key>Text</key>
599
+ <dict>
600
+ <key>Align</key>
601
+ <integer>0</integer>
602
+ <key>Text</key>
603
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
604
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
605
+ {\colortbl;\red255\green255\blue255;}
606
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
607
+
608
+ \f0\fs24 \cf0 id\
609
+ code\
610
+ name\
611
+ translink_id}</string>
612
+ <key>VerticalPad</key>
613
+ <integer>0</integer>
614
+ </dict>
615
+ <key>TextPlacement</key>
616
+ <integer>0</integer>
617
+ </dict>
618
+ </array>
619
+ <key>GridH</key>
620
+ <array>
621
+ <integer>34</integer>
622
+ <integer>35</integer>
623
+ <array/>
624
+ </array>
625
+ <key>ID</key>
626
+ <integer>33</integer>
627
+ </dict>
628
+ </array>
629
+ <key>GridInfo</key>
630
+ <dict/>
631
+ <key>GuidesLocked</key>
632
+ <string>NO</string>
633
+ <key>GuidesVisible</key>
634
+ <string>YES</string>
635
+ <key>HPages</key>
636
+ <integer>1</integer>
637
+ <key>ImageCounter</key>
638
+ <integer>1</integer>
639
+ <key>KeepToScale</key>
640
+ <false/>
641
+ <key>Layers</key>
642
+ <array>
643
+ <dict>
644
+ <key>Lock</key>
645
+ <string>NO</string>
646
+ <key>Name</key>
647
+ <string>Layer 1</string>
648
+ <key>Print</key>
649
+ <string>YES</string>
650
+ <key>View</key>
651
+ <string>YES</string>
652
+ </dict>
653
+ </array>
654
+ <key>LayoutInfo</key>
655
+ <dict>
656
+ <key>Animate</key>
657
+ <string>NO</string>
658
+ <key>circoMinDist</key>
659
+ <real>18</real>
660
+ <key>circoSeparation</key>
661
+ <real>0.0</real>
662
+ <key>layoutEngine</key>
663
+ <string>dot</string>
664
+ <key>neatoSeparation</key>
665
+ <real>0.0</real>
666
+ <key>twopiSeparation</key>
667
+ <real>0.0</real>
668
+ </dict>
669
+ <key>LinksVisible</key>
670
+ <string>NO</string>
671
+ <key>MagnetsVisible</key>
672
+ <string>NO</string>
673
+ <key>MasterSheets</key>
674
+ <array/>
675
+ <key>ModificationDate</key>
676
+ <string>2012-03-13 11:33:14 +0000</string>
677
+ <key>Modifier</key>
678
+ <string>Tate Johnson</string>
679
+ <key>NotesVisible</key>
680
+ <string>NO</string>
681
+ <key>Orientation</key>
682
+ <integer>2</integer>
683
+ <key>OriginVisible</key>
684
+ <string>NO</string>
685
+ <key>PageBreaks</key>
686
+ <string>YES</string>
687
+ <key>PrintInfo</key>
688
+ <dict>
689
+ <key>NSBottomMargin</key>
690
+ <array>
691
+ <string>float</string>
692
+ <string>41</string>
693
+ </array>
694
+ <key>NSHorizonalPagination</key>
695
+ <array>
696
+ <string>int</string>
697
+ <string>0</string>
698
+ </array>
699
+ <key>NSLeftMargin</key>
700
+ <array>
701
+ <string>float</string>
702
+ <string>18</string>
703
+ </array>
704
+ <key>NSPaperSize</key>
705
+ <array>
706
+ <string>coded</string>
707
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgVMCgUoDhg==</string>
708
+ </array>
709
+ <key>NSPrintReverseOrientation</key>
710
+ <array>
711
+ <string>int</string>
712
+ <string>0</string>
713
+ </array>
714
+ <key>NSRightMargin</key>
715
+ <array>
716
+ <string>float</string>
717
+ <string>18</string>
718
+ </array>
719
+ <key>NSTopMargin</key>
720
+ <array>
721
+ <string>float</string>
722
+ <string>18</string>
723
+ </array>
724
+ </dict>
725
+ <key>PrintOnePage</key>
726
+ <false/>
727
+ <key>ReadOnly</key>
728
+ <string>NO</string>
729
+ <key>RowAlign</key>
730
+ <integer>1</integer>
731
+ <key>RowSpacing</key>
732
+ <real>36</real>
733
+ <key>SheetTitle</key>
734
+ <string>Canvas 1</string>
735
+ <key>SmartAlignmentGuidesActive</key>
736
+ <string>YES</string>
737
+ <key>SmartDistanceGuidesActive</key>
738
+ <string>YES</string>
739
+ <key>UniqueID</key>
740
+ <integer>1</integer>
741
+ <key>UseEntirePage</key>
742
+ <false/>
743
+ <key>VPages</key>
744
+ <integer>1</integer>
745
+ <key>WindowInfo</key>
746
+ <dict>
747
+ <key>CurrentSheet</key>
748
+ <integer>0</integer>
749
+ <key>ExpandedCanvases</key>
750
+ <array>
751
+ <dict>
752
+ <key>name</key>
753
+ <string>Canvas 1</string>
754
+ </dict>
755
+ </array>
756
+ <key>Frame</key>
757
+ <string>{{335, 4}, {693, 874}}</string>
758
+ <key>ListView</key>
759
+ <true/>
760
+ <key>OutlineWidth</key>
761
+ <integer>142</integer>
762
+ <key>RightSidebar</key>
763
+ <false/>
764
+ <key>ShowRuler</key>
765
+ <true/>
766
+ <key>Sidebar</key>
767
+ <true/>
768
+ <key>SidebarWidth</key>
769
+ <integer>120</integer>
770
+ <key>VisibleRegion</key>
771
+ <string>{{0, 0}, {558, 719}}</string>
772
+ <key>Zoom</key>
773
+ <real>1</real>
774
+ <key>ZoomValues</key>
775
+ <array>
776
+ <array>
777
+ <string>Canvas 1</string>
778
+ <real>1</real>
779
+ <real>1</real>
780
+ </array>
781
+ </array>
782
+ </dict>
783
+ <key>saveQuickLookFiles</key>
784
+ <string>YES</string>
785
+ </dict>
786
+ </plist>