UNPKG

@davidpunya/web-scraper

Version:

The library web scraper for Restfull API's

453 lines (435 loc) 16.2 kB
const PDFDocument = require("pdfkit"); const axios = require("axios"); const fs = require("fs"); const util = require("util"); const cheerio = require("cheerio"); const puppeteer = require('puppeteer'); const translate = require("@vitalets/google-translate-api"); const tts = require("google-tts-api"); const FormData = require("form-data"); const Function = new(require("../dist/functions")); module.exports = class Tools { toPDFBuffer = (image, opts = {}) => { return new Promise(async (resolve, reject) => { if (!Array.isArray(image)) image = [image]; const buffer = [] const doc = new PDFDocument({ margin: 0, size: "A4" }); for (let iii = 0; iii < image.length; iii++) { if (/.webp|.gif/.test(image[iii])) continue; const data = (await axios(image[iii], { method: "GET", responseType: "arraybuffer", ...opts })).data; doc.image(data, 0, 0, { fit: [595.28, 841.89], align: "center", valign: "center" }); if (image.length != iii + 1) doc.addPage(); } doc.on("data", (chunk) => buffer.push(chunk)); doc.on("end", () => resolve({ status: 200, creator: "David XD", data: Buffer.concat(buffer) })); doc.on("error", (e) => reject({ status: 500, creator: "David XD", msg: util.format(e) })); doc.end(); }); }; toPDFPath = (imagePaths, outputPath, opts = {}) => { return new Promise((resolve, reject) => { if (!Array.isArray(imagePaths)) imagePaths = [imagePaths]; const doc = new PDFDocument({ margin: 0, size: 'A4' }); const stream = fs.createWriteStream(outputPath); doc.pipe(stream); for (let iii = 0; iii < imagePaths.length; iii++) { if (/.webp|.gif/.test(imagePaths[iii])) continue; const data = fs.readFileSync(imagePaths[iii]); doc.image(data, 0, 0, { fit: [595.28, 841.89], align: 'center', valign: 'center' }); if (imagePaths.length != iii + 1) doc.addPage(); } doc.end(); stream.on('finish', () => resolve({ status: 200, creator: "David XD", data: outputPath })); stream.on("error", (e) => reject({ status: 500, creator: "David XD", msg: util.format(e) })); }); }; upscale = async(buffer) => { const form = new FormData(); form.append("file", buffer); form.append("filenameOverride", true); form.append("path", "__editor/" + Function.thisDay()); await axios({ url: "https://api.pixelbin.io/service/panel/assets/v1.0/upload/direct", method: "POST", headers: { "Accept": "*/*", "User-Agent": "GoogleBot" }, data: form }).then((res) => { console.log(res.data); }).catch((err) => { console.error(err); return { status: 500, creator: "David XD", msg: util.format(err) } }); }; translate = async(teks, lg) => { const result = { status: 200, creator: "David XD", result: {} }; await translate(teks, { to: lg }).then((res) => { result.result = res; }).catch((e) => { console.error(e); return { status: 500, creator: "David XD", msg: util.format(e) }; }); return result }; getLanguage = async() => { const result = { status: 200, creator: "David XD", result: [] }; let a = [ "auto", "isSupported", "getCode" ]; let b = translate.languages; for (let c in b) { if (!a.includes(c)) { result.result.push({ id: c, lang: translate.languages[c] }); }; }; return result }; ttsGoogle = async(teks, lg, set = false) => { const result = { status: 200, creator: "David XD", result: {} }; try { let res = tts.getAudioUrl(teks, { lang: lg, slow: set, host: "https://translate.google.com" }); result.result = res; } catch (err) { console.error(err); return { status: 500, creator: "David XD", msg: util.format(err) }; }; return result; }; webp2mp4 = async (source) => { try { let form = new FormData(); let isUrl = typeof source === 'string' && /^https?:\/\//.test(source); form.append('new-image-url', isUrl ? source : ''); if (!isUrl) { form.append('new-image', source, 'image.webp'); } let res = await fetch('https://ezgif.com/webp-to-mp4', { method: 'POST', body: form }); let html = await res.text(); let $ = cheerio.load(html); let form2 = new FormData(); let obj = ""; $('#main form').each((a, b) => { obj = $(b).find(`input[name="file"]`).attr("value"); form2.append($(b).find("#tsbt > input").attr("name"), $(b).find(`#tsbt > input[type="submit"]`).attr("value")); }); let res2 = await fetch('https://ezgif.com/webp-to-mp4/' + obj, { method: 'POST', body: form2 }); let html2 = await res2.text(); let $$ = cheerio.load(html2); let videoSrc = $$('div#output > p.outfile > video > source').attr('src'); return { status: true, creator: "David XD", data: { url: "https:" + videoSrc, size: "" } }; } catch (error) { return { status: false, message: error }; } }; webp2png = async(source) => { return new Promise(async (resolve, reject) => { let form = new FormData(); let isUrl = typeof source === 'string' && /^https?:\/\//.test(source); form.append('new-image-url', isUrl ? source : ''); if (!isUrl) { form.append('new-image', source, 'image.webp'); } let res = await fetch('https://ezgif.com/webp-to-png', { method: 'POST', body: form }); let html = await res.text(); let $ = cheerio.load(html); let form2 = new FormData(); let obj = {}; $('form input[name]').each((i, elem) => { obj[$(elem).attr('name')] = $(elem).val(); form2.append($(elem).attr('name'), $(elem).val()); }); if (!obj.file) { throw new Error('No file key found in form data after initial request, possibly failed to upload or process initial image.'); } let res2 = await fetch('https://ezgif.com/webp-to-mp4/' + obj.file, { method: 'POST', body: form2 }); let html2 = await res2.text(); $ = cheerio.load(html2); resolve({ status: true, creator: "David XD", data: "https:" + $('div#output > p.outfile > img').attr('src') }) }) }; TelegraPh = (Path) => { return new Promise (async (resolve, reject) => { if (!fs.existsSync(Path)) return reject(new Error("File not Found")) try { const form = new FormData(); form.append("file", fs.createReadStream(Path)) const data = (await axios({ url: "https://telegra.ph/upload", method: "POST", headers: { ...form.getHeaders() }, data: form })).data return resolve({ status: 200, creator: "David XD", data: "https://telegra.ph" + data[0].src }) } catch (err) { return reject(new Error(String(err))) } }) }; UploadFileUgu = async(input) => { return new Promise (async (resolve, reject) => { const form = new FormData(); form.append("files[]", fs.createReadStream(input)) await axios({ url: "https://uguu.se/upload.php", method: "POST", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", ...form.getHeaders() }, data: form }).then((data) => { resolve({ status: 200, creator: "David XD", data: data.data.files[0] }) }).catch((err) => reject(err)) }) }; Pomf = (input) => { return new Promise (async (resolve, reject) => { const form = new FormData(); form.append("files[]", fs.createReadStream(input)) await axios({ url: "https://pomf.lain.la/upload.php", method: "POST", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", ...form.getHeaders() }, data: form }).then((data) => { resolve({ status: 200, creator: "David XD", data: data.data.files[0] }) }).catch((err) => reject(err)) }) }; ITZpire = (file) => { return new Promise(async (resolve, reject) => { try { const form = new FormData(); const tipeContent = mime.lookup(file); form.append("file", fs.createReadStream(file), { filename: path.basename(file), mimeType: tipeContent }); const data = await axios("http://cdn.itzpire.site/tools/upload", { method: "POST", headers: { "accept": "application/json", ...form.getHeaders() }, data: form }); resolve({data}) } catch (er) { return reject(new Error(String(er))) } }) }; floNime = async(medianya, options = {}) => { const { ext } = await fromBuffer(medianya) || options.ext var form = new FormData() form.append('file', medianya, 'tmp.'+ext) let jsonnya = await fetch('https://flonime.my.id/upload', { method: 'POST', body: form }) .then((response) => response.json()) return jsonnya }; videy = async(fileBuffer) => { try { const formData = new FormData(); formData.append('file', fileBuffer, { filename: 'video.mp4', contentType: 'video/mp4', }); const response = await axios.post('https://videy.co/api/upload', formData, { headers: { ...formData.getHeaders(), }, onUploadProgress: progressEvent => { const persen = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`Upload progress: ${persen}%`); }, }); while (!response.data.id) { await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for 1 second } let html = await axios.get("https://videy.co/v?id=" + response.data.id); let $ = cheerio.load(html.data); let vidUrl = $('video').find('source').attr('src'); let mime = $('video').find('source').attr('type'); return { status: 200, creator: "David XD", data: { url: vidUrl, mime_type: mime } }; } catch (error) { console.error('Error uploading video:', error); throw error; } }; sazumi = async(filePath) => { const formData = new FormData(); formData.append('fileInput', fs.createReadStream(filePath)); try { const response = await fetch('https://cdn.sazumi.moe/upload', { method: 'POST', body: formData }); const fileUrl = await response.json(); return fileUrl;; console.log('Succesfully:', fileUrl); } catch (error) { console.error('oops something went wrong:', error.message); } }; fileio = (buffer, name) => { return new Promise(async (resolve) => { try { if (!Buffer.isBuffer(buffer)) return resolve({ status: 404, creator: "David XD" }) const { fromBuffer } = require('file-type') let { ext } = await fromBuffer(buffer) || {} let extention = (typeof ext == 'undefined') ? 'txt' : ext let form = new FormData() form.append('file', buffer, name + '.' + extention) const res = await (await fetch('https://file.io/', { method: 'POST', headers: { Accept: '*/*', 'Accept-Language': 'en-US,enq=0.9', 'User-Agent': 'GoogleBot' }, body: form })).json() resolve({ status: 200, creator: "David XD", data: res }) } catch (e) { resolve({ status: 500, creator: "David XD", msg: util.format(e) }) } }) }; }