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.
34 lines
1.0 KiB
34 lines
1.0 KiB
const { JSDOM } = require("jsdom"); |
|
const { firefox } = require("playwright"); |
|
const { getUserAgent } = require('../../utils/user-agent'); |
|
const { disqusThread } = require('../../utils/disqus-thread'); |
|
|
|
const DISQUS_EMBED = 'https://disqus.com/embed/comments/'; |
|
|
|
module.exports.getComments = async (url) => { |
|
const { userAgent, headers } = getUserAgent(url); |
|
|
|
const browser = await firefox.launch({ args: [], headless: true }); |
|
const tab = await browser.newPage({ |
|
extraHTTPHeaders: headers, |
|
userAgent, |
|
viewport: { width: 2000, height: 10000 }, |
|
}); |
|
|
|
try { |
|
await tab.goto(url, { timeout: 60000, waitUntil: "domcontentloaded" }); |
|
|
|
const response = await tab.waitForResponse(response => response.url().includes(DISQUS_EMBED)); |
|
const text = await response.text(); |
|
const dom = new JSDOM(text, response.url()); |
|
const script = dom.window.document.querySelector('#disqus-threadData') |
|
const data = JSON.parse(script.innerHTML); |
|
|
|
return disqusThread(data); |
|
} catch (e) { |
|
throw e; |
|
} finally { |
|
await tab.close(); |
|
await browser.close(); |
|
} |
|
}; |