import express from 'express'; import { chromium } from 'playwright'; import cors from 'cors'; import axios from 'axios'; import dotenv from 'dotenv'; import os from 'os'; dotenv.config(); const config = { maxTextLength: 100, viewport: { width: 1920, height: 1080 }, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' }; const app = express(); app.use(express.json()); app.use(cors()); app.get('/', (req, res) => { res.send('

Welcome to the Web Scraping API

'); }); app.get('/discord', async (req, res) => { const { logo, text, text1, text2, text3, text4, text5, text6, text7, text8, text9 } = req.query; if (!(logo)) { return res.status(400).json({ error: 'Missing logo parameters' }); } const html = ` Discord Profile Card With Webhook
${text}
${text1}
${text2}
${text3}
${text4}
${text5}
${text6}
${text7}

d11b


${text9}

Discord Verified Account User
Joined since → 2016
Discord Verified Active Developer
since → Oct 1, 2022

Member Since

Jan 8, 2016

Roles

JavaScript

HTML

C++

Python

C#

IT

+
Note
`; try { const browser = await chromium.launch({ headless: true }); // Launch Playwright Chromium browser const context = await browser.newContext({ viewport: config.viewport, userAgent: config.userAgent }); await context.route('**/*', (route) => { const url = route.request().url(); if (url.endsWith('.png') || url.endsWith('.jpg') || url.includes('google-analytics')) { return route.abort(); } route.continue(); }); const page = await context.newPage(); await page.setContent(html); const buffer = await page.screenshot({ type: 'png' }); await browser.close(); res.set('Content-Type', 'image/png'); return res.send(buffer); } catch (error) { console.error('Error generating PNG:', error); res.status(500).json({ error: 'Failed to convert HTML to PNG' }); } }); app.get('/darkcard', async (req, res) => { const { avatar, name, job, button, desc } = req.query; if (!(avatar || name || job || button || desc)) { return res.status(400).json({ error: 'Missing avatar, name, job, button, desc parameters' }); } const html = ` Glassmorph dark card

${name}

${job}

${button}

${desc}

`; try { const browser = await chromium.launch({ headless: true }); // Launch Playwright Chromium browser const context = await browser.newContext({ viewport: config.viewport, userAgent: config.userAgent }); await context.route('**/*', (route) => { const url = route.request().url(); if (url.endsWith('.png') || url.endsWith('.jpg') || url.includes('google-analytics')) { return route.abort(); } route.continue(); }); const page = await context.newPage(); await page.setContent(html); const buffer = await page.screenshot({ type: 'png' }); await browser.close(); res.set('Content-Type', 'image/png'); return res.send(buffer); } catch (error) { console.error('Error generating PNG:', error); res.status(500).json({ error: 'Failed to convert HTML to PNG' }); } }); app.get('/welcome', async (req, res) => { const { name, info, desc } = req.query; // Ensure all required query parameters are present if (!name || !info) { return res.status(400).json({ error: 'Missing required parameters' }); } // Construct HTML content dynamically based on query parameters const html = ` Course Card UI Design - #094 of #100Days100Projects
Course

${name}

View all chapters
6/9 Challenges
${info}

${desc}

Created with by Florin Pop

Get in touch on

Part of #100Days100Projects
`; try { const browser = await chromium.launch({ headless: true }); // Launch Playwright Chromium browser const context = await browser.newContext({ viewport: config.viewport, userAgent: config.userAgent }); await context.route('**/*', (route) => { const url = route.request().url(); if (url.endsWith('.png') || url.endsWith('.jpg') || url.includes('google-analytics')) { return route.abort(); } route.continue(); }); const page = await context.newPage(); await page.setContent(html); const buffer = await page.screenshot({ type: 'png' }); await browser.close(); res.set('Content-Type', 'image/png'); return res.send(buffer); } catch (error) { console.error('Error generating PNG:', error); res.status(500).json({ error: 'Failed to convert HTML to PNG' }); } }); const PORT = process.env.PORT || 7860; app.listen(PORT, async () => { console.log(`Server running on port ${PORT}`); }); process.on('SIGINT', async () => { process.exit(0); });