abot-scraper
Version:
scraper random for downloader and searching
638 lines (634 loc) • 22.4 kB
JavaScript
// 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];
}
};
// 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 facebook(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 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 axios.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 instagram(url) {
try {
const config = new URLSearchParams({
url,
new: "2",
lang: "en",
app: ""
});
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"
};
const response = await axios.post(
"https://snapinsta.app/get-data.php",
config,
{ headers }
);
const downloadLinks = response.data.files.map(
(file) => file.__type === "GraphVideo" ? { type: "video", url: file.video_url || "" } : file.__type === "GraphImage" ? { type: "image", url: file.download_url || "" } : null
).filter((link) => link !== null);
return {
creator: global.creator,
status: 200,
result: downloadLinks
};
} catch (error) {
return {
creator: global.creator,
status: false,
msg: error instanceof Error ? error.message : "Unknown error"
};
}
}
async youtubeDownloader(url) {
try {
const config = qs.stringify({
url,
q_auto: 0,
ajax: 1,
lang: "en"
});
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"
};
const response = await axios.post(
"https://yt1s.net/ajax?retry=undefined&platform=youtube",
config,
{ headers }
);
const $ = cheerio.load(response.data.result);
const title = $(".caption b").text().trim();
const downloadLinks = {
"480p": $('a[data-fquality="480p"]').attr("href") || "",
"720p": $('a[data-fquality="720p"]').attr("href") || "",
"1080p": $('a[data-fquality="1080p"]').attr("href") || ""
};
const thumbnailUrl = $(".thumbnail.cover img").attr("src");
const mp3ConvertElement = $("#convert-mp3 a");
const hrefAttr = mp3ConvertElement.attr("href");
if (!hrefAttr) throw new Error("MP3 conversion link not found.");
const mp3ConvertTokenMatch = hrefAttr.match(
/mp3_convert_task\('(\d+)',\s*'([^']+)'\)/
);
if (!mp3ConvertTokenMatch)
throw new Error("MP3 conversion token not found.");
const mp3ConvertToken = mp3ConvertTokenMatch[2];
const mp3Response = await axios.get(
`https://api.fabdl.com/youtube/mp3-convert-task?token=${mp3ConvertToken}`
);
return {
creator: global.creator,
status: 200,
result: {
title,
thumbnail: thumbnailUrl || "",
downloadLinks,
mp3DownloadUrl: `https://api.fabdl.com${mp3Response.data.result.download_url}`
}
};
} catch (error) {
return {
creator: global.creator,
status: false,
msg: error instanceof Error ? error.message : "Unknown error"
};
}
}
async youtubeDownloaderV2(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.ytPlay = (text) => {
return new Promise((resolve, reject) => {
const configd = {
k_query: text,
k_page: "mp3",
q_auto: 1
};
const headerss = {
"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",
Cookie: 'PHPSESSID=6jo2ggb63g5mjvgj45f612ogt7; _ga=GA1.2.405896420.1625200423; _gid=GA1.2.2135261581.1625200423; _PN_SBSCRBR_FALLBACK_DENIED=1625200785624; MarketGidStorage={"0":{},"C702514":{"page":5,"time":1625200846733}}'
};
axios2("https://www.y2mate.com/mates/analyzeV2/ajax", {
method: "POST",
data: new URLSearchParams(Object.entries(configd)),
headers: headerss
}).then(({ data }) => {
const v = data.vitems;
const v2 = v[Math.floor(Math.random() * v.length)].v;
const url = "https://www.youtube.com/watch?v=" + v2;
const config = {
k_query: "https://www.youtube.be/" + url,
k_page: "mp3",
hl: "en",
q_auto: 1
};
axios2("https://www.y2mate.com/mates/en68/analyze/ajax", {
method: "POST",
data: new URLSearchParams({
url: "https://www.youtube.be/" + url,
q_auto: "0",
ajax: "1"
}),
headers: headerss
}).then(({ data: data2 }) => {
const $ = cheerio2.load(data2.result);
const img = $("div.thumbnail.cover > a > img").attr("src");
axios2("https://www.y2mate.com/mates/analyzeV2/ajax", {
method: "POST",
data: new URLSearchParams(Object.entries(config)),
headers: headerss
}).then(({ data: data3 }) => {
const convertConfig = {
vid: data3.vid,
k: data3.links.mp3.mp3128.k
};
const size = data3.links.mp3.mp3128.size;
axios2("https://www.y2mate.com/mates/convertV2/index", {
method: "POST",
data: new URLSearchParams(Object.entries(convertConfig)),
headers: headerss
}).then((response) => {
resolve({
creator: global.creator,
status: 200,
result: {
status: response.data.status,
title: response.data.title,
ftype: response.data.ftype,
thumb: img || "",
size_mp3: size,
link: response.data.dlink
}
});
}).catch(reject);
});
});
}).catch(reject);
});
};
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 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/index.ts
var downloader = new Downloader();
var search = new Search();
var index_default = {
downloader,
search
};
export {
Downloader,
Search,
index_default as default,
downloader,
search
};
//# sourceMappingURL=index.js.map