File size: 1,454 Bytes
3026844 a06fd3a 35bdec7 3026844 7bbd51c 30d423b 3026844 30d423b 3026844 30d423b 3026844 30d423b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
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);
}
|