Bilibili-Evolved/registry/lib/components/style/home-redesign/trending.ts

41 lines
1.4 KiB
TypeScript

import { applyContentFilter } from '@/components/feeds/api'
import { VideoCard } from '@/components/feeds/video-card'
import { getJson, getJsonWithCredentials } from '@/core/ajax'
import { getUID } from '@/core/utils'
import { formatDuration, formatCount } from '@/core/utils/formatters'
export const getTrendingVideos = async (isPersonalized: boolean) => {
const api = 'https://api.bilibili.com/x/web-interface/index/top/feed/rcmd'
const personalized = Boolean(getUID()) && isPersonalized
const requestMethod = personalized ? getJsonWithCredentials : getJson
const { code, message, data } = await requestMethod(api)
if (code !== 0) {
throw new Error(`获取${personalized ? '推荐' : '热门'}视频失败: ${message}`)
}
const list: any[] = data.item
const cards = list.map(it => {
const card: VideoCard = {
id: it.id,
aid: it.id,
bvid: it.bvid,
coverUrl: it.pic.replace('http:', 'https:'),
title: it.title,
description: '',
dynamic: '',
duration: it.duration,
durationText: formatDuration(it.duration),
timestamp: it.pubdate * 1000,
time: new Date(it.pubdate * 1000),
upName: it.owner.name,
upID: it.owner.mid,
upFaceUrl: it.owner.face.replace('http:', 'https:'),
like: formatCount(it.stat.like),
playCount: formatCount(it.stat.view),
danmakuCount: formatCount(it.stat.danmaku),
}
return card
})
return applyContentFilter(cards)
}