user-videos.js
1 import { cli, Strategy } from '@jackwener/opencli/registry'; 2 import { apiGet, payloadData, resolveUid } from './utils.js'; 3 cli({ 4 site: 'bilibili', 5 name: 'user-videos', 6 description: '查看指定用户的投稿视频', 7 domain: 'www.bilibili.com', 8 strategy: Strategy.COOKIE, 9 args: [ 10 { name: 'uid', required: true, positional: true, help: 'User UID or username' }, 11 { name: 'limit', type: 'int', default: 20, help: 'Number of results' }, 12 { name: 'order', default: 'pubdate', help: 'Sort: pubdate, click, stow' }, 13 { name: 'page', type: 'int', default: 1, help: 'Page number' }, 14 ], 15 columns: ['rank', 'title', 'plays', 'likes', 'date', 'url'], 16 func: async (page, kwargs) => { 17 const { uid: uidInput, limit = 20, order = 'pubdate', page: pageNum = 1 } = kwargs; 18 const uid = await resolveUid(page, String(uidInput)); 19 const payload = await apiGet(page, '/x/space/wbi/arc/search', { 20 params: { 21 mid: uid, 22 pn: pageNum, 23 ps: Math.min(Number(limit), 50), 24 order, 25 }, 26 signed: true, 27 }); 28 const vlist = payloadData(payload)?.list?.vlist ?? []; 29 return vlist.slice(0, Number(limit)).map((item, i) => ({ 30 rank: i + 1, 31 title: item.title ?? '', 32 plays: item.play ?? 0, 33 likes: item.like ?? 0, 34 date: item.created ? new Date(item.created * 1000).toISOString().slice(0, 10) : '', 35 url: item.bvid ? `https://www.bilibili.com/video/${item.bvid}` : '', 36 })); 37 }, 38 });