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);
}