import got from 'got'; import * as cheerio from 'cheerio'; import { parseFileSize } from './util.js'; import { DEFAULT_HEADERS } from '../constant.js'; import { SfilemobiSearchArgsSchema, SfilemobiSearchSchema } from '../types/sfilemobiesearch-v1.js'; export async function sfilemobiSearch(query, page = 1) { SfilemobiSearchArgsSchema.parse({ 0: query, 1: page }); const data = await got('https://sfile.mobi/search.php', { searchParams: { q: query, page }, headers: { ...DEFAULT_HEADERS } }).text(); const $ = cheerio.load(data); const results = []; $('div > div > div.list').each((_, el) => { const $el = $(el); const url = $el.find('a').attr('href') || null; const filename = $el.find('a').text() || null; const icon = $el.find('img').attr('src') || null; const typeMatch = icon ? /\/smallicon\/(.*?)\.svg/.exec(icon) : null; const type = typeMatch ? typeMatch[1] : null; const filesizeHMatch = /\((.*?)\)/.exec($el.text()); const filesizeH = filesizeHMatch ? filesizeHMatch[1] : null; const filesize = filesizeH ? parseFileSize(filesizeH) : null; if (filename && url) { results.push({ url, filename, icon, type, filesizeH, filesize }); } }); return SfilemobiSearchSchema.parse(results); }