forked from tanner/qotnews
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
const request = require('request'); |
|
const JSDOM = require('jsdom').JSDOM; |
|
const { Readability } = require('readability'); |
|
|
|
const { headers } = require('../constants'); |
|
|
|
const options = url => ({ |
|
url, |
|
headers, |
|
}); |
|
|
|
const extract = (url, body) => { |
|
const doc = new JSDOM(body, { url: url }); |
|
const reader = new Readability(doc.window.document); |
|
return reader.parse(); |
|
}; |
|
|
|
|
|
module.exports.scrape = (req, res) => request(options(req.body.url), (error, response, body) => { |
|
if (error || response.statusCode != 200) { |
|
console.log('Response error:', error ? error.toString() : response.statusCode); |
|
return res.sendStatus(response ? response.statusCode : 404); |
|
} |
|
const article = extract(req.body.url, body); |
|
if (article && article.content) { |
|
return res.send(article.content); |
|
} |
|
return res.sendStatus(404); |
|
}); |
|
|
|
module.exports.details = (req, res) => request(options(req.body.url), (error, response, body) => { |
|
if (error || response.statusCode != 200) { |
|
console.log('Response error:', error ? error.toString() : response.statusCode); |
|
return res.sendStatus(response ? response.statusCode : 404); |
|
} |
|
const article = extract(req.body.url, body); |
|
if (article) { |
|
return res.send(article); |
|
} |
|
return res.sendStatus(404); |
|
}); |