ryu-js / lib /sfilemobi /sfilemobisearch.js
randydev's picture
Update lib/sfilemobi/sfilemobisearch.js
30d423b verified
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);
}