Tickets issued to the low number plates in Washington, DC.
Legality: looking solid. No automated clause in DC's ToS and no terms displayed by the outsourced Xerox portal. No personal data included.
Requires: node +
Tickets issued to the low number plates in Washington, DC.
Legality: looking solid. No automated clause in DC's ToS and no terms displayed by the outsourced Xerox portal. No personal data included.
Requires: node +
var request = require('request'), | |
fs = require('fs'), | |
cheerio = require('cheerio'); | |
var url = 'https://wmq.etimspayments.com/pbw/inputAction.doh'; | |
var all = {}; | |
function getPlate(p, cb) { | |
var r = request({ | |
method: 'POST', | |
headers: { | |
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.28 Safari/537.31', | |
'Referrer': 'https://wmq.etimspayments.com/pbw/include/dc_parking/input.jsp?ticketType=P', | |
'COOKIE': 'JSESSIONID=0000LtZe0eFegls33J4eS3BQ9V4:-1' | |
}, | |
form: { | |
clientcode: '09', | |
clientAccount: 7, | |
requestType: 'submit', | |
requestCount: 1, | |
ticketNumber: '', | |
statePlate: 'DC', | |
plateNumber: p, | |
submit: 'Submit' | |
}, | |
url: url | |
}, function(err, d) { | |
var $ = cheerio.load(d.body); | |
var tn = $('b').filter(function(i, el) { | |
return $(el).text().trim() == 'Violation'; | |
}); | |
var table = tn.parent().parent().parent().parent(); | |
var data = table.find('tr').map(function(i, el) { | |
return $(el).find('td').map(function(i, el) { | |
return $(el).text(); | |
}); | |
}); | |
all[plateNumber] = data; | |
cb(); | |
}); | |
} | |
var plateNumber = 1; | |
function iterate() { | |
console.log('getting plate ', plateNumber); | |
if (plateNumber < 100) getPlate(plateNumber++, iterate); | |
else { | |
fs.writeFileSync('plates.json', JSON.stringify(all, null, 2)); | |
} | |
} | |
iterate(); |