ryu-js / lib /sfilemobi /sfilemobi-dl.js
randydev's picture
Update lib/sfilemobi/sfilemobi-dl.js
f81b225 verified
raw
history blame
1.54 kB
import got from 'got';
import * as cheerio from 'cheerio';
import { DEFAULT_HEADERS } from '../constant.js';
import { SfilemobidlArgsSchema, SfilemobidlSchema } from '../types/sfilemobi-dl-v1.js';
export async function sfilemobi(url) {
SfilemobidlArgsSchema.parse({ url });
const data = await got(url, {
headers: { ...DEFAULT_HEADERS }
}).text();
const $ = cheerio.load(data);
const dlUrl = $('#download').attr('href') || null;
const filename = $('div.intro-container > img').attr('alt') || $('div.intro-container > h1').text() || null;
const icon = $('div.intro-container > img').attr('src') || null;
const typeMatch = icon ? /\/smallicon\/(.*?)\.svg/.exec(icon) : null;
const type = typeMatch ? typeMatch[1] : null;
const $list = $('div.list');
const mimetype = $list.eq(0).text().split('-')[1]?.trim() || null;
const uploaded = $list.eq(2).text().split('Uploaded:')[1]?.trim() || null;
const $upload = $list.eq(1).find('a');
const uploadby = $upload.eq(0).text() || null;
const uploadbyUrl = $upload.eq(0).attr('href') || null;
const uploadon = $upload.eq(1).text() || null;
const uploadonUrl = $upload.eq(1).attr('href') || null;
const downloadsText = $list.eq(3).text().split('Downloads:')[1];
const downloads = downloadsText ? parseInt(downloadsText) : null;
const result = {
url: dlUrl,
filename,
icon,
type,
mimetype,
uploaded,
uploadby,
uploadbyUrl,
uploadon,
uploadonUrl,
downloads
};
return SfilemobidlSchema.parse(result);
}