48 lines
1.2 KiB
JavaScript
Executable File
48 lines
1.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
const parseUsingLDJSONData = require('./services/ldjson-parser')
|
|
const parseUsingDOM = require('./services/dom-parser')
|
|
const { createParserError, createAppLogger } = require('./utils')
|
|
|
|
const parseHTMLString = (html, { verbose }) => {
|
|
const logger = verbose ?
|
|
createAppLogger({ dev: true }) :
|
|
null
|
|
|
|
try {
|
|
const LDJSONEventData = parseUsingLDJSONData(html, { logger })
|
|
const eventData = LDJSONEventData || parseUsingDOM(html, { logger })
|
|
|
|
if (!eventData) {
|
|
throw createParserError()
|
|
return
|
|
}
|
|
|
|
process.stdout.write(JSON.stringify(eventData))
|
|
} catch (err) {
|
|
console.error(err)
|
|
process.stderr.write(err.toString())
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
const argv = require('yargs')
|
|
.command('$0 <html> [options]', 'Parse Facebook event HTML page into JSON data.', (yargs) => {
|
|
yargs.positional('html', {
|
|
describe: 'valid HTML string',
|
|
type: 'string',
|
|
})
|
|
}, (argv) => {
|
|
const { html, verbose } = argv
|
|
parseHTMLString(html, { verbose })
|
|
})
|
|
.option('verbose', {
|
|
alias: 'v',
|
|
description: 'Add logging to output.',
|
|
type: 'boolean',
|
|
})
|
|
.alias('h', 'help')
|
|
.help('h')
|
|
.argv
|
|
|