|
const os = require('os') |
|
const bytes = require('bytes') |
|
const logger = require('morgan') |
|
const cheerio = require('cheerio') |
|
const express = require('express') |
|
const stealth = require('puppeteer-extra-plugin-stealth') |
|
const { chromium } = require('playwright-extra') |
|
chromium.use(stealth()) |
|
|
|
const app = express() |
|
app.set('json spaces', 4) |
|
app.use(logger('dev')) |
|
|
|
app.all('/', (req, res) => { |
|
const obj = {} |
|
const used = process.memoryUsage() |
|
for (let key in used) obj[key] = formatSize(used[key]) |
|
|
|
const totalmem = os.totalmem() |
|
const freemem = os.freemem() |
|
obj.memoryUsage = `${formatSize(totalmem - freemem)} / ${formatSize(totalmem)}` |
|
|
|
res.json({ |
|
creator: '@rippanteq7', |
|
message: 'Hello World', |
|
uptime: new Date(process.uptime() * 1000).toUTCString().split(' ')[4], |
|
status: obj |
|
}) |
|
}) |
|
|
|
app.get('/api', async (req, res) => { |
|
try { |
|
const { url, log } = req.query |
|
if (!url) return res.json({ success: false, message: 'Input parameter url' }) |
|
if (!/https?:\/\//.test(url)) return res.json({ success: false, message: 'Invalid url' }) |
|
|
|
const data = await xbuddy(url, log) |
|
|
|
data.message ? |
|
res.json({ success: false, message: data.message, result: data.response }) : |
|
res.json({ success: true, result: data.response }) |
|
} catch (e) { |
|
console.log(e) |
|
e = String(e) |
|
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e }) |
|
} |
|
}) |
|
|
|
const PORT = process.env.PORT || 7860 |
|
app.listen(PORT, () => console.log('App running on port', PORT)) |
|
|
|
function formatSize(num) { |
|
return bytes(+num || 0, { unitSeparator: ' ' }) |
|
} |
|
|
|
async function xbuddy(url) { |
|
const browser = await chromium.launch({ |
|
headless: true, |
|
executablePath: '/usr/bin/chromium', |
|
args: ['--no-sandbox'] |
|
}) |
|
const page = await browser.newPage() |
|
|
|
await page.goto(`https://9xbuddy.in/process?url=${url}`) |
|
|
|
const request = await page.waitForRequest(req => req.url().includes('extract')) |
|
const response = await page.waitForResponse(res => |
|
res.url().includes('extract') && res.request().method() === 'POST') |
|
const json = await response.json() |
|
|
|
if (json.status && json.response.type !== 'list') { |
|
const html = await page.content() |
|
const $ = cheerio.load(html) |
|
|
|
const result = $('.text-sm.tracking-wide.px-3.py-3').get().map(el => ({ |
|
type: $(el).find('.w-24').text(), |
|
q: $(el).find('.truncate').text(), |
|
size: $(el).find('.w-full div:nth-child(3)').text(), |
|
url: $(el).find('a').attr('href') |
|
})).filter(c => /^http/.test(c.url)) |
|
|
|
json.response.formats = result |
|
json.response.headers = request.headers() |
|
} |
|
|
|
await browser.close() |
|
return json |
|
} |