diff --git a/src/components/post/tp-parser.vue b/src/components/post/tp-parser.vue index 6ae3f282..62bc0720 100644 --- a/src/components/post/tp-parser.vue +++ b/src/components/post/tp-parser.vue @@ -9,6 +9,7 @@ import TpLinkCard from "./tp-linkCard.vue"; import TpMention from "./tp-mention.vue"; import TpText from "./tp-text.vue"; import TpUnknown from "./tp-unknown.vue"; +import TpVideo from "./tp-video.vue"; import TpVillaCard from "./tp-villaCard.vue"; import TpVod from "./tp-vod.vue"; import TpVote from "./tp-vote.vue"; @@ -26,8 +27,8 @@ function getTpName(tp: TGApp.Plugins.Mys.SctPost.Base) { return TpImage; } else if ("vod" in tp.insert) { return TpVod; - // } else if ("video" in tp.insert) { - // return TpVideo; + } else if ("video" in tp.insert) { + return TpVideo; } else if ("backup_text" in tp.insert) { return TpBackupText; } else if ("link_card" in tp.insert) { diff --git a/src/components/post/tp-video.vue b/src/components/post/tp-video.vue index a12ffc37..33b37810 100644 --- a/src/components/post/tp-video.vue +++ b/src/components/post/tp-video.vue @@ -1,12 +1,30 @@ diff --git a/src/plugins/Bili/index.ts b/src/plugins/Bili/index.ts new file mode 100644 index 00000000..8cc65d08 --- /dev/null +++ b/src/plugins/Bili/index.ts @@ -0,0 +1,15 @@ +/** + * @file plugins/Bili/index.ts + * @description Bili插件 + * @since Beta v0.4.0 + */ + +import getVideoView from "./request/getVideoView"; + +const Bili = { + video: { + view: getVideoView, + }, +}; + +export default Bili; diff --git a/src/plugins/Bili/request/getVideoView.ts b/src/plugins/Bili/request/getVideoView.ts new file mode 100644 index 00000000..7aed98e7 --- /dev/null +++ b/src/plugins/Bili/request/getVideoView.ts @@ -0,0 +1,37 @@ +/** + * @file plugins/Bili/request/getVideoView.ts + * @description Bili插件-获取视频基本信息 + * @since Beta v0.4.0 + */ + +import { http } from "@tauri-apps/api"; + +/** + * @description 获取视频基本信息 + * @since Beta v0.4.0 + * @param {string} [aid] 视频AV号 + * @param {string} [bvid] 视频BV号 + * @returns {Promise} 视频基本信息 + */ +async function getVideoView( + aid?: string, + bvid?: string, +): Promise { + let url = "https://api.bilibili.com/x/web-interface/view?"; + if (aid) { + url += `aid=${aid}`; + } else if (bvid) { + url += `bvid=${bvid}`; + } else { + throw new Error("参数错误"); + } + return await http + .fetch(url, { + method: "GET", + }) + .then((res) => { + return res.data.data; + }); +} + +export default getVideoView; diff --git a/src/plugins/Bili/types/Base.d.ts b/src/plugins/Bili/types/Base.d.ts new file mode 100644 index 00000000..dc9a3f1a --- /dev/null +++ b/src/plugins/Bili/types/Base.d.ts @@ -0,0 +1,30 @@ +/** + * @file plugins/Bili/types/Base.d.ts + * @description Bili 插件基础类型定义文件 + * @since Beta v0.4.0 + */ + +/** + * @description Bili 插件基础类型 + * @since Beta v0.4.0 + * @namespace Base + * @memberof TGApp.Plugins.Bili + */ +declare namespace TGApp.Plugins.Bili.Base { + /** + * @description Bili Response 统一接口 + * @since Beta v0.4.0 + * @interface Response + * @property {number} code 状态码 + * @property {string} message 状态信息 + * @property {number} ttl ttl + * @property {any} data 数据 + * @return Response + */ + interface Response { + code: number; + message: string; + ttl: number; + data: any; + } +} diff --git a/src/plugins/Bili/types/Video.d.ts b/src/plugins/Bili/types/Video.d.ts new file mode 100644 index 00000000..ff0d4b3d --- /dev/null +++ b/src/plugins/Bili/types/Video.d.ts @@ -0,0 +1,158 @@ +/** + * @file plugins/Bili/types/Video.d.ts + * @description Bili 插件视频类型定义文件 + * @since Beta v0.4.0 + */ + +/** + * @description Bili 插件视频类型 + * @since Beta v0.4.0 + * @namespace Video + * @memberof TGApp.Plugins.Bili + */ +declare namespace TGApp.Plugins.Bili.Video { + /** + * @description Bili 视频基本信息返回 + * @since Beta v0.4.0 + * @interface ViewResponse + * @extends {TGApp.Plugins.Bili.Base.Response} + * @property {ViewData} data 视频基本信息 + * @return ViewResponse + */ + interface ViewResponse extends TGApp.Plugins.Bili.Base.Response { + data: ViewData; + } + + /** + * @description Bili 视频基本信息 + * @since Beta v0.4.0 + * @see https://api.bilibili.com/x/web-interface/view?aid=540893019 + * @interface ViewData + * @property {string} bvid 视频BV号 + * @property {number} aid 视频AV号 + * @property {number} videos 视频分P数量 + * @property {number} tid 视频分区ID + * @property {string} tname 视频分区名称 + * @property {number} copyright 版权信息 // 1为原创 + * @property {string} pic 视频封面图片地址 + * @property {string} title 视频标题 + * @property {string} pubdate 视频发布时间,时间戳(秒) + * @property {number} ctime 视频创建时间,时间戳(秒) + * @property {string} desc 视频简介 + * @property {string} desc_v2.raw_text 视频简介(纯文本) + * @property {number} desc_v2.type 视频简介类型 + * @property {number} desc_v2.biz_id 视频简介ID + * @property {number} state 视频状态 + * @property {number} duration 视频时长 + * @property {unknown} rights 视频权限 + * @property {number} owner.mid 视频作者UID + * @property {string} owner.name 视频作者昵称 + * @property {string} owner.face 视频作者头像 + * @property {number} stat.aid 视频AV号 + * @property {number} stat.view 视频播放量 + * @property {number} stat.danmaku 视频弹幕数量 + * @property {number} stat.reply 视频评论数量 + * @property {number} stat.favorite 视频收藏数量 + * @property {number} stat.coin 视频硬币数量 + * @property {number} stat.share 视频分享数量 + * @property {number} stat.now_rank 视频当前排名 + * @property {number} stat.his_rank 视频历史最高排名 + * @property {number} stat.like 视频点赞数量 + * @property {number} stat.dislike 视频点踩数量 + * @property {string} stat.evaluation 视频评分 + * @property {number} stat.vt 视频投稿类型 + * @property {unknown} argue_info 视频争议信息 + * @property {string} dynamic 视频动态信息 + * @property {number} cid 视频弹幕ID + * @property {number} dimension.width 视频宽度 + * @property {number} dimension.height 视频高度 + * @property {number} dimension.rotate 视频旋转角度 + * @property {unknown} premiere 视频预告信息 + * @property {number} teenage_mode 视频青少年模式 + * @property {boolean} is_chargeable_season 视频是否为付费分P + * @property {boolean} is_story 视频是否为剧集 + * @property {boolean} is_upower_exclusive 视频是否为大会员专享 + * @property {boolean} is_upower_play 视频是否为大会员免广告 + * @property {boolean} is_upower_preview 视频是否为大会员免前置广告 + * @property {number} enable_vt 视频是否开启投稿 + * @property {string} vt_display 视频投稿类型显示 + * @property {boolean} no_cache 视频是否不缓存 + * @property {unknown} pages 视频分P信息 + * @property {unknown} subtitle 视频字幕信息 + * @property {boolean} is_season_display 视频是否为剧集 + * @property {unknown} user_garb 视频用户抽奖信息 + * @property {unknown} honor_reply 视频荣誉信息 + * @property {unknown} like_icon 视频点赞图标信息 + * @property {boolean} need_jump_bv 视频是否需要跳转BV号 + * @property {boolean} disable_show_up_info 视频是否禁止显示UP主信息 + * @property {boolean} is_story_play 视频是否为剧集免广告 + * @return ViewData + */ + interface ViewData { + bvid: string; + aid: number; + videos: number; + tid: number; + tname: string; + pic: string; + title: string; + pubdate: string; + ctime: number; + desc: string; + desc_v2: { + raw_text: string; + type: number; + biz_id: number; + }; + state: number; + duration: number; + rights: unknown; + owner: { + mid: number; + name: string; + face: string; + }; + stat: { + aid: number; + view: number; + danmaku: number; + reply: number; + favorite: number; + coin: number; + share: number; + now_rank: number; + his_rank: number; + like: number; + dislike: number; + evaluation: string; + vt: number; + }; + argue_info: unknown; + dynamic: string; + cid: number; + dimension: { + width: number; + height: number; + rotate: number; + }; + premiere: unknown; + teenage_mode: number; + is_chargeable_season: boolean; + is_story: boolean; + is_upower_exclusive: boolean; + is_upower_play: boolean; + is_upower_preview: boolean; + enable_vt: number; + vt_display: string; + no_cache: boolean; + pages: unknown; + subtitle: unknown; + is_season_display: boolean; + user_garb: unknown; + honor_reply: unknown; + like_icon: unknown; + need_jump_bv: boolean; + disable_show_up_info: boolean; + is_story_play: boolean; + } +}