UNPKG

rsshub

Version:
75 lines (64 loc) 2.2 kB
import { Route } from '@/types'; import got from '@/utils/got'; import { load } from 'cheerio'; import { art } from '@/utils/render'; import path from 'node:path'; import { parseDate } from '@/utils/parse-date'; const host = 'https://www.ixigua.com'; export const route: Route = { path: '/user/video/:uid/:disableEmbed?', categories: ['multimedia'], example: '/ixigua/user/video/4234740937', parameters: { uid: '用户 id, 可在用户主页中找到', disableEmbed: '默认为开启内嵌视频, 任意值为关闭' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['ixigua.com/home/:uid'], target: '/user/video/:uid', }, ], name: '用户视频投稿', maintainers: ['FlashWingShadow', 'Fatpandac', 'pseudoyu'], handler, }; async function handler(ctx) { const uid = ctx.req.param('uid'); const disableEmbed = ctx.req.param('disableEmbed'); const url = `${host}/home/${uid}/?wid_try=1`; const { data } = await got(url); const $ = load(data); const jsData = $('#SSR_HYDRATED_DATA').html(); if (!jsData) { throw new Error('Failed to find SSR_HYDRATED_DATA'); } const jsonData = JSON.parse(jsData.match(/var\s+data\s*=\s*({.*?});/s)?.[1].replaceAll('undefined', 'null') || '{}'); const { AuthorVideoList: { videoList: videoInfos }, AuthorDetailInfo: userInfo, } = jsonData; if (!videoInfos || !userInfo) { throw new Error('Failed to extract required data from JSON'); } return { title: `${userInfo.name} 的西瓜视频`, link: url, description: userInfo.introduce, item: videoInfos.map((i) => ({ title: i.title, description: art(path.join(__dirname, 'templates/userVideo.art'), { i, disableEmbed, }), link: `${host}/${i.groupId}`, pubDate: parseDate(i.publishTime * 1000), author: userInfo.name, })), }; }