UNPKG

abot-scraper

Version:

scraper random for downloader and searching

765 lines (760 loc) 26.5 kB
// src/scraper/downloader.ts import axios from "axios"; import * as cheerio from "cheerio"; import qs from "qs"; // src/utils/generator.ts import crypto from "crypto"; var Generator = class { generateTimeStampYoutubeDL() { return Date.now().toString(); } generateFooterYoutubeDL(timestamp, link) { const locale = "en"; const secretKey = "6HTugjCXxR"; const input = link + locale + timestamp + secretKey; const hash = crypto.createHash("md5").update(input).digest("hex"); return hash; } formatFileSize(bytes) { if (bytes === 0) return "0 Bytes"; const k = 1024; const sizes = ["Bytes", "KB", "MB", "GB", "TB"]; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; } static generateVisitorId() { const components = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "1920x1080", (/* @__PURE__ */ new Date()).getTimezoneOffset().toString(), "en-US", "Win32", Math.random().toString(36).substring(2, 15), Date.now().toString(), process.pid.toString(), Math.floor(Math.random() * 1e6).toString() ]; const fingerprint = crypto.createHash("md5").update(components.join("|")).digest("hex"); return fingerprint; } static getFingerprint() { const visitorId = this.generateVisitorId(); return visitorId; } }; // src/scraper/downloader.ts global.creator = "@abotscraper \u2013 ahmuq"; var Downloader = class { constructor() { this.ytMp3Downloader = (url) => { return new Promise((resolve, reject) => { const headers = { accept: "*/*", "accept-language": "en-US,en;q=0.9,ar;q=0.8,id;q=0.7,vi;q=0.6", "content-type": "application/x-www-form-urlencoded; charset=UTF-8", priority: "u=1, i", "sec-ch-ua": '"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site", Referer: "https://y2hub.com/", "Referrer-Policy": "strict-origin-when-cross-origin" }; const payload = qs.stringify({ action: "yt_convert", nonce: "1495b10e48", youtube_url: url }); axios(`https://youtubemp4free.com/wp-admin/admin-ajax.php`, { method: "POST", headers, data: payload }).then(({ data }) => { if (!data.success) { return reject(new Error("Failed to fetch video data")); } const videoInfo = data.data.info; const slug = data.data.slug; const size = data.data.size; return axios("https://ryin.info/", { method: "GET", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0" } }).then((response) => { const setCookieHeaders = response.headers["set-cookie"]; let cookies; if (setCookieHeaders) { cookies = setCookieHeaders.map((cookie) => cookie.split(";")[0]).join("; "); } else { cookies = "PHPSESSID=fl86pmq4dqgh2835b32mdm7380; csrf_cookie_name=739e04fcc21050c61c5325b34f449659; lang=en"; } const pageUrl = "https://ryin.info/" + slug; return axios(pageUrl, { method: "GET", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0", Cookie: cookies } }).then((response2) => { const html = response2.data; const $ = cheerio.load(html); const downloadHref = $("#download-url").attr("download-href"); if (!downloadHref) { return reject(new Error("Download link not found on page")); } resolve({ creator: global.creator, status: true, title: videoInfo.title, thumbnail: videoInfo.thumbnail, description: videoInfo.description, viewCount: videoInfo.view_count, size: this.generator.formatFileSize(size), downloadUrl: downloadHref }); }); }); }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }); }; this.generator = new Generator(); } async facebookDownloader(url) { try { const headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0", Origin: "https://www.fdown.world", referer: "https://www.fdown.world/", "x-requested-with": "XMLHttpRequest", Cookie: "codehap_domain=www.fdown.world" }; const data = new URLSearchParams({ codehap_link: url, codehap: "true" }); const response = await axios.post( "https://www.fdown.world/result.php", data, { headers } ); const $ = cheerio.load(response.data); const videoUrl = $("video source").attr("src"); const imageUrl = $("img").attr("src"); if (!videoUrl && !imageUrl) { throw new Error("No video or image found in the response."); } return { creator: global.creator, status: 200, result: { thumbnail: imageUrl || "", videoUrl: videoUrl || "" } }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async tiktokDownloader(url) { try { const headers = { "sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"', "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" }; const data = new URLSearchParams({ id: url, locale: "en", tt: "WmNzZDk_" }); const response = await axios.post( "https://ssstik.io/abc?url=dl", data, { headers } ); const $ = cheerio.load(response.data); const title = $("p.maintext").text().trim(); const audio = $("a.download_link.music").attr("href"); const video = $("a.download_link.without_watermark").attr("href"); if (!title || !video) { throw new Error("Failed to extract video or title from response."); } return { creator: global.creator, status: 200, result: { title, video: video || "", audio: audio || "" } }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async instagramDownloader(url) { try { const payload = new URLSearchParams({ url }); const headers = { accept: "*/*", "accept-language": "en-US,en;q=0.9,ar;q=0.8,id;q=0.7,vi;q=0.6", "content-type": "application/x-www-form-urlencoded", priority: "u=1, i", "sec-ch-ua": '"Not)A;Brand";v="8", "Chromium";v="138", "Microsoft Edge";v="138"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin" }; const response = await axios.post( "https://snapinsta.llc/process", payload, { headers } ); const $ = cheerio.load(response.data); const downloadItems = []; $(".download-item").each((_index, element) => { const $element = $(element); const previewImg = $element.find(".media-box img").attr("src"); const downloadLink = $element.find(".download-media").attr("href"); const downloadText = $element.find(".download-media").text().trim(); const isVideo = downloadText.toLowerCase().includes("video") || $element.find(".icon-downvid").length > 0; if (downloadLink) { const mediaItem = { type: isVideo ? "video" : "image", url: downloadLink }; if (previewImg) { mediaItem.preview = previewImg; } downloadItems.push(mediaItem); } }); if (downloadItems.length === 0) { throw new Error("No media items found in the response."); } return { creator: global.creator, status: 200, result: downloadItems }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async youtubeDownloader(url) { try { const timestamp = this.generator.generateTimeStampYoutubeDL(); const footer = this.generator.generateFooterYoutubeDL(timestamp, url); const payload = { link: url }; const headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "g-footer": footer, "g-timestamp": timestamp, accept: "*/*", "accept-language": "en", "content-type": "application/json", priority: "u=1, i", "sec-ch-ua": '"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-site", Referer: "https://snapany.com/", "Referrer-Policy": "strict-origin-when-cross-origin" }; const response = await axios.post( "https://api.snapany.com/v1/extract", payload, { headers } ); const data = response.data; const videoMedia = data.medias.find( (media) => media.media_type === "video" ); const audioMedia = data.medias.find( (media) => media.media_type === "audio" ); const downloadLinks = {}; if (videoMedia && videoMedia.formats) { videoMedia.formats.forEach((format) => { const qualityKey = `${format.quality}p`; downloadLinks[qualityKey] = format.video_url; }); } return { creator: global.creator, status: 200, result: { title: data.text, thumbnail: (videoMedia == null ? void 0 : videoMedia.preview_url) || null, downloadLinks, video: (videoMedia == null ? void 0 : videoMedia.resource_url) || null, audio: (audioMedia == null ? void 0 : audioMedia.resource_url) || null, formats: (videoMedia == null ? void 0 : videoMedia.formats) || [] } }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async sfileDownloader(url) { var _a; try { const response = await axios.get(url, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", Referer: "https://sfile.mobi/", "Accept-Language": "en-US,en;q=0.9" } }); const $ = cheerio.load(response.data); const filename = $(".intro-container img").attr("alt") || ""; const mimetype = ((_a = $("div.list").text().split(" - ")[1]) == null ? void 0 : _a.split("\n")[0]) || ""; const downloadHref = $("#download").attr("href"); const download = downloadHref ? downloadHref + "&k=" + Math.floor(Math.random() * (15 - 10 + 1) + 10) : ""; return { creator: global.creator, status: 200, result: { filename, mimetype, download } }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } }; // src/scraper/search.ts import axios2 from "axios"; import * as cheerio2 from "cheerio"; global.creator = "@abotscraper \u2013 ahmuq"; var Search = class { constructor() { this.wallpaper = (title, page = "1") => { return new Promise((resolve, reject) => { axios2.get( `https://www.besthdwallpaper.com/search?CurrentPage=${page}&q=${title}` ).then(({ data }) => { const $ = cheerio2.load(data); const hasil = []; $("div.grid-item").each(function(_, b) { const titleAttr = $(b).find("p[title]").attr("title"); const typeText = $(b).find("div.info > a:nth-child(2)").text(); const hrefAttr = $(b).find("a").attr("href"); const imgSrc = $(b).find("picture > img").attr("src"); const srcset1 = $(b).find("picture > source:nth-child(1)").attr("srcset"); const srcset2 = $(b).find("picture > source:nth-child(2)").attr("srcset"); if (titleAttr && hrefAttr) { hasil.push({ title: titleAttr.trim(), type: (typeText == null ? void 0 : typeText.trim()) || "", source: "https://www.besthdwallpaper.com" + hrefAttr, image: [imgSrc || "", srcset1 || "", srcset2 || ""] }); } }); resolve({ creator: global.creator, status: 200, result: hasil }); }).catch((error) => { reject(error); }); }); }; this.wikimedia = (title) => { return new Promise((resolve, reject) => { axios2.get( `https://commons.wikimedia.org/w/index.php?search=${title}&title=Special:MediaSearch&go=Go&type=image` ).then((res) => { const $ = cheerio2.load(res.data); const hasil = []; $(".sdms-search-results__list-wrapper > div > a").each(function(_, b) { const altText = $(b).find("img").attr("alt"); const href = $(b).attr("href"); const dataSrc = $(b).find("img").attr("data-src"); const src = $(b).find("img").attr("src"); if (altText && href) { hasil.push({ title: altText, source: href, image: dataSrc || src || "" }); } }); resolve({ creator: global.creator, status: 200, result: hasil }); }).catch(reject); }); }; } async igStory(username) { const payload = { username }; const headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/", accept: "application/json, text/plain, */*", "accept-language": "en-US,en;q=0.9,ar;q=0.8,id;q=0.7,vi;q=0.6", "content-type": "application/json", priority: "u=1, i", "sec-ch-ua": '"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", Referer: "https://storyviewer.com/", "Referrer-Policy": "strict-origin-when-cross-origin" }; try { const response = await axios2.post( `https://storyviewer.com/api/data`, payload, { headers } ); const data = response.data; const sources = data.stories.map((story) => story.source); return { creator: global.creator, status: 200, result: { user_info: data.user_info, links: sources } }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async sfileSearch(query, page = 1) { try { const response = await axios2.get( `https://sfile.mobi/search.php?q=${query}&page=${page}`, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", Referer: "https://sfile.mobi/", "Accept-Language": "en-US,en;q=0.9" } } ); const $ = cheerio2.load(response.data); const results = []; $("div.list").each(function() { const title = $(this).find("a").text(); const sizeText = $(this).text().trim().split("(")[1]; const link = $(this).find("a").attr("href"); if (link && sizeText) { results.push({ title, size: sizeText.replace(")", ""), link }); } }); return { creator: global.creator, status: 200, result: results }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } async ytSearch(query) { var _a; try { const headers = { accept: "*/*", "accept-language": "en-US,en;q=0.9,ar;q=0.8,id;q=0.7,vi;q=0.6", priority: "u=1, i", "sec-ch-ua": '"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"Windows"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "cross-site" }; const response = await axios2.get( `https://line.1010diy.com/web/free-mp3-finder/query?q=${encodeURIComponent(query)}&type=youtube&pageToken=`, { headers } ); const data = response.data; const videos = ((_a = data == null ? void 0 : data.data) == null ? void 0 : _a.items) || []; const results = videos.map((item) => ({ title: item.title, thumbnail: item.thumbnail, url: item.url })); return { creator: global.creator, status: 200, result: results }; } catch (error) { return { creator: global.creator, status: false, msg: error instanceof Error ? error.message : "Unknown error" }; } } }; // src/scraper/tools.ts import axios3 from "axios"; import FormData from "form-data"; global.creator = "@abotscraper \u2013 ahmuq"; var Tools = class { constructor() { this.removeBackground = (image) => { return new Promise((resolve, reject) => { const form = new FormData(); form.append("image_file", image, "blob"); const productSerial = Generator.getFingerprint(); axios3.post("https://api.ezremove.ai/api/ez-remove/background-remove/create-job", form, { headers: { ...form.getHeaders(), "product-serial": productSerial, "Referer": "https://ezremove.ai/", "Origin": "https://ezremove.ai", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0" } }).then((createJobResponse) => { var _a, _b; if (createJobResponse.data.code !== 1e5) { reject({ creator: global.creator, status: false, error: `Job creation failed: ${((_a = createJobResponse.data.message) == null ? void 0 : _a.en) || ((_b = createJobResponse.data.message) == null ? void 0 : _b.id) || "Unknown error"}` }); return; } const jobId = createJobResponse.data.result.job_id; const checkJobStatus = async () => { try { const jobResponse = await axios3.get(`https://api.ezremove.ai/api/ez-remove/background-remove/get-job/${jobId}`, { headers: { "authorization": "", "product-serial": productSerial, "Referer": "https://ezremove.ai/", "Origin": "https://ezremove.ai" } }); const { code, result, message } = jobResponse.data; if (code === 1e5 && result && result.output) { resolve({ creator: global.creator, status: true, result: { job_id: jobId, image_url: result.output[0] } }); } else if (code === 300001) { setTimeout(checkJobStatus, 3e3); } else { reject({ creator: global.creator, status: false, error: `Job failed: ${(message == null ? void 0 : message.en) || (message == null ? void 0 : message.id) || "Unknown error"} (Code: ${code})` }); } } catch (error) { reject({ creator: global.creator, status: false, error: `Status check failed: ${error instanceof Error ? error.message : "Unknown error"}` }); } }; checkJobStatus(); }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }); }; this.reminiV2 = (buffer) => { return new Promise((resolve, reject) => { const form = new FormData(); form.append("image", buffer, "blob"); form.append("scale", 2); axios3.post("https://api2.pixelcut.app/image/upscale/v1", form, { headers: { ...form.getHeaders(), Accept: "application/json", Referer: "https://www.pixelcut.ai/", Origin: "https://www.pixelcut.ai", "x-client-version": "web" } }).then((Response) => { if (Response.data.result_url) { resolve({ creator: global.creator, status: true, result: Response.data.result_url }); } }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }); }; this.reminiV1 = (buffer) => { return new Promise((resolve, reject) => { const form = new FormData(); form.append("type", "Enhancer"); form.append("original_image_file", buffer, "blob"); const productSerial = Generator.getFingerprint(); axios3.post("https://api.remaker.ai/api/pai/v4/ai-enhance/create-job-new", form, { headers: { ...form.getHeaders(), "authorization": "", "product-code": "067003", "product-serial": productSerial, "Referer": "https://remaker.ai/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0" } }).then((createJobResponse) => { if (createJobResponse.data.code !== 1e5) { reject({ creator: global.creator, status: false, error: `Job creation failed: ${createJobResponse.data.message.en}` }); return; } const jobId = createJobResponse.data.result.job_id; const checkJobStatus = () => { axios3.get(`https://api.remaker.ai/api/pai/v4/ai-enhance/get-job/${jobId}`, { headers: { "authorization": "", "product-code": "067003", "product-serial": productSerial, "Referer": "https://remaker.ai/" } }).then((jobResponse) => { if (jobResponse.data.code === 1e5) { resolve({ creator: global.creator, status: true, result: { job_id: jobId, image_url: jobResponse.data.result.output[0] } }); } else if (jobResponse.data.code === 300013) { setTimeout(checkJobStatus, 3e3); } else { reject({ creator: global.creator, status: false, error: `Job failed: ${jobResponse.data.message.en}` }); } }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }; checkJobStatus(); }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }); }; this.uploadImage = (buffer) => { return new Promise((resolve, reject) => { const form = new FormData(); form.append("fileToUpload", buffer, "image.jpg"); form.append("reqtype", "fileupload"); form.append("userhash", ""); axios3.post("https://catbox.moe/user/api.php", form, { headers: { ...form.getHeaders() } }).then((response) => { resolve({ creator: global.creator, status: true, result: response.data }); }).catch((error) => { reject({ creator: global.creator, status: false, error: error.message }); }); }); }; } }; // src/index.ts var downloader = new Downloader(); var search = new Search(); var tools = new Tools(); var index_default = { downloader, search, tools }; export { Downloader, Search, Tools, index_default as default, downloader, search, tools }; //# sourceMappingURL=index.js.map