forked from TransportVic/TransportVic2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
update-gtfs.js
84 lines (78 loc) · 2.32 KB
/
update-gtfs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const fs = require('fs')
const path = require('path')
const utils = require('./utils')
const urls = require('./urls')
const AdmZip = require('adm-zip')
function walk(dir, done) {
let results = []
let dirs = []
fs.readdir(dir, function(err, list) {
if (err) return done(err)
let i = 0
function next() {
let file = list[i++]
if (!file) {
results = results.concat(dirs)
return done(null, results)
}
file = path.resolve(dir, file)
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
dirs.push({file: false, path: file})
walk(file, function(err, res) {
results = results.concat(res)
next()
})
} else {
results.push({file: true, path: file})
next()
}
})
}
next()
})
}
function downloadGTFS(done) {
utils.request(urls.gtfsFeed, {
raw: true,
timeout: 60 * 1000 * 10
}).then(data => {
walk(path.join(__dirname, 'gtfs'), (err, files) => {
walk(path.join(__dirname, 'load-gtfs', 'spliced-gtfs-stuff'), (err, spliced) => {
let allFiles = (files || []).concat(spliced || [])
for (let file of allFiles) {
try {
if (file.file) fs.unlinkSync(file.path)
else fs.rmdirSync(file.path)
} catch (err) {}
}
console.log('Deleted existing files')
let gtfsFilePath = path.join(__dirname, 'gtfs', 'gtfs.zip')
fs.writeFile(gtfsFilePath, data, () => {
console.log('Wrote GTFS Zip')
data = null
let zip = new AdmZip(gtfsFilePath)
zip.extractAllTo(path.join(__dirname, 'gtfs'), true)
for (let i = 1; i <= 11; i++) {
if (i !== 9) {
try {
let unzipPath = path.join(__dirname, 'gtfs', i.toString())
let zip = new AdmZip(path.join(unzipPath, 'google_transit.zip'))
zip.extractAllTo(unzipPath, true)
console.log('Unzipped GTFS Pack', i)
} catch (err) {
console.log('Failed to unzip ' + i)
}
}
}
done(0)
})
})
})
}).catch(err => {
console.error('Failed to download GTFS, exiting')
console.error(err)
done(1)
})
}
module.exports = downloadGTFS