UNPKG

notmebotz-tools

Version:

Sebuah Tools yang berfungsi untuk mendownload Video atau Foto dari media sosial, serta sebagai tools yang berguna untuk aplikasi kamu seperti untuk BOT

106 lines (86 loc) 3.22 kB
"use strict"; const axios = require("axios"); const { load } = require("cheerio"); const { stringify } = require("node:querystring"); const baseURL = "http://images.google.com/search?"; const exts = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg"]; const srcRegex = /\["(http[^"\[\]]+?)",(\d+),(\d+)\]/g; const defaultOptions = { filteredDomains: ["gstatic.com"], userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0", queryString: "", }; /** * Search for images on Google. * @param {string} searchTerm - The term to search for. * @param {Object} options - Optional search options. * @returns {Promise<Object>} - Returns search results in JSON format. */ async function search(searchTerm, options = {}) { const opts = Object.assign({}, defaultOptions, options); let url = baseURL + stringify({ tbm: "isch", q: searchTerm, }); opts.filteredDomains = defaultOptions.filteredDomains.concat( options?.filteredDomains ?? [] ); if (!Array.isArray(opts.filteredDomains)) throw new TypeError("filteredDomains must be of type string[]"); url += encodeURIComponent( opts.filteredDomains.map((s) => ` -site:${s}`).join("") ); if (opts.queryString.length > 0) url += opts.queryString; try { const res = await axios({ url: url, headers: { "User-Agent": opts.userAgent } }); const $ = load(res.data); const $scripts = $("script"); let scriptContents = []; const isTagElement = (element) => element?.children !== null; for (let i = 0; i < $scripts.length; ++i) { const $script = $scripts[i]; if (isTagElement($script) && $script.children.length > 0) { const content = $script.children[0]?.data; if (content && srcRegex.test(content)) scriptContents.push(content); } } function getSources(content) { let srcs = []; for (const result of content.matchAll(srcRegex)) { if (result[1] && result[2] && result[3]) { let src = { url: decodeURI(result[1]), width: parseInt(result[3]), height: parseInt(result[2]), }; if ( opts.filteredDomains.every( (domain) => !src.url.includes(domain) ) && exts.some((ext) => src.url.includes(ext)) ) srcs.push(src); } } return srcs; } const finalResults = scriptContents.map(getSources).flat(); // Return results as a structured JSON response return { author: "Herza", status: 200, searchTerm: searchTerm, totalResults: finalResults.length, images: finalResults, }; } catch (err) { return { error: "Terjadi kesalahan", message: err.message, }; } } module.exports = { search };