@ikenxuan/amagi
Version:
抖音、B站的 web 端相关数据接口基于 Node.js 的实现
2,066 lines (2,056 loc) • 350 kB
TypeScript
import { ChalkInstance } 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;
};
/** API标准化HTTP请求错误类型 */
type ErrorDetail = {
/**
* 错误描述信息
*/
errorDescription: string;
/**
* 请求类型
*/
requestType: string;
/**
* 请求URL地址
*/
requestUrl: string;
};
/** 未知错误 */
declare enum amagiAPIErrorCode {
/** 未知错误 */
UNKNOWN = "UNKNOWN_ERROR"
}
/** 抖音平台API错误码 */
declare enum douoyinAPIErrorCode {
/** Cookie无效或已过期 */
COOKIE = "INVALID_COOKIE",
/** 内容被隐藏或下架 */
FILTER = "CONTENT_FILTERED",
/** 当前用户未开播 */
NOT_LIVE = "USER_NOT_LIVE",
/** 未知错误 */
UNKNOWN = "UNKNOWN_ERROR"
}
/** B站平台API错误码 */
declare enum bilibiliAPIErrorCode {
/** 应用程序不存在或已被封禁 */
APP_NOT_FOUND = "-1",
/** Access Key 错误 */
ACCESS_KEY_ERROR = "-2",
/** API 校验密匙错误 */
API_KEY_ERROR = "-3",
/** 调用方对该Method没有权限 */
METHOD_NOT_PERMITTED = "-4",
/** 账号未登录 */
NOT_LOGGED_IN = "-101",
/** 账号被封停 */
ACCOUNT_BANNED = "-102",
/** 积分不足 */
POINTS_INSUFFICIENT = "-103",
/** 硬币不足 */
COINS_INSUFFICIENT = "-104",
/** 验证码错误 */
CAPTCHA_ERROR = "-105",
/** 账号非正式会员或在适应期 */
MEMBERSHIP_LIMITED = "-106",
/** 应用不存在或者被封禁 */
APP_BANNED = "-107",
/** 未绑定手机 */
PHONE_NOT_BOUND = "-108",
/** 未绑定手机 */
PHONE_NOT_BOUND_2 = "-110",
/** csrf 校验失败 */
CSRF_ERROR = "-111",
/** 系统升级中 */
SYSTEM_UPDATING = "-112",
/** 账号尚未实名认证 */
NOT_REAL_NAME_VERIFIED = "-113",
/** 请先绑定手机 */
NEED_BIND_PHONE = "-114",
/** 请先完成实名认证 */
NEED_REAL_NAME_VERIFICATION = "-115",
/** 木有改动 */
NO_CHANGE = "-304",
/** 撞车跳转 */
CONFLICT_REDIRECT = "-307",
/** 风控校验失败 (UA 或 wbi 参数不合法) */
RISK_CONTROL_FAILED = "-352",
/** 请求错误 */
BAD_REQUEST = "-400",
/** 未认证 (或非法请求) */
UNAUTHORIZED = "-401",
/** 访问权限不足 */
FORBIDDEN = "-403",
/** 啥都木有 */
NOT_FOUND = "-404",
/** 不支持该方法 */
METHOD_NOT_ALLOWED = "-405",
/** 冲突 */
CONFLICT = "-409",
/** 请求被拦截 (客户端 ip 被服务端风控) */
IP_BLOCKED = "-412",
/** 服务器错误 */
SERVER_ERROR = "-500",
/** 过载保护,服务暂不可用 */
SERVICE_UNAVAILABLE = "-503",
/** 服务调用超时 */
GATEWAY_TIMEOUT = "-504",
/** 超出限制 */
RATE_LIMITED = "-509",
/** 上传文件不存在 */
FILE_NOT_FOUND = "-616",
/** 上传文件太大 */
FILE_TOO_LARGE = "-617",
/** 登录失败次数太多 */
LOGIN_ATTEMPTS_EXCEEDED = "-625",
/** 用户不存在 */
USER_NOT_FOUND = "-626",
/** 密码太弱 */
WEAK_PASSWORD = "-628",
/** 用户名或密码错误 */
INVALID_CREDENTIALS = "-629",
/** 操作对象数量限制 */
OBJECT_LIMIT_EXCEEDED = "-632",
/** 被锁定 */
ACCOUNT_LOCKED = "-643",
/** 用户等级太低 */
USER_LEVEL_TOO_LOW = "-650",
/** 重复的用户 */
DUPLICATE_USER = "-652",
/** Token 过期 */
TOKEN_EXPIRED = "-658",
/** 密码时间戳过期 */
PASSWORD_TIMESTAMP_EXPIRED = "-662",
/** 地理区域限制 */
GEO_RESTRICTED = "-688",
/** 版权限制 */
COPYRIGHT_RESTRICTED = "-689",
/** 扣节操失败 */
REPUTATION_DEDUCTION_FAILED = "-701",
/** 请求过于频繁,请稍后再试 */
TOO_MANY_REQUESTS = "-799",
/** 服务器开小差了 */
SERVER_TEMPORARILY_UNAVAILABLE = "-8888",
/** 未知错误 */
UNKNOWN = "UNKNOWN"
}
/** 快手平台API错误码 */
declare enum kuaishouAPIErrorCode {
/** Cookie无效或已过期 */
COOKIE = "INVALID_COOKIE",
/** 未知错误 */
UNKNOWN = "UNKNOWN_ERROR"
}
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$3[];
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$3 = {
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 = {