@davidpunya/web-scraper
Version:
The library web scraper for Restfull API's
453 lines (435 loc) • 16.2 kB
JavaScript
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)
})
}
})
};
}