Skip to content

Instantly share code, notes, and snippets.

@ozten
Created May 3, 2012 23:52
Show Gist options
  • Select an option

  • Save ozten/2590522 to your computer and use it in GitHub Desktop.

Select an option

Save ozten/2590522 to your computer and use it in GitHub Desktop.
A script to parse useragentstring.com HTML into test JSON
var fs = require('fs');
// Parses HTML from http://www.useragentstring.com/pages/All/
/* Build a json object like:
{
tests: [
{
comment: "Internet Explorer"
},
{
ua: "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))",
os: "Windows NT",
browser: "Internet Explorer",
version: "9"
}
]
}
*/
var d = {
tests: []
},
last_browser = 'Unknown';
function parse(data) {
for (var i=0; i < data.length; i++) {
switch (data[i]) {
case '<':
// h3 Browser Name
if (i + 2 < data.length &&
data[i + 1] === 'h' &&
data[i + 2] === '3') {
i = parse_h3(data, i + 3);
// a is user agent string
} else if (i + 1 < data.length &&
data[i + 1] === 'a' &&
(data[i + 2] === ' ' || data[i + 2] === '>')) {
i = parse_a(data, i + 1);
}
break;
default:
// no op
break;
}
}
};
function parse_h3 (data, i) {
var new_i = data.length;
var end = data.indexOf('</h3>', i);
if (end === -1) {
console.log("WARN no </h3> found. Stopping.");
} else {
// Sometimes there is an image tag...
if (data[i + 1] === '<' &&
data.indexOf('/>', i + 1) !== -1 &&
data.indexOf('/>', i + 1) < end) {
i = data.indexOf('/>', i + 1) + 1;
}
var browser = last_browser = data.substring(i + 1, end);
d.tests.push({comment: browser});
new_i = end;
}
return new_i;
}
function parse_a (data, i) {
var new_i = data.length;
var end = data.indexOf('</a>', i);
if (end === -1 ) {
console.log("WARN no </a> found. Stopping.");
} else {
new_i = end;
var start = data.indexOf('>', i);
if (start !== -1) {
d.tests.push({
ua: data.substring(start + 1, end),
os: "",
browser: last_browser,
version: ""
});
}
}
return new_i;
}
fs.readFile('t_user_agents.html', 'utf-8', function (err, data) {
if (err) throw err;
parse(data);
fs.writeFile('f_user_agents.json', JSON.stringify(d, null, 2), 'utf8');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment