Files
dss/bin/scan
T
2020-12-21 16:43:08 -08:00

54 lines
1.7 KiB
JavaScript
Executable File

#!/usr/bin/env node
// scan a category (or tag) for articles
require('dotenv').config()
const program = require('commander')
const Database = require('better-sqlite3')
const Bluebird = require('bluebird')
const ds = require('../index')
const db = new Database('./main.db', {})
const baseURL = 'https://dailystormer.su'
async function main() {
program.option('-t, --taxonomy <TYPE>', `"section" or "tag"`, 'section')
program.option('-s, --skip <ITEMS>', `skip leading items`, 0)
program.parse(process.argv)
//console.log(program)
const category = program.args[0]
if (!category) {
console.warn('category required')
process.exit(1)
}
const taxonomyBaseURL = `${baseURL}/${program.taxonomy}`
const partialArticles = await ds.scanCategory(taxonomyBaseURL, category)
let ps = partialArticles // partialArticles.slice(0, 3)
//console.log(ps)
//console.log('skip', program.skip)
//console.log('ps.length', ps.length)
if (program.skip) {
let skip = parseInt(program.skip)
ps = partialArticles.slice(skip)
}
//console.log('ps.length', ps.length)
//ps.slice(0, 10).forEach((art) => console.log(art.title))
//process.exit(0)
Bluebird.each(ps, (async (art, i, length) => {
const exists = await ds.articleExists(db, art.slug)
if (exists) {
console.log(`= [${i+1}/${length}] "${art.title}"`)
return
}
const more = await ds.getArticle(art.link)
const article = Object.assign({}, art, more)
const res = await ds.insertArticle(db, article)
if (res.success) {
console.log(`+ [${i+1}/${length}] "${art.title}"`)
} else {
console.log(`= [${i+1}/${length}] "${art.title}"`)
}
return
}))
}
main()