tester-scraper
Version:
Sebuah Module Scraper yang dibuat oleh Sxyz dan SuzakuTeam untuk memudahkan penggunaan scraper di project ESM maupun CJS.
122 lines (112 loc) • 3.37 kB
JavaScript
import axios from "axios";
import * as cheerio from "cheerio";
import { Success } from "./lib/function.js";
const search = {
nasa: async (q) => {
const { data } = await axios.get(
`https://www.nasa.gov/?search=${encodeURIComponent(q)}`,
);
const $ = cheerio.load(data);
const results = [];
$(".hds-search-result-content").each((i, el) => {
const title = $(el).find("h4.hds-search-result-heading").text().trim();
const url = $(el).siblings("em.hds-search-result-url").text().trim(); // ini fallback
const urlFromAnchor = $(el).closest("a").attr("href"); // ambil dari <a>
const excerpt = $(el).find("p.hds-search-result-excerpt").text().trim();
const readTime = $(el).find(".label").text().trim();
results.push({
title,
url: urlFromAnchor || url,
excerpt,
readTime,
});
});
return {
success: true,
result: results,
};
},
spotify: async (qu) => {
const { data } = await axios.post(
`https://spotifydown.app/api/metadata?link=${qu}`,
);
return {
success: true,
response: data.data.tracks,
};
},
snackvideo: async (query) => {
const validQuery = query.replace(" ", "-");
const urlEncoded = `https://snackvideo.com/discover/${encodeURIComponent(validQuery)}`;
const payload = {
ai_content: false,
count: 0,
fromUser: false,
mobile: true,
need_id_json: false,
need_tdk: false,
pcursor: "0",
request_source: 1102,
searchWord: validQuery,
seoDefaultFilterV2: true,
url: urlEncoded,
};
const { data } = await axios.post(
"https://www.snackvideo.com/rest/o/w/pwa/discover",
payload,
);
return {
success: true,
resultSearch: data.feeds,
};
},
bstation: async (query) => {
try {
let { data: m } = await axios.get(
`https://www.bilibili.tv/id/search-result?q=${encodeURIComponent(query)}`,
);
let $ = cheerio.load(m);
const results = [];
$("li.section__list__item").each((index, element) => {
const title = $(element)
.find(".highlights__text--active")
.text()
.trim();
const videoLink = $(element)
.find(".bstar-video-card__cover-link")
.attr("href");
const thumbnail = $(element)
.find(".bstar-video-card__cover-img source")
.attr("srcset");
const views = $(element)
.find(".bstar-video-card__desc--normal")
.text()
.trim();
const creatorName = $(element)
.find(".bstar-video-card__nickname")
.text()
.trim();
const creatorLink = $(element)
.find(".bstar-video-card__nickname")
.attr("href");
const duration = $(element)
.find(".bstar-video-card__cover-mask-text")
.text()
.trim();
results.push({
title,
videoLink: `https://www.bilibili.tv${videoLink}`,
thumbnail,
views,
creatorName,
creatorLink: `https://www.bilibili.tv${creatorLink}`,
duration,
});
});
return results;
} catch (error) {
console.error("Error while fetching search results:", error);
}
},
};
export default search;