UNPKG

@ikenxuan/amagi

Version:

抖音、B站的 web 端相关数据接口基于 Node.js 的实现

2,052 lines (2,043 loc) 333 kB
import chalk from 'chalk'; import express, { RequestHandler, Request, Router } from 'express'; import { AxiosRequestConfig, AxiosResponse } from 'axios'; interface BilibiliMethodOptionsMap { VideoInfoParams: { methodType: '单个视频作品数据'; /** 稿件BVID */ bvid: string; }; VideoStreamParams: { methodType: '单个视频下载信息数据'; /** 稿件AVID */ avid: number; /** 稿件cid */ cid: number; }; CommentParams: { methodType: '评论数据'; /** 评论区类型代码,详见 [评论区类型代码](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/comment/readme.md#%E8%AF%84%E8%AE%BA%E5%8C%BA%E7%B1%BB%E5%9E%8B%E4%BB%A3%E7%A0%81) */ type: number; /** 稿件ID,也就是AV号去除前缀后的内容 */ oid: number; /** * 获取的评论数量,默认20 * @defaultValue 20 */ number?: number; /** * 评论区页码,默认1 * @defaultValue 1 */ pn?: number; }; UserParams: { methodType: '用户主页数据' | '用户主页动态列表数据' | '获取UP主总播放量'; /** UP主UID */ host_mid: number; }; DynamicParams: { methodType: '动态详情数据' | '动态卡片数据'; /** 动态ID */ dynamic_id: string; }; BangumiInfoParams: { methodType: '番剧基本信息数据'; /** 稿件ep_id,其含义为 {@link https://www.bilibili.com/anime/index | 番剧索引} 或 **我的追番** 中的番剧,对应网址中包含ss号,如:{@link https://www.bilibili.com/bangumi/play/ss33802} */ season_id?: string; /** 稿件ep_id,番剧的某一集,对应网址中包含ep号,如:{@link https://www.bilibili.com/bangumi/play/ep330798} */ ep_id?: string; }; BangumiStreamParams: { methodType: '番剧下载信息数据'; /** 稿件cid */ cid: number; /** 稿件ep_id,番剧的某一集,对应网址中包含ep号,如:{@link https://www.bilibili.com/bangumi/play/ep330798} */ ep_id: string; }; LiveRoomParams: { methodType: '直播间信息' | '直播间初始化信息'; /** 直播间ID */ room_id: string; }; QrcodeParams: { methodType: '二维码状态'; /** 扫码登录秘钥 */ qrcode_key: string; }; EmojiParams: { methodType: 'Emoji数据'; }; LoginBaseInfoParams: { methodType: '登录基本信息'; }; GetQrcodeParams: { methodType: '申请二维码'; }; Bv2AvParams: { methodType: 'BV转AV'; /** 视频BV号 */ bvid: string; }; Av2BvParams: { methodType: 'AV转BV'; /** 视频AV号 */ avid: number; }; } /** B站API接口参数类型 */ interface BilibiliDataOptionsMap { 单个视频作品数据: { opt: BilibiliMethodOptionsMap['VideoInfoParams']; data: BiliOneWork; }; 单个视频下载信息数据: { opt: BilibiliMethodOptionsMap['VideoStreamParams']; data: BiliVideoPlayurlIsLogin | BiliBiliVideoPlayurlNoLogin; }; 评论数据: { opt: BilibiliMethodOptionsMap['CommentParams']; data: BiliWorkComments; }; 用户主页数据: { opt: BilibiliMethodOptionsMap['UserParams']; data: BiliUserProfile; }; 用户主页动态列表数据: { opt: BilibiliMethodOptionsMap['UserParams']; data: BiliUserDynamic; }; Emoji数据: { opt: BilibiliMethodOptionsMap['EmojiParams']; data: BiliEmojiList; }; 番剧基本信息数据: { opt: BilibiliMethodOptionsMap['BangumiInfoParams']; data: BiliBangumiVideoInfo; }; 番剧下载信息数据: { opt: BilibiliMethodOptionsMap['BangumiStreamParams']; data: BiliBangumiVideoPlayurlIsLogin | BiliBangumiVideoPlayurlNoLogin; }; 动态详情数据: { opt: BilibiliMethodOptionsMap['DynamicParams']; data: BiliDynamicInfo; }; 动态卡片数据: { opt: BilibiliMethodOptionsMap['DynamicParams']; data: BiliDynamicCard; }; 直播间信息: { opt: BilibiliMethodOptionsMap['LiveRoomParams']; data: BiliLiveRoomDetail; }; 直播间初始化信息: { opt: BilibiliMethodOptionsMap['LiveRoomParams']; data: BiliLiveRoomDef; }; 登录基本信息: { opt: BilibiliMethodOptionsMap['LoginBaseInfoParams']; data: any; }; 申请二维码: { opt: BilibiliMethodOptionsMap['GetQrcodeParams']; data: BiliNewLoginQrcode; }; 二维码状态: { opt: BilibiliMethodOptionsMap['QrcodeParams']; data: BiliCheckQrcode; }; 获取UP主总播放量: { opt: BilibiliMethodOptionsMap['UserParams']; data: BiliUserFullView; }; AV转BV: { opt: BilibiliMethodOptionsMap['Av2BvParams']; data: BiliAv2Bv; }; BV转AV: { opt: BilibiliMethodOptionsMap['Bv2AvParams']; data: BiliBv2AV; }; } interface DouyinMethodOptionsMap { CommentReplyParams: { methodType: '指定评论回复数据'; /** 视频ID */ aweme_id: string; /** 评论ID */ comment_id: string; /** * 获取的评论数量 * 默认情况下,如果指定的数量不足,则获取实际的评论数量。 * @defaultValue 5 */ number?: number; /** * 游标,作用类似于翻页,根据上一次评论数量递增 * @defaultValue 0 */ cursor?: number; }; UserParams: { methodType: '用户主页数据' | '用户主页视频列表数据' | '直播间信息数据'; /** 用户ID */ sec_uid: string; }; WorkParams: { methodType: '视频作品数据' | '图集作品数据' | '合辑作品数据' | '聚合解析'; /** 视频ID、图集ID、合辑ID */ aweme_id: string; }; CommentParams: { methodType: '评论数据'; /** 视频ID */ aweme_id: string; /** * 获取的评论数量 * 默认情况下,如果指定的数量不足,则获取实际的评论数量。 * @defaultValue 50 */ number?: number; /** * 游标,作用类似于翻页,根据上一次评论数量递增 * @defaultValue 0 */ cursor?: number; }; MusicParams: { methodType: '音乐数据'; /** 音乐ID */ music_id: string; }; LiveRoomParams: { methodType: '直播间信息数据'; /** 直播间ID,可从用户主页信息的room_id_str值取得 */ room_id: string; /** 直播间真实房间号(可通过live.douyin.com/\{web_rid\}直接访问直播间),在用户主页信息的room_data中获取 */ web_rid: string; }; QrcodeParams: { methodType: '申请二维码数据'; /** fp指纹 */ verify_fp: string; }; SearchParams: { methodType: '热点词数据' | '搜索数据'; /** 搜索词 */ query: string; /** * 搜索数量,仅数据类型为"搜索数据"时有效 * @defaultValue 10 */ number?: number; /** 上次搜索的游标值 */ search_id?: string; }; EmojiListParams: { methodType: 'Emoji数据'; }; EmojiProParams: { methodType: '动态表情数据'; }; VideoWorkParams: { methodType: '视频作品数据'; /** 视频ID */ aweme_id: string; }; ImageAlbumWorkParams: { methodType: '图集作品数据'; /** 图集ID */ aweme_id: string; }; SlidesWorkParams: { methodType: '合辑作品数据'; /** 合辑ID */ aweme_id: string; }; } /** 抖音API接口参数类型 */ interface DouyinDataOptionsMap { 聚合解析: { opt: DouyinMethodOptionsMap['WorkParams']; data: DyVideoWork | DyImageAlbumWork | DySlidesWork; }; 视频作品数据: { opt: DouyinMethodOptionsMap['VideoWorkParams']; data: DyVideoWork; }; 图集作品数据: { opt: DouyinMethodOptionsMap['ImageAlbumWorkParams']; data: DyImageAlbumWork; }; 合辑作品数据: { opt: DouyinMethodOptionsMap['SlidesWorkParams']; data: DySlidesWork; }; 评论数据: { opt: DouyinMethodOptionsMap['CommentParams']; data: DyWorkComments; }; 用户主页数据: { opt: DouyinMethodOptionsMap['UserParams']; data: DyUserInfo; }; 用户主页视频列表数据: { opt: DouyinMethodOptionsMap['UserParams']; data: DyUserPostVideos; }; 热点词数据: { opt: DouyinMethodOptionsMap['SearchParams']; data: DySuggestWords; }; 搜索数据: { opt: DouyinMethodOptionsMap['SearchParams']; data: DySearchInfo; }; Emoji数据: { opt: DouyinMethodOptionsMap['EmojiListParams']; data: DyEmojiList; }; 动态表情数据: { opt: DouyinMethodOptionsMap['EmojiProParams']; data: DyEmojiProList; }; 音乐数据: { opt: DouyinMethodOptionsMap['MusicParams']; data: DyMusicWork; }; 直播间信息数据: { opt: DouyinMethodOptionsMap['UserParams']; data: DyUserLiveVideos; }; 申请二维码数据: { opt: DouyinMethodOptionsMap['QrcodeParams']; data: any; }; 指定评论回复数据: { opt: DouyinMethodOptionsMap['CommentReplyParams']; data: any; }; } interface KuaishouMethodOptionsMap { VideoInfoParams: { methodType: '单个视频作品数据'; /** 作品ID */ photoId: string; }; CommentParams: { methodType: '评论数据'; /** 作品ID */ photoId: string; }; EmojiListParams: { methodType: 'Emoji数据'; }; } /** 快手API接口参数类型 */ interface KuaishouDataOptionsMap { 单个视频作品数据: { opt: KuaishouMethodOptionsMap['VideoInfoParams']; data: KsOneWork; }; 评论数据: { opt: KuaishouMethodOptionsMap['CommentParams']; data: KsWorkComments; }; Emoji数据: { opt: KuaishouMethodOptionsMap['EmojiListParams']; data: KsEmojiList; }; } type NetworksConfigType = { /** * 请求地址 */ url: string; /** * 请求方法 */ method?: string; /** * 请求头 */ headers?: any; /** * 返回数据类型,默认json */ responseType?: string; /** * 请求体 */ body?: object | string; /** * 超时时间,单位毫秒 */ timeout?: number; /** * 默认跟随重定向到: 'follow',不跟随: manual */ redirect?: RequestRedirect; /** * 拓展参数,该次请求数据什么数据类型,注意是平台接口的类型定义,不是请求参数 */ methodType?: string; }; type DyEmojiList = { emoji_list: EmojiListElement[]; status_code: number; version: number; [property: string]: any; }; type EmojiListElement = { display_name: string; emoji_url: Emojiurl; hide: number; origin_uri: string; [property: string]: any; }; type Emojiurl = { uri: string; url_list: string[]; [property: string]: any; }; type DyEmojiProList = { decision_trees: DecisionTrees; diverter_tags: DiverterTags; do_not_retry: boolean; extra: EmojiProListExtra; flame_achieve_dashboard: FlameAchieveDashboard; interactive_resource_config: InteractiveResourceConfig; log_pb: LogPb$8; report_toggles: ReportToggles; status_code: number; status_msg: string; [property: string]: any; }; type DecisionTrees = { flame_achieve: FlameAchieve; interactive_resources: InteractiveResources; [property: string]: any; }; type FlameAchieve = { default_config_name: string; root: FlameAchieveRoot; [property: string]: any; }; type FlameAchieveRoot = { node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node: PurpleSubNode[]; [property: string]: any; }; type PurpleSubNode = { node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node?: FluffySubNode[]; [property: string]: any; }; type FluffySubNode = { config_name: string; node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node: TentacledSubNode[]; [property: string]: any; }; type TentacledSubNode = { config_name: string; node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node: StickySubNode[]; [property: string]: any; }; type StickySubNode = { config_name: string; node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node: IndigoSubNode[]; [property: string]: any; }; type IndigoSubNode = { config_name: string; node_attribute: string; node_operation: string; node_type: string; node_value: string; [property: string]: any; }; type InteractiveResources = { default_config_name: string; root: InteractiveResourcesRoot; [property: string]: any; }; type InteractiveResourcesRoot = { node_attribute: string; node_operation: string; node_type: string; node_value: string; sub_node: IndecentSubNode[]; [property: string]: any; }; type IndecentSubNode = { config_name: string; node_attribute: string; node_operation: string; node_type: string; node_value: string; [property: string]: any; }; type DiverterTags = { actionbar_diff: string; flame_achieve: string; interactive_resources: string; interactive_resources_v2: string; plus_panel_diff: string; [property: string]: any; }; type EmojiProListExtra = { fatal_item_ids: string[]; logid: string; now: number; [property: string]: any; }; type FlameAchieveDashboard = { '火花成就--小火人': 火花成就小火人; 火花成就日常: 火花成就日常; '火花成就日常-群聊': 火花成就日常群聊; 火花成就日常V2: 火花成就日常V2; '火花成就日常V2-群聊': 火花成就日常V2群聊; 火花成就测试: 火花成就测试; '火花成就节日测试-群聊': 火花成就节日测试群聊; [property: string]: any; }; type 火花成就小火人 = { detail: 火花成就小火人_Detail[]; pet_elf_detail: PetelfDetail[]; [property: string]: any; }; type 火花成就小火人_Detail = { detail_subtitle_lock: string[]; detail_subtitle_unflame: string[]; flame_info: PurpleFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; subtitle_lock: string; title: string; [property: string]: any; }; type PurpleFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type PetelfDetail = { detail_subtitle_unflame?: string[]; flame_info?: PetelfDetailFlameInfo[]; flame_to_achieve_url?: string; keys?: string[]; subscript?: string; subtitle?: string; title?: string; [property: string]: any; }; type PetelfDetailFlameInfo = { detail_subtitle?: string[]; flame_achieve_url?: string; key?: string; subscript_color?: string; subtitle?: string; title?: string; [property: string]: any; }; type 火花成就日常 = { detail: 火花成就日常_Detail[]; [property: string]: any; }; type 火花成就日常_Detail = { detail_subtitle_unflame: string[]; flame_info: FluffyFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; title: string; [property: string]: any; }; type FluffyFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type 火花成就日常群聊 = { detail: 火花成就日常群聊_Detail[]; [property: string]: any; }; type 火花成就日常群聊_Detail = { detail_subtitle_unflame: string[]; flame_info: TentacledFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; title: string; [property: string]: any; }; type TentacledFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type 火花成就日常V2 = { detail: 火花成就日常V2Detail[]; [property: string]: any; }; type 火花成就日常V2Detail = { detail_subtitle_lock: string[]; detail_subtitle_unflame: string[]; flame_info: StickyFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; subtitle_lock: string; title: string; [property: string]: any; }; type StickyFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type 火花成就日常V2群聊 = { detail: 火花成就日常V2群聊_Detail[]; [property: string]: any; }; type 火花成就日常V2群聊_Detail = { detail_subtitle_lock: string[]; detail_subtitle_unflame: string[]; flame_info: IndigoFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; subtitle_lock: string; title: string; [property: string]: any; }; type IndigoFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type 火花成就测试 = { detail: 火花成就测试_Detail[]; [property: string]: any; }; type 火花成就测试_Detail = { detail_subtitle_unflame: string[]; flame_info: IndecentFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; title: string; [property: string]: any; }; type IndecentFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type 火花成就节日测试群聊 = { detail: 火花成就节日测试群聊_Detail[]; [property: string]: any; }; type 火花成就节日测试群聊_Detail = { detail_subtitle_unflame: string[]; flame_info: HilariousFlameInfo[]; flame_to_achieve_url: string; keys: string[]; subscript: string; subtitle: string; title: string; [property: string]: any; }; type HilariousFlameInfo = { detail_subtitle: string[]; flame_achieve_url: string; key: string; subscript_color: string; subtitle: string; title: string; [property: string]: any; }; type InteractiveResourceConfig = { '100-2025春节互动表情\t': The1002025春节互动表情; '2025 春节-Android': The2025春节Android; '2025 春节-Android更新': The2025春节Android更新; '互动表情升级 一期': 互动表情升级一期; [property: string]: any; }; type The1002025春节互动表情 = { animate_icon: { [key: string]: any; }; icon_url: string; interactive_resources: The1002025春节互动表情_InteractiveResource[]; special_resources: The1002025春节互动表情_SpecialResource[]; [property: string]: any; }; type The1002025春节互动表情_InteractiveResource = { animate_type: string; animate_url: string; display_name: string; extra: PurpleExtra$1; height: number; resource_type: number; static_type: string; static_url: string; static_url_list: PurpleStaticurlList[]; sticker_info_source: string; version: number; visible_end_time: number; width: number; [property: string]: any; }; type PurpleExtra$1 = { activity_scene?: string; hint_content?: string; light_interaction: string; sticker_info_source?: string; [property: string]: any; }; type PurpleStaticurlList = { static_type: string; static_url: string; [property: string]: any; }; type The1002025春节互动表情_SpecialResource = { config: PurpleConfig; in_advance: boolean; name: string; relation_name: string[]; special_resource: string; special_type: number; trigger_type: string; version: number; [property: string]: any; }; type PurpleConfig = { continuous_show?: string; random_show: string; receiver_show?: string; sender_show?: string; [property: string]: any; }; type The2025春节Android = { animate_icon: { [key: string]: any; }; icon_url: string; interactive_resources: The2025春节AndroidInteractiveResource[]; special_resources: The2025春节AndroidSpecialResource[]; [property: string]: any; }; type The2025春节AndroidInteractiveResource = { animate_type: string; animate_url: string; display_name: string; extra: FluffyExtra$1; height: number; resource_type: number; static_type: string; static_url: string; static_url_list: FluffyStaticurlList[]; sticker_info_source: string; version: number; visible_end_time: number; width: number; [property: string]: any; }; type FluffyExtra$1 = { activity_scene?: string; hint_content?: string; light_interaction: string; sticker_info_source?: string; [property: string]: any; }; type FluffyStaticurlList = { static_type: string; static_url: string; [property: string]: any; }; type The2025春节AndroidSpecialResource = { config: FluffyConfig; in_advance: boolean; name: string; relation_name: string[]; special_resource: string; special_type: number; trigger_type: string; version: number; [property: string]: any; }; type FluffyConfig = { continuous_show?: string; random_show: string; receiver_show?: string; sender_show?: string; [property: string]: any; }; type The2025春节Android更新 = { animate_icon: { [key: string]: any; }; icon_url: string; interactive_resources: The2025春节Android更新_InteractiveResource[]; special_resources: The2025春节Android更新_SpecialResource[]; [property: string]: any; }; type The2025春节Android更新_InteractiveResource = { animate_type: string; animate_url: string; display_name: string; extra: TentacledExtra; height: number; resource_type: number; static_type: string; static_url: string; static_url_list: TentacledStaticurlList[]; sticker_info_source: string; version: number; visible_end_time: number; width: number; [property: string]: any; }; type TentacledExtra = { activity_scene?: string; hint_content?: string; light_interaction: string; sticker_info_source?: string; [property: string]: any; }; type TentacledStaticurlList = { static_type: string; static_url: string; [property: string]: any; }; type The2025春节Android更新_SpecialResource = { config: TentacledConfig; in_advance: boolean; name: string; relation_name: string[]; special_resource: string; special_type: number; trigger_type: string; version: number; [property: string]: any; }; type TentacledConfig = { continuous_show?: string; random_show: string; receiver_show?: string; sender_show?: string; [property: string]: any; }; type 互动表情升级一期 = { animate_icon: { [key: string]: any; }; icon_url: string; interactive_resources: 互动表情升级一期_InteractiveResource[]; special_resources: 互动表情升级一期_SpecialResource[]; [property: string]: any; }; type 互动表情升级一期_InteractiveResource = { animate_type: string; animate_url: string; display_name: string; extra: StickyExtra; height: number; resource_type: number; static_type: string; static_url: string; static_url_list: StickyStaticurlList[]; sticker_info_source: string; version: number; width: number; [property: string]: any; }; type StickyExtra = { light_interaction: string; [property: string]: any; }; type StickyStaticurlList = { static_type: string; static_url: string; [property: string]: any; }; type 互动表情升级一期_SpecialResource = { config: StickyConfig; in_advance: boolean; name: string; relation_name: string[]; special_resource: string; special_type: number; trigger_type: string; version: number; [property: string]: any; }; type StickyConfig = { continuous_show?: string; random_show: string; receiver_show?: string; sender_show?: string; [property: string]: any; }; type LogPb$8 = { impr_id: string; [property: string]: any; }; type ReportToggles = { actionbar_diff: number; flame_achieve: number; interactive_resources: number; interactive_resources_v2: number; plus_panel_diff: number; [property: string]: any; }; /** 图集作品 */ type DyImageAlbumWork = { aweme_detail: AwemeDetail$2; log_pb: LogPb$7; status_code: number; [property: string]: any; }; type AwemeDetail$2 = { activity_video_type: number; anchors: null; authentication_token: string; author: Author$5; author_mask_tag: number; author_user_id: number; aweme_control: AwemeControl$3; aweme_id: string; aweme_listen_struct: AwemeListenStruct$3; aweme_type: number; aweme_type_tags: string; boost_status: number; can_cache_to_local: boolean; caption: string; cf_recheck_ts: number; challenge_position: null; chapter_list: null; collect_stat: number; collection_corner_mark: number; comment_gid: number; comment_list: null; comment_permission_info: CommentPermissionInfo$3; commerce_config_data: null; component_control: ComponentControl$3; component_info_v2: string; cover_labels: null; create_time: number; desc: string; disable_relation_bar: number; dislike_dimension_list: null; dislike_dimension_list_v2: null; distribute_circle: DistributeCircle$3; duet_aggregate_in_music_tab: boolean; duration: number; ecom_comment_atmosphere_type: number; enable_comment_sticker_rec: boolean; entertainment_product_info: EntertainmentProductInfo$4; fall_card_struct: FallCardStruct$2; feed_comment_config: FeedCommentConfig$3; flash_mob_trends: number; friend_interaction: number; friend_recommend_info: { [key: string]: any; }; game_tag_info: GameTagInfo$3; geofencing: string[]; geofencing_regions: null; group_id: string; guide_scene_info: { [key: string]: any; }; hybrid_label: null; image_album_music_info: ImageAlbumMusicInfo$3; image_comment: { [key: string]: any; }; image_crop_ctrl: number; image_infos: null; image_item_quality_level: number; image_list: null; images: Image$1[]; img_bitrate: string[]; impression_data: ImpressionData$4; incentive_item_type: number; interaction_stickers: null; is_24_story: number; is_ads: boolean; is_collects_selected: number; is_duet_sing: boolean; is_image_beat: boolean; is_life_item: boolean; is_multi_content: number; is_share_post: boolean; is_story: number; is_top: number; is_use_music: boolean; item_title: string; item_warn_notification: ItemWarnNotification$3; label_top_text: null; libfinsert_task_id: string; long_video: null; mark_largely_following: boolean; media_type: number; music: Music$4; nickname_position: null; origin_comment_ids: null; origin_duet_resource_uri: string; origin_text_extra: string[]; original: number; original_images: null; packed_clips: null; personal_page_botton_diagnose_style: number; photo_search_entrance: PhotoSearchEntrance$3; play_progress: PlayProgress$3; position: null; preview_title: string; preview_video_status: number; promotions: string[]; publish_plus_alienation: PublishPlusAlienation$3; rate: number; region: string; relation_labels: null; risk_infos: RiskInfos$3; seo_info: { [key: string]: any; }; series_paid_info: SeriesPaidInfo$3; share_info: AwemeDetailShareInfo$2; share_rec_extra: string; share_url: string; shoot_way: string; should_open_ad_report: boolean; show_follow_button: { [key: string]: any; }; social_tag_list: null; statistics: Statistics$4; status: Status$3; suggest_words: SuggestWords$4; text_extra: TextExtra$4[]; uniqid_position: null; user_digged: number; user_recommend_status: number; video: Video$5; video_control: VideoControl$4; video_game_data_channel_config: { [key: string]: any; }; video_labels: null; video_share_edit_status: number; video_tag: VideoTag$3[]; video_text: string[]; visual_search_info: VisualSearchInfo$3; vtag_search: VtagSearch$2; xigua_base_info: XiguaBaseInfo$3; [property: string]: any; }; type Author$5 = { account_cert_info: string; avatar_thumb: AuthorAvatarThumb$3; awemehts_greet_info: string; cf_list: null; close_friend_type: number; contacts_status: number; contrail_list: null; cover_url: Coverurl$4[]; create_time: number; custom_verify: string; data_label_list: null; endorsement_info_list: null; enterprise_verify_reason: string; favoriting_count: number; follow_status: number; follower_count: number; follower_list_secondary_information_struct: null; follower_status: number; following_count: number; im_role_ids: null; is_ad_fake: boolean; is_blocked_v2: boolean; is_blocking_v2: boolean; is_cf: number; live_high_value: number; mate_add_permission: number; max_follower_count: number; nickname: string; offline_info_list: null; personal_tag_list: null; prevent_download: boolean; risk_notice_text: string; sec_uid: string; secret: number; share_info: AuthorShareInfo$3; short_id: string; signature: string; signature_extra: null; special_follow_status: number; special_people_labels: null; status: number; text_extra: null; total_favorited: number; uid: string; unique_id: string; user_age: number; user_canceled: boolean; user_permissions: null; verification_type: number; [property: string]: any; }; type AuthorAvatarThumb$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type Coverurl$4 = { height?: number; uri?: string; url_list?: string[]; width?: number; [property: string]: any; }; type AuthorShareInfo$3 = { share_desc: string; share_desc_info: string; share_qrcode_url: ShareQrcodeurl$4; share_title: string; share_title_myself: string; share_title_other: string; share_url: string; share_weibo_desc: string; [property: string]: any; }; type ShareQrcodeurl$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type AwemeControl$3 = { can_comment: boolean; can_forward: boolean; can_share: boolean; can_show_comment: boolean; [property: string]: any; }; type AwemeListenStruct$3 = { trace_info: string; [property: string]: any; }; type CommentPermissionInfo$3 = { can_comment: boolean; comment_permission_status: number; item_detail_entry: boolean; press_entry: boolean; toast_guide: boolean; [property: string]: any; }; type ComponentControl$3 = { data_source_url: string; [property: string]: any; }; type DistributeCircle$3 = { campus_block_interaction: boolean; distribute_type: number; is_campus: boolean; [property: string]: any; }; type EntertainmentProductInfo$4 = { market_info: MarketInfo$4; [property: string]: any; }; type MarketInfo$4 = { limit_free: LimitFree$4; [property: string]: any; }; type LimitFree$4 = { in_free: boolean; [property: string]: any; }; type FallCardStruct$2 = { recommend_reason_v2: string; [property: string]: any; }; type FeedCommentConfig$3 = { author_audit_status: number; input_config_text: string; [property: string]: any; }; type GameTagInfo$3 = { is_game: boolean; [property: string]: any; }; type ImageAlbumMusicInfo$3 = { begin_time: number; end_time: number; volume: number; [property: string]: any; }; type Image$1 = { download_url_list: string[]; height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type ImpressionData$4 = { group_id_list_a: string[]; group_id_list_b: string[]; group_id_list_c: string[]; similar_id_list_a: null; similar_id_list_b: null; [property: string]: any; }; type ItemWarnNotification$3 = { content: string; show: boolean; type: number; [property: string]: any; }; type Music$4 = { album: string; artist_user_infos: null; artists: string[]; audition_duration: number; author: string; author_deleted: boolean; author_position: null; author_status: number; avatar_large: AvatarLarge$3; avatar_medium: AvatarMedium$4; avatar_thumb: MusicAvatarThumb$3; binded_challenge_id: number; can_background_play: boolean; collect_stat: number; cover_hd: Coverhd$4; cover_large: CoverLarge$4; cover_medium: MusicCoverMedium$1; cover_thumb: CoverThumb$5; dmv_auto_show: boolean; dsp_status: number; duration: number; end_time: number; external_song_info: string[]; extra: string; id: number; id_str: string; is_audio_url_with_cookie: boolean; is_commerce_music: boolean; is_del_video: boolean; is_matched_metadata: boolean; is_original: boolean; is_original_sound: boolean; is_pgc: boolean; is_restricted: boolean; is_video_self_see: boolean; lyric_short_position: null; matched_pgc_sound: MatchedPgcSound$2; mid: string; music_chart_ranks: null; music_collect_count: number; music_cover_atmosphere_color_value: string; music_status: number; musician_user_infos: null; mute_share: boolean; offline_desc: string; owner_handle: string; owner_id: string; owner_nickname: string; pgc_music_type: number; play_url: Playurl$5; position: null; prevent_download: boolean; prevent_item_download_status: number; preview_end_time: number; preview_start_time: number; reason_type: number; redirect: boolean; schema_url: string; search_impr: SearchImpr$4; sec_uid: string; shoot_duration: number; song: Song$3; source_platform: number; start_time: number; status: number; strong_beat_url: StrongBeaturl$4; tag_list: null; title: string; unshelve_countries: null; user_count: number; video_duration: number; [property: string]: any; }; type AvatarLarge$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type AvatarMedium$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type MusicAvatarThumb$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type Coverhd$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type CoverLarge$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type MusicCoverMedium$1 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type CoverThumb$5 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type MatchedPgcSound$2 = { author: string; cover_medium: MatchedPgcSoundCoverMedium$2; mixed_author: string; mixed_title: string; title: string; [property: string]: any; }; type MatchedPgcSoundCoverMedium$2 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type Playurl$5 = { height: number; uri: string; url_key: string; url_list: string[]; width: number; [property: string]: any; }; type SearchImpr$4 = { entity_id: string; [property: string]: any; }; type Song$3 = { artists: null; id: number; id_str: string; [property: string]: any; }; type StrongBeaturl$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type PhotoSearchEntrance$3 = { ecom_type: number; [property: string]: any; }; type PlayProgress$3 = { last_modified_time: number; play_progress: number; [property: string]: any; }; type PublishPlusAlienation$3 = { alienation_type: number; [property: string]: any; }; type RiskInfos$3 = { content: string; risk_sink: boolean; type: number; vote: boolean; warn: boolean; [property: string]: any; }; type SeriesPaidInfo$3 = { item_price: number; series_paid_status: number; [property: string]: any; }; type AwemeDetailShareInfo$2 = { share_desc: string; share_desc_info: string; share_link_desc: string; share_url: string; [property: string]: any; }; type Statistics$4 = { admire_count: number; aweme_id: string; collect_count: number; comment_count: number; digg_count: number; play_count: number; share_count: number; [property: string]: any; }; type Status$3 = { allow_share: boolean; aweme_id: string; in_reviewing: boolean; is_delete: boolean; is_prohibited: boolean; listen_video_status: number; part_see: number; private_status: number; review_result: ReviewResult$4; [property: string]: any; }; type ReviewResult$4 = { review_status: number; [property: string]: any; }; type SuggestWords$4 = { suggest_words: SuggestWord$4[]; [property: string]: any; }; type SuggestWord$4 = { hint_text?: string; icon_url?: string; scene?: string; words?: Word$5[]; [property: string]: any; }; type Word$5 = { info?: string; word?: string; word_id?: string; [property: string]: any; }; type TextExtra$4 = { caption_end: number; caption_start: number; end: number; hashtag_id: string; hashtag_name: string; is_commerce: boolean; start: number; type: number; [property: string]: any; }; type Video$5 = { audio: { [key: string]: any; }; big_thumbs: BigThumb$2[]; bit_rate_audio: null; cover: Cover$3; duration: number; has_watermark: boolean; height: number; is_h265: number; meta: string; origin_cover: OriginCover$3; play_addr: PlayAddr; ratio: string; width: number; [property: string]: any; }; type BigThumb$2 = { duration?: number; fext?: string; img_num?: number; img_url?: string; img_urls?: string[]; img_x_len?: number; img_x_size?: number; img_y_len?: number; img_y_size?: number; interval?: number; uri?: string; uris?: string[]; [property: string]: any; }; type Cover$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type OriginCover$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type PlayAddr = { height: number; uri: string; url_key: string; url_list: string[]; width: number; [property: string]: any; }; type VideoControl$4 = { allow_douplus: boolean; allow_download: boolean; allow_duet: boolean; allow_dynamic_wallpaper: boolean; allow_music: boolean; allow_react: boolean; allow_record: boolean; allow_share: boolean; allow_stitch: boolean; disable_record_reason: string; download_ignore_visibility: boolean; download_info: DownloadInfo$4; draft_progress_bar: number; duet_ignore_visibility: boolean; duet_info: DuetInfo$4; prevent_download_type: number; share_grayed: boolean; share_ignore_visibility: boolean; share_type: number; show_progress_bar: number; timer_info: { [key: string]: any; }; timer_status: number; [property: string]: any; }; type DownloadInfo$4 = { level: number; [property: string]: any; }; type DuetInfo$4 = { fail_info: FailInfo; level: number; [property: string]: any; }; type FailInfo = { code: number; reason: string; [property: string]: any; }; type VideoTag$3 = { level: number; tag_id: number; tag_name: string; [property: string]: any; }; type VisualSearchInfo$3 = { is_ecom_img: boolean; is_high_accuracy_ecom: boolean; is_high_recall_ecom: boolean; is_show_img_entrance: boolean; visual_search_longpress: number; [property: string]: any; }; type VtagSearch$2 = { vtag_delay_ts: number; vtag_enable: boolean; [property: string]: any; }; type XiguaBaseInfo$3 = { item_id: number; star_altar_order_id: number; star_altar_type: number; status: number; [property: string]: any; }; type LogPb$7 = { impr_id: string; [property: string]: any; }; type DyMusicWork = { extra: Extra$4; feature_data: { [key: string]: any; }; high_upload_ratio: number; log_pb: LogPb$6; msg: string; music_info: MusicInfo; rec_list: string[]; related_effects: null; related_musics: null; small_banner: string[]; status_code: number; trends_infos: null; [property: string]: any; }; type Extra$4 = { fatal_item_ids: string[]; logid: string; now: number; [property: string]: any; }; type LogPb$6 = { impr_id: string; [property: string]: any; }; type MusicInfo = { album: string; artist_user_infos: null; artists: string[]; audition_duration: number; author: string; author_deleted: boolean; author_position: null; author_status: number; avatar_large: AvatarLarge$2; avatar_medium: AvatarMedium$3; avatar_thumb: AvatarThumb$2; binded_challenge_id: number; can_background_play: boolean; collect_stat: number; cover_hd: Coverhd$3; cover_large: CoverLarge$3; cover_medium: MusicInfoCoverMedium; cover_thumb: CoverThumb$4; dmv_auto_show: boolean; dsp_status: number; duration: number; end_time: number; external_song_info: string[]; extra: string; id: number; id_str: string; is_audio_url_with_cookie: boolean; is_commerce_music: boolean; is_del_video: boolean; is_matched_metadata: boolean; is_original: boolean; is_original_sound: boolean; is_pgc: boolean; is_restricted: boolean; is_video_self_see: boolean; luna_info: LunaInfo; lyric_short_position: null; matched_pgc_sound: MatchedPgcSound$1; mid: string; music_chart_ranks: null; music_collect_count: number; music_cover_atmosphere_color_value: string; music_status: number; musician_user_infos: null; mute_share: boolean; offline_desc: string; original_musician_display_name: string; owner_handle: string; owner_id: string; owner_nickname: string; pgc_music_type: number; play_url: Playurl$4; position: null; prevent_download: boolean; prevent_item_download_status: number; preview_end_time: number; preview_start_time: number; reason_type: number; redirect: boolean; schema_url: string; search_impr: SearchImpr$3; sec_uid: string; share_info: ShareInfo$2; shoot_duration: number; song: Song$2; source_platform: number; start_time: number; status: number; strong_beat_url: StrongBeaturl$3; tag_list: null; title: string; trend_music_start_time: number; unified_music_group: UnifiedMusicGroup; unshelve_countries: null; user_count: number; video_duration: number; [property: string]: any; }; type AvatarLarge$2 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type AvatarMedium$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type AvatarThumb$2 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type Coverhd$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type CoverLarge$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type MusicInfoCoverMedium = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type CoverThumb$4 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type LunaInfo = { has_copyright: boolean; is_luna_user: boolean; [property: string]: any; }; type MatchedPgcSound$1 = { author: string; cover_medium: MatchedPgcSoundCoverMedium$1; id: number; mixed_author: string; mixed_title: string; title: string; [property: string]: any; }; type MatchedPgcSoundCoverMedium$1 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type Playurl$4 = { height: number; uri: string; url_key: string; url_list: string[]; width: number; [property: string]: any; }; type SearchImpr$3 = { entity_id: string; [property: string]: any; }; type ShareInfo$2 = { bool_persist: number; share_desc: string; share_desc_info: string; share_quote: string; share_signature_desc: string; share_signature_url: string; share_title: string; share_title_myself: string; share_title_other: string; share_url: string; share_weibo_desc: string; [property: string]: any; }; type Song$2 = { artists: null; chorus_v3_infos: null; id: number; id_str: string; [property: string]: any; }; type StrongBeaturl$3 = { height: number; uri: string; url_list: string[]; width: number; [property: string]: any; }; type UnifiedMusicGroup = { author: string; medium_cover_url: MediumCoverurl; song_id: number; title: string; [property: string]: any; }; type MediumCoverurl = { uri: string; url_list: string[]; [property: string]: any; }; type DySearchInfo = { ad_info: { [key: string]: any; }; cursor: number; data: Datum$2[]; douyin_ai_search_info: DouyinaiSearchInfo; extra: Extra$3; global_doodle_config: GlobalDoodleConfig; guide_search_words: GuideSearchWord[]; has_more: number; log_pb: LogPb$5; multi_columns_info: MultiColumnsInfo; ops: null; path: string; polling_time: number; qc: string; status_code: number; time_cost: TimeCost$1; [property: string]: any; }; type Datum$2 = { ala_src: string; aweme_info: AwemeInfo; aweme_list: null; bottom_source_info?: BottomSourceInfo; card_id: string; card_info: CardInfo; card_style_type?: number; card_type?: number; card_type_id: CardTypeid; card_unique_name: string; common_aladdin?: CommonAladdin; debug_data?: DebugData; debug_diff_info: { [key: string]: any; }; doc_type: number; ecom_goods_list: null; feedback: Feedback; fp: string; log_data: LogData; lynx_info: LynxInfo; music_info_list: null; ops: null; provider_doc_id: number; provider_doc_id_str: string; qishui_music_list: null; send_back: string; show_tab: null; sub_card_list: null; tab: null; type: number; [property: string]: any; }; type AwemeInfo = { anchor_info?: AnchorInfo$1; anchors: null; author: Author$4; author_user_id: number; aweme_id: string; aweme_type: number; cha_list: null; challenge_position: null; chapter_bar_color: null; chapter_list: null; collect_stat: number; comment_list: null; commerce_config_data: null; cover_labels: null; create_scale_type: null; create_time: number; danmaku_control: DanmakuControl$2; desc: string; dislike_dimension_list: null; dislike_dimension_list_v2: null; entertainment_product_info: EntertainmentProductInfo$3; fake_horizontal_info?: FakeHorizontalInfo; geofencing: null; geofencing_regions: null; group_id: string; hybrid_label: null; image_infos: null; image_list: null; images: null; img_bitrate: null; impression_data: ImpressionData$3; interaction_stickers: null; is_top: number; jump_tab_info_list: null; label_top_text: null; long_video: null; mix_info?: MixInfo; music: Music$3; mv_info: null; nickname_position: null; origin_comment_ids: null; origin_text_extra: null; original_images: null; packed_clips: null; position: null; prevent_download: boolean; promotions: null; rawdata: string; ref_tts_id_list: null; ref_voice_modify_id_list: null; relation_labels: null; reply_smart_emojis: null; share_info: ShareInfo$1; slides_music_beats: null; social_tag_list: null; standard_bar_info_list: null; statistics: Statistics$3; status: AwemeInfoStatus; suggest_words: SuggestWords$3; text_extra: TextExtra$3[]; trends_infos: null; tts_id_list: null; uniqid_position: null; user_digged: number; video: Video$4; video_control: VideoControl$3; video_labels: null; video_tag: null; video_text: null; voice_modify_id_list: null; yumme_recreason: null; [property: string]: any; }; type AnchorInfo$1 = { content: string; extra: string; icon: Icon$2; id: string; log_extra: string; mp_url: string; open_url: string; style_info: StyleInfo$1; title: string; title_tag: string; type: number; web_url: string; [property: string]: any; }; type Icon$2 = { height: number; uri: string; url_key: string; url_list: string[]; width: number; [property: string]: any; }; type StyleInfo$1 = { default_icon: string; extra: string; scene_icon: string; [property: string]: any; }; type Author$4 = { account_cert_info: string; ad_cover_url: null; avatar_schema_list: null; avatar_thumb: AuthorAvatarThumb$2; ban_user_functions: null; batch_unfollow_contain_tabs: null; batch_unfollow_relation_desc: null; can_set_geofencing: null; card_entries: null; card_entries_not_display: null; card_sort_priority: null; cf_list: null; cha_list: null; contrail_list: null; cover_url: null; creator_tag_list: null; custom_verify: string; data_label_list: null; display_info: null; endorsement_info_list: null; enterprise_verify_reason: string; familiar_visitor_user: null; follow_status: number; follower_count: number; follower_list_secondary