@ikenxuan/amagi
Version:
抖音、B站的 web 端相关数据接口基于 Node.js 的实现
1,740 lines (1,739 loc) • 713 kB
TypeScript
import { EventEmitter } from "node:events";
import zod from "zod";
import { AxiosRequestConfig, AxiosResponse, RawAxiosResponseHeaders } from "axios";
import { ChalkInstance } from "chalk";
import express from "express";
//#region src/platform/bilibili/sign/wbi.d.ts
/**
* 对请求链接进行 WBI 签名
* @param BASEURL - 完整的请求地址,可以是字符串或 URL 对象
* @param cookie - 有效的用户 Cookie 字符串
* @returns 返回包含 WBI 签名的查询字符串
* @throws 当获取 WBI 密钥失败或 URL 解析失败时抛出错误
*/
declare const wbi_sign: (BASEURL: string | URL, cookie: string) => Promise<string>;
//#endregion
//#region src/platform/bilibili/sign/bv2av.d.ts
/**
* av号转bv号
* @param aid av号
* @returns
*/
declare const av2bv: (aid: number) => `BV1${string}`;
/**
* bv号转av号
* @param bvid bv号
* @returns
*/
declare const bv2av: (bvid: string) => number;
//#endregion
//#region src/types/ReturnDataType/Bilibili/ProtobufDanmaku/ProtobufDanmaku_V0.d.ts
type BiliProtobufDanmaku_V0 = {
code: number;
data: DataData$28;
message: string;
[property: string]: any;
};
type DataData$28 = {
elems: Elem[];
[property: string]: any;
};
type Elem = {
action: string;
animation: string;
attr: number;
color: number;
content: string;
ctime: string;
fontsize: number;
id: string;
idStr: string;
midHash: string;
mode: number;
pool: number;
progress: number;
weight: number;
[property: string]: any;
};
//#endregion
//#region src/types/ReturnDataType/Bilibili/ProtobufDanmaku/index.d.ts
type BiliProtobufDanmaku = BiliProtobufDanmaku_V0;
//#endregion
//#region src/platform/bilibili/sign/danmaku_proto.d.ts
/**
* 解析弹幕分段响应
* @param data - 二进制 protobuf 数据
* @returns 解析后的弹幕数据
*/
declare function parseDmSegMobileReply(data: ArrayBuffer | Uint8Array): BiliProtobufDanmaku['data']['elems'][number];
//#endregion
//#region src/types/BilibiliAPIParams.d.ts
/**
* B站 API 参数类型定义
*
* 定义所有 B站 API 方法的参数接口和类型映射
*
* @module types/BilibiliAPIParams
*/
/**
* B站 API 方法参数映射接口
*
* 每个键对应一种 API 方法,值为该方法所需的参数接口
*/
interface BilibiliMethodOptionsMap {
/** 获取单个视频信息 */
VideoInfoParams: {
methodType: 'videoInfo'; /** 稿件BVID */
bvid: string;
};
/** 获取视频流下载信息 */
VideoStreamParams: {
methodType: 'videoStream'; /** 稿件AVID */
avid: number; /** 稿件cid */
cid: number;
};
/** 获取评论数据 */
CommentParams: {
methodType: 'comments'; /** 评论区类型代码,详见 [评论区类型代码](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: CommentType; /** 稿件ID,也就是AV号去除前缀后的内容 */
oid: string;
/**
* 获取的评论数量,默认20
* @defaultValue 20
*/
number?: number;
/**
* 排序方式
* 默认为3
* 0和3: 仅热度
* 1: 按热度+按时间
* 2: 仅时间
* @defaultValue 3
*/
mode?: 0 | 1 | 2 | 3;
/**
* 翻页信息,用于懒加载分页
* 首次请求时不传,后续请求使用上次响应中的 data.cursor.pagination_reply.next_offset
*/
pagination_str?: string;
/**
* 平台类型
* @defaultValue 1
*/
plat?: number; /** 当获取第一页评论时存在 */
seek_rpid?: string;
/**
* web位置参数
* @defaultValue 1315875
*/
web_location?: string;
};
/** 获取指定评论的回复 */
CommentReplyParams: {
methodType: 'commentReplies'; /** 评论区类型代码,详见 [评论区类型代码](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: CommentType; /** 目标评论区 ID,也就是AV号去除前缀后的内容 */
oid: string; /** 根评论ID */
root: string;
/**
* 获取的评论数量,默认20
* @defaultValue 20
*/
number?: number;
};
/** 获取用户相关数据 */
UserParams: {
methodType: 'userCard' | 'userDynamicList' | 'uploaderTotalViews' | 'userSpaceInfo'; /** UP主UID */
host_mid: number;
};
/** 获取动态数据 */
DynamicParams: {
methodType: 'dynamicDetail' | 'dynamicCard'; /** 动态ID */
dynamic_id: string;
};
/** 获取番剧基本信息 */
BangumiInfoParams: {
methodType: 'bangumiInfo'; /** 稿件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: 'bangumiStream'; /** 稿件cid */
cid: number; /** 稿件ep_id,番剧的某一集,对应网址中包含ep号,如:{@link https://www.bilibili.com/bangumi/play/ep330798} */
ep_id: string;
};
/** 获取直播间信息 */
LiveRoomParams: {
methodType: 'liveRoomInfo' | 'liveRoomInit'; /** 直播间ID */
room_id: string;
};
/** 查询二维码状态 */
QrcodeParams: {
methodType: 'qrcodeStatus'; /** 扫码登录秘钥 */
qrcode_key: string;
};
/** 获取表情列表 */
EmojiParams: {
methodType: 'emojiList';
};
/** 获取登录基本信息 */
LoginBaseInfoParams: {
methodType: 'loginStatus';
};
/** 申请登录二维码 */
GetQrcodeParams: {
methodType: 'loginQrcode';
};
/** BV号转AV号 */
Bv2AvParams: {
methodType: 'bvToAv'; /** 视频BV号 */
bvid: string;
};
/** AV号转BV号 */
Av2BvParams: {
methodType: 'avToBv'; /** 视频AV号 */
avid: number;
};
/** 获取专栏正文内容 */
ArticleParams: {
methodType: 'articleContent';
/**
* 专栏ID
* 如:{@link https://www.bilibili.com/read/cv43496899/?jump_opus=1}
* 43496899 就是专栏ID
* API Docs {@link https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/article/view.md#获取专栏正文内容}
*/
id: string;
};
/** 获取专栏显示卡片信息 */
ArticleCardParams: {
methodType: 'articleCards';
/**
* 被查询的 id 列表
* 可传视频 **完整** AV/BV 号, 专栏 CV 号, 直播间长短 lv 号
* API Docs {@link https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/article/card.md#获取专栏显示卡片信息}
*/
ids: string[] | string;
};
/** 获取专栏文章基本信息 */
ArticleInfoParams: {
methodType: 'articleInfo';
/**
* 专栏ID
* 如:{@link https://www.bilibili.com/read/cv43496899/?jump_opus=1}
* 43496899 就是专栏ID
* API Docs {@link https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/article/view.md#获取专栏文章基本信息}
*/
id: string;
};
/** 获取文集基本信息 */
ColumnInfoParams: {
methodType: 'articleListInfo';
/**
* 文集rlid
* 如:{@link https://www.bilibili.com/read/cv208340/?jump_opus=1}
* 208340 就是文集rlid
* API Docs {@link https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/article/articles.md#获取文集基本信息}
*/
id: string;
};
/**
* 获取实时弹幕
* @see https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/danmaku/danmaku_proto.md
*/
DanmakuParams: {
methodType: 'videoDanmaku'; /** 稿件cid */
cid: number;
/**
* 分段序号(从1开始),每6分钟为一段
* @defaultValue 1
*/
segment_index?: number;
};
/** 从 v_voucher 申请验证码 */
ApplyVoucherCaptchaParams: {
methodType: 'captchaFromVoucher'; /** CSRF Token (位于 Cookie 的 bili_jct) */
csrf?: string; /** 结构为字符串 voucher_ 尾随一串以 - 为分隔符的小写 UUID */
v_voucher: string;
};
/** 验证验证码结果 */
ValidateCaptchaParams: {
methodType: 'validateCaptcha'; /** CSRF Token (位于 Cookie 的 bili_jct) */
csrf?: string; /** 极验3 https://www.geetest.com 的验证码 challenge */
challenge: string; /** 验证码 token */
token: string; /** 人机验证成功后的 validate 参数 */
validate: string; /** 人机验证成功后的 seccode 参数,{validate}|jordan */
seccode: string;
};
}
/**
* 评论区类型枚举
*
* 对应 CommentParams.type 与 CommentReplyParams.type
* @see https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/comment/readme.md#评论区类型代码
*/
declare enum CommentType {
/** 视频稿件:oid 为稿件 avid */
Video = 1,
/** 话题:oid 为话题 id */
Topic = 2,
/** 活动:oid 为活动 id */
Activity = 4,
/** 小视频:oid 为小视频 id */
SmallVideo = 5,
/** 小黑屋封禁信息:oid 为封禁公示 id */
BlockInfo = 6,
/** 公告信息:oid 为公告 id */
Announcement = 7,
/** 直播活动:oid 为直播间 id */
LiveActivity = 8,
/** 活动稿件:oid 含义未知 */
ActivityVideo = 9,
/** 直播公告:oid 含义未知 */
LiveAnnouncement = 10,
/** 相簿(图片动态):oid 为相簿 id */
Album = 11,
/** 专栏:oid 为专栏 cvid */
Article = 12,
/** 票务:oid 含义未知 */
Ticket = 13,
/** 音频:oid 为音频 auid */
Audio = 14,
/** 风纪委员会:oid 为众裁项目 id */
Jury = 15,
/** 点评:oid 含义未知 */
Review = 16,
/** 动态(纯文字动态&分享):oid 为动态 id */
Dynamic = 17,
/** 播单:oid 含义未知 */
Playlist = 18,
/** 音乐播单:oid 含义未知 */
MusicPlaylist = 19,
/** 漫画:oid 含义未知 */
Comic1 = 20,
/** 漫画:oid 含义未知 */
Comic2 = 21,
/** 漫画:oid 为漫画 mcid */
Comic = 22,
/** 课程:oid 为课程 epid */
Course = 33
}
/**
* B站方法类型到参数的映射
*
* 用于根据 methodType 字符串获取对应的参数类型
*/
type BilibiliMethodOptMap = {
videoInfo: BilibiliMethodOptionsMap['VideoInfoParams'];
videoStream: BilibiliMethodOptionsMap['VideoStreamParams'];
comments: BilibiliMethodOptionsMap['CommentParams'];
commentReplies: BilibiliMethodOptionsMap['CommentReplyParams'];
userCard: BilibiliMethodOptionsMap['UserParams'];
userDynamicList: BilibiliMethodOptionsMap['UserParams'];
userSpaceInfo: BilibiliMethodOptionsMap['UserParams'];
uploaderTotalViews: BilibiliMethodOptionsMap['UserParams'];
emojiList: BilibiliMethodOptionsMap['EmojiParams'];
bangumiInfo: BilibiliMethodOptionsMap['BangumiInfoParams'];
bangumiStream: BilibiliMethodOptionsMap['BangumiStreamParams'];
dynamicDetail: BilibiliMethodOptionsMap['DynamicParams'];
dynamicCard: BilibiliMethodOptionsMap['DynamicParams'];
liveRoomInfo: BilibiliMethodOptionsMap['LiveRoomParams'];
liveRoomInit: BilibiliMethodOptionsMap['LiveRoomParams'];
loginStatus: BilibiliMethodOptionsMap['LoginBaseInfoParams'];
loginQrcode: BilibiliMethodOptionsMap['GetQrcodeParams'];
qrcodeStatus: BilibiliMethodOptionsMap['QrcodeParams'];
avToBv: BilibiliMethodOptionsMap['Av2BvParams'];
bvToAv: BilibiliMethodOptionsMap['Bv2AvParams'];
articleContent: BilibiliMethodOptionsMap['ArticleParams'];
articleCards: BilibiliMethodOptionsMap['ArticleCardParams'];
articleInfo: BilibiliMethodOptionsMap['ArticleInfoParams'];
articleListInfo: BilibiliMethodOptionsMap['ColumnInfoParams'];
captchaFromVoucher: BilibiliMethodOptionsMap['ApplyVoucherCaptchaParams'];
validateCaptcha: BilibiliMethodOptionsMap['ValidateCaptchaParams'];
videoDanmaku: BilibiliMethodOptionsMap['DanmakuParams'];
};
//#endregion
//#region src/validation/bilibili.d.ts
/** 视频信息参数验证 */
declare const BilibiliVideoParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['VideoInfoParams']>;
/** 视频流参数验证 */
declare const BilibiliVideoDownloadParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['VideoStreamParams']>;
/** 评论参数验证 */
declare const BilibiliCommentParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['CommentParams']>;
/** 评论回复参数验证 */
declare const BilibiliCommentReplyParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['CommentReplyParams']>;
/** 用户参数验证 */
declare const BilibiliUserParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['UserParams']>;
/** 表情参数验证 */
declare const BilibiliEmojiParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['EmojiParams']>;
/** 番剧信息参数验证 */
declare const BilibiliBangumiInfoParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['BangumiInfoParams']>;
/** 番剧流参数验证 */
declare const BilibiliBangumiStreamParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['BangumiStreamParams']>;
/** 动态参数验证 */
declare const BilibiliDynamicParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['DynamicParams']>;
/** 直播间参数验证 */
declare const BilibiliLiveParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['LiveRoomParams']>;
/** 登录状态参数验证 */
declare const BilibiliLoginParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['LoginBaseInfoParams']>;
/** 申请二维码参数验证 */
declare const BilibiliQrcodeParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['GetQrcodeParams']>;
/** 二维码状态参数验证 */
declare const BilibiliQrcodeStatusParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['QrcodeParams']>;
/** AV转BV参数验证 */
declare const BilibiliAv2BvParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['Av2BvParams']>;
/** BV转AV参数验证 */
declare const BilibiliBv2AvParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['Bv2AvParams']>;
/** 专栏内容参数验证 */
declare const BilibiliArticleParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ArticleParams']>;
/** 专栏卡片参数验证 */
declare const BilibiliArticleCardParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ArticleCardParams']>;
/** 专栏信息参数验证 */
declare const BilibiliArticleInfoParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ArticleInfoParams']>;
/** 文集信息参数验证 */
declare const BilibiliColumnInfoParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ColumnInfoParams']>;
/** 验证码申请参数验证 */
declare const BilibiliApplyCaptchaParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ApplyVoucherCaptchaParams']>;
/** 验证码验证参数验证 */
declare const BilibiliValidateCaptchaParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['ValidateCaptchaParams']>;
/** 弹幕参数验证 */
declare const BilibiliDanmakuParamsSchema: zod.ZodType<BilibiliMethodOptionsMap['DanmakuParams']>;
/** B站参数验证模式映射 */
declare const BilibiliValidationSchemas: {
readonly videoInfo: zod.ZodType<{
methodType: "videoInfo";
bvid: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoInfo";
bvid: string;
}, unknown>>;
readonly videoStream: zod.ZodType<{
methodType: "videoStream";
avid: number;
cid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoStream";
avid: number;
cid: number;
}, unknown>>;
readonly comments: zod.ZodType<{
methodType: "comments";
type: CommentType;
oid: string;
number?: number;
mode?: 0 | 1 | 2 | 3;
pagination_str?: string;
plat?: number;
seek_rpid?: string;
web_location?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "comments";
type: CommentType;
oid: string;
number?: number;
mode?: 0 | 1 | 2 | 3;
pagination_str?: string;
plat?: number;
seek_rpid?: string;
web_location?: string;
}, unknown>>;
readonly commentReplies: zod.ZodType<{
methodType: "commentReplies";
type: CommentType;
oid: string;
root: string;
number?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "commentReplies";
type: CommentType;
oid: string;
root: string;
number?: number;
}, unknown>>;
readonly userCard: zod.ZodType<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown>>;
readonly userDynamicList: zod.ZodType<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown>>;
readonly userSpaceInfo: zod.ZodType<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown>>;
readonly emojiList: zod.ZodType<{
methodType: "emojiList";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "emojiList";
}, unknown>>;
readonly bangumiInfo: zod.ZodType<{
methodType: "bangumiInfo";
season_id?: string;
ep_id?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "bangumiInfo";
season_id?: string;
ep_id?: string;
}, unknown>>;
readonly bangumiStream: zod.ZodType<{
methodType: "bangumiStream";
cid: number;
ep_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "bangumiStream";
cid: number;
ep_id: string;
}, unknown>>;
readonly dynamicDetail: zod.ZodType<{
methodType: "dynamicDetail" | "dynamicCard";
dynamic_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "dynamicDetail" | "dynamicCard";
dynamic_id: string;
}, unknown>>;
readonly dynamicCard: zod.ZodType<{
methodType: "dynamicDetail" | "dynamicCard";
dynamic_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "dynamicDetail" | "dynamicCard";
dynamic_id: string;
}, unknown>>;
readonly liveRoomInfo: zod.ZodType<{
methodType: "liveRoomInfo" | "liveRoomInit";
room_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "liveRoomInfo" | "liveRoomInit";
room_id: string;
}, unknown>>;
readonly liveRoomInit: zod.ZodType<{
methodType: "liveRoomInfo" | "liveRoomInit";
room_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "liveRoomInfo" | "liveRoomInit";
room_id: string;
}, unknown>>;
readonly loginStatus: zod.ZodType<{
methodType: "loginStatus";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "loginStatus";
}, unknown>>;
readonly loginQrcode: zod.ZodType<{
methodType: "loginQrcode";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "loginQrcode";
}, unknown>>;
readonly qrcodeStatus: zod.ZodType<{
methodType: "qrcodeStatus";
qrcode_key: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "qrcodeStatus";
qrcode_key: string;
}, unknown>>;
readonly uploaderTotalViews: zod.ZodType<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userCard" | "userDynamicList" | "uploaderTotalViews" | "userSpaceInfo";
host_mid: number;
}, unknown>>;
readonly avToBv: zod.ZodType<{
methodType: "avToBv";
avid: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "avToBv";
avid: number;
}, unknown>>;
readonly bvToAv: zod.ZodType<{
methodType: "bvToAv";
bvid: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "bvToAv";
bvid: string;
}, unknown>>;
readonly articleContent: zod.ZodType<{
methodType: "articleContent";
id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "articleContent";
id: string;
}, unknown>>;
readonly articleCards: zod.ZodType<{
methodType: "articleCards";
ids: string[] | string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "articleCards";
ids: string[] | string;
}, unknown>>;
readonly articleInfo: zod.ZodType<{
methodType: "articleInfo";
id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "articleInfo";
id: string;
}, unknown>>;
readonly articleListInfo: zod.ZodType<{
methodType: "articleListInfo";
id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "articleListInfo";
id: string;
}, unknown>>;
readonly captchaFromVoucher: zod.ZodType<{
methodType: "captchaFromVoucher";
csrf?: string;
v_voucher: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "captchaFromVoucher";
csrf?: string;
v_voucher: string;
}, unknown>>;
readonly validateCaptcha: zod.ZodType<{
methodType: "validateCaptcha";
csrf?: string;
challenge: string;
token: string;
validate: string;
seccode: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "validateCaptcha";
csrf?: string;
challenge: string;
token: string;
validate: string;
seccode: string;
}, unknown>>;
readonly videoDanmaku: zod.ZodType<{
methodType: "videoDanmaku";
cid: number;
segment_index?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoDanmaku";
cid: number;
segment_index?: number;
}, unknown>>;
};
/** B站方法路由映射 */
declare const BilibiliMethodRoutes: {
readonly videoInfo: "/fetch_one_video";
readonly videoStream: "/fetch_video_playurl";
readonly comments: "/fetch_work_comments";
readonly commentReplies: "/fetch_comment_reply";
readonly userCard: "/fetch_user_profile";
readonly userDynamicList: "/fetch_user_dynamic";
readonly userSpaceInfo: "/fetch_user_space_info";
readonly emojiList: "/fetch_emoji_list";
readonly bangumiInfo: "/fetch_bangumi_video_info";
readonly bangumiStream: "/fetch_bangumi_video_playurl";
readonly dynamicDetail: "/fetch_dynamic_info";
readonly dynamicCard: "/fetch_dynamic_card";
readonly liveRoomInfo: "/fetch_live_room_detail";
readonly liveRoomInit: "/fetch_liveroom_def";
readonly loginStatus: "/login_basic_info";
readonly loginQrcode: "/new_login_qrcode";
readonly qrcodeStatus: "/check_qrcode";
readonly uploaderTotalViews: "/fetch_user_full_view";
readonly avToBv: "/av_to_bv";
readonly bvToAv: "/bv_to_av";
readonly articleContent: "/fetch_article_content";
readonly articleCards: "/fetch_article_card";
readonly articleInfo: "/fetch_article_info";
readonly articleListInfo: "/fetch_column_info";
readonly captchaFromVoucher: "/apply_captcha";
readonly validateCaptcha: "/validate_captcha";
readonly videoDanmaku: "/fetch_danmaku";
};
/** B站方法类型 */
type BilibiliMethodType = keyof typeof BilibiliValidationSchemas;
//#endregion
//#region src/types/DouyinAPIParams.d.ts
/**
* 抖音 API 参数类型定义
*
* 定义所有抖音 API 方法的参数接口和类型映射
*
* @module types/DouyinAPIParams
*/
/**
* 抖音 API 方法参数映射接口
*
* 每个键对应一种 API 方法,值为该方法所需的参数接口
*/
interface DouyinMethodOptionsMap {
/** 获取指定评论的回复 */
CommentReplyParams: {
methodType: 'commentReplies'; /** 视频ID */
aweme_id: string; /** 评论ID */
comment_id: string;
/**
* 获取的评论数量
* 默认情况下,如果指定的数量不足,则获取实际的评论数量。
* @defaultValue 5
*/
number?: number;
/**
* 游标,作用类似于翻页,根据上一次评论数量递增
* @defaultValue 0
*/
cursor?: number;
};
/** 获取用户相关数据 */
UserParams: {
methodType: 'userProfile'; /** 用户ID */
sec_uid: string;
};
/** 获取用户列表数据(视频列表、喜欢列表、推荐列表) */
UserListParams: {
methodType: 'userVideoList' | 'userFavoriteList' | 'userRecommendList'; /** 用户ID */
sec_uid: string;
/**
* 获取的数量
* @defaultValue 18
*/
number?: number; /** 游标,用于获取下一页,不用填。 */
max_cursor?: string;
};
/** 获取作品数据 */
WorkParams: {
methodType: 'videoWork' | 'imageAlbumWork' | 'slidesWork' | 'parseWork' | 'textWork'; /** 视频ID、图集ID、合辑ID */
aweme_id: string;
};
/** 获取评论数据 */
CommentParams: {
methodType: 'comments'; /** 视频ID */
aweme_id: string;
/**
* 获取的评论数量
* 默认情况下,如果指定的数量不足,则获取实际的评论数量。
* @defaultValue 50
*/
number?: number;
/**
* 游标,作用类似于翻页,根据上一次评论数量递增
* @defaultValue 0
*/
cursor?: number;
};
/** 获取音乐数据 */
MusicParams: {
methodType: 'musicInfo'; /** 音乐ID */
music_id: string;
};
/** 获取直播间信息 */
LiveRoomParams: {
methodType: 'liveRoomInfo'; /** 直播间ID,可从用户主页信息信息响应中的room_id_str值取得 */
room_id: string; /** 直播间真实房间号(可通过live.douyin.com/{web_rid}直接访问直播间),可在在用户主页信息响应中的room_data中获取 */
web_rid: string;
};
/** 申请登录二维码 */
QrcodeParams: {
methodType: 'loginQrcode'; /** fp指纹 */
verify_fp: string;
};
/** 获取热点词数据 */
HotWordsParams: {
methodType: 'suggestWords'; /** 搜索词 */
query: string;
};
/** 搜索数据 */
SearchParams: {
methodType: 'search'; /** 搜索词 */
query: string;
/**
* 搜索类型
* @default 'general'
*/
type?: 'general' | 'user' | 'video';
/**
* 搜索数量
* @default 10
*/
number?: number; /** 上次搜索的游标值 */
search_id?: string;
};
/** 获取表情列表 */
EmojiListParams: {
methodType: 'emojiList';
};
/** 获取动态表情数据 */
EmojiProParams: {
methodType: 'dynamicEmojiList';
};
/** 获取弹幕数据 */
DanmakuParams: {
methodType: 'danmakuList'; /** 视频ID */
aweme_id: string;
/**
* 弹幕查询的开始时间(毫秒)
* 例如:设置为5000表示从视频第5秒开始获取弹幕
* 不设置则从视频开头(0秒)开始获取
* @default 0
*/
start_time?: number;
/**
* 弹幕查询的结束时间(毫秒)
* 例如:设置为10000表示获取到视频第10秒的弹幕
* 不设置则获取到视频结束
*/
end_time?: number; /** 视频总时长 */
duration: number;
};
/** 获取视频作品数据 */
VideoWorkParams: {
methodType: 'videoWork'; /** 视频ID */
aweme_id: string;
};
/** 获取图集作品数据 */
ImageAlbumWorkParams: {
methodType: 'imageAlbumWork'; /** 图集ID */
aweme_id: string;
};
/** 获取合辑作品数据 */
SlidesWorkParams: {
methodType: 'slidesWork'; /** 合辑ID */
aweme_id: string;
};
}
/**
* 抖音方法类型到参数的映射
*
* 用于根据 methodType 字符串获取对应的参数类型
*/
type DouyinMethodOptMap = {
textWork: DouyinMethodOptionsMap['WorkParams'];
videoWork: DouyinMethodOptionsMap['WorkParams'];
imageAlbumWork: DouyinMethodOptionsMap['WorkParams'];
slidesWork: DouyinMethodOptionsMap['WorkParams'];
parseWork: DouyinMethodOptionsMap['WorkParams'];
comments: DouyinMethodOptionsMap['CommentParams'];
userProfile: DouyinMethodOptionsMap['UserParams'];
userVideoList: DouyinMethodOptionsMap['UserListParams'];
userFavoriteList: DouyinMethodOptionsMap['UserListParams'];
userRecommendList: DouyinMethodOptionsMap['UserListParams'];
suggestWords: DouyinMethodOptionsMap['HotWordsParams'];
search: DouyinMethodOptionsMap['SearchParams'];
musicInfo: DouyinMethodOptionsMap['MusicParams'];
liveRoomInfo: DouyinMethodOptionsMap['LiveRoomParams'];
loginQrcode: DouyinMethodOptionsMap['QrcodeParams'];
emojiList: DouyinMethodOptionsMap['EmojiListParams'];
dynamicEmojiList: DouyinMethodOptionsMap['EmojiProParams'];
commentReplies: DouyinMethodOptionsMap['CommentReplyParams'];
danmakuList: DouyinMethodOptionsMap['DanmakuParams'];
};
//#endregion
//#region src/validation/douyin.d.ts
/** 作品参数验证 */
declare const DouyinWorkParamsSchema: zod.ZodType<DouyinMethodOptionsMap['WorkParams']>;
/** 评论参数验证 */
declare const DouyinCommentParamsSchema: zod.ZodType<DouyinMethodOptionsMap['CommentParams']>;
/** 热点词参数验证 */
declare const DouyinHotWordsParamsSchema: zod.ZodType<DouyinMethodOptionsMap['HotWordsParams']>;
/** 搜索参数验证 */
declare const DouyinSearchParamsSchema: zod.ZodType<DouyinMethodOptionsMap['SearchParams']>;
/** 评论回复参数验证 */
declare const DouyinCommentReplyParamsSchema: zod.ZodType<DouyinMethodOptionsMap['CommentReplyParams']>;
/** 用户参数验证 */
declare const DouyinUserParamsSchema: zod.ZodType<DouyinMethodOptionsMap['UserParams']>;
/** 用户列表参数验证(视频列表、喜欢列表、推荐列表) */
declare const DouyinUserListParamsSchema: zod.ZodType<DouyinMethodOptionsMap['UserListParams']>;
/** 音乐参数验证 */
declare const DouyinMusicParamsSchema: zod.ZodType<DouyinMethodOptionsMap['MusicParams']>;
/** 直播间参数验证 */
declare const DouyinLiveRoomParamsSchema: zod.ZodType<DouyinMethodOptionsMap['LiveRoomParams']>;
/** 二维码参数验证 */
declare const DouyinQrcodeParamsSchema: zod.ZodType<DouyinMethodOptionsMap['QrcodeParams']>;
/** 表情列表参数验证 */
declare const DouyinEmojiListParamsSchema: zod.ZodType<DouyinMethodOptionsMap['EmojiListParams']>;
/** 动态表情参数验证 */
declare const DouyinEmojiProParamsSchema: zod.ZodType<DouyinMethodOptionsMap['EmojiProParams']>;
/** 弹幕参数验证 */
declare const DouyinDanmakuParamsSchema: zod.ZodType<DouyinMethodOptionsMap['DanmakuParams']>;
/** 抖音参数验证模式映射 */
declare const DouyinValidationSchemas: {
readonly textWork: zod.ZodType<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown>>;
readonly parseWork: zod.ZodType<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown>>;
readonly videoWork: zod.ZodType<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown>>;
readonly imageAlbumWork: zod.ZodType<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown>>;
readonly slidesWork: zod.ZodType<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork" | "imageAlbumWork" | "slidesWork" | "parseWork" | "textWork";
aweme_id: string;
}, unknown>>;
readonly comments: zod.ZodType<{
methodType: "comments";
aweme_id: string;
number?: number;
cursor?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "comments";
aweme_id: string;
number?: number;
cursor?: number;
}, unknown>>;
readonly userProfile: zod.ZodType<{
methodType: "userProfile";
sec_uid: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userProfile";
sec_uid: string;
}, unknown>>;
readonly userVideoList: zod.ZodType<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown>>;
readonly userFavoriteList: zod.ZodType<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown>>;
readonly userRecommendList: zod.ZodType<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userVideoList" | "userFavoriteList" | "userRecommendList";
sec_uid: string;
number?: number;
max_cursor?: string;
}, unknown>>;
readonly suggestWords: zod.ZodType<{
methodType: "suggestWords";
query: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "suggestWords";
query: string;
}, unknown>>;
readonly search: zod.ZodType<{
methodType: "search";
query: string;
type?: "general" | "user" | "video";
number?: number;
search_id?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "search";
query: string;
type?: "general" | "user" | "video";
number?: number;
search_id?: string;
}, unknown>>;
readonly musicInfo: zod.ZodType<{
methodType: "musicInfo";
music_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "musicInfo";
music_id: string;
}, unknown>>;
readonly liveRoomInfo: zod.ZodType<{
methodType: "liveRoomInfo";
room_id: string;
web_rid: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "liveRoomInfo";
room_id: string;
web_rid: string;
}, unknown>>;
readonly loginQrcode: zod.ZodType<{
methodType: "loginQrcode";
verify_fp: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "loginQrcode";
verify_fp: string;
}, unknown>>;
readonly emojiList: zod.ZodType<{
methodType: "emojiList";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "emojiList";
}, unknown>>;
readonly dynamicEmojiList: zod.ZodType<{
methodType: "dynamicEmojiList";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "dynamicEmojiList";
}, unknown>>;
readonly commentReplies: zod.ZodType<{
methodType: "commentReplies";
aweme_id: string;
comment_id: string;
number?: number;
cursor?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "commentReplies";
aweme_id: string;
comment_id: string;
number?: number;
cursor?: number;
}, unknown>>;
readonly danmakuList: zod.ZodType<{
methodType: "danmakuList";
aweme_id: string;
start_time?: number;
end_time?: number;
duration: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "danmakuList";
aweme_id: string;
start_time?: number;
end_time?: number;
duration: number;
}, unknown>>;
};
/** 抖音方法路由映射 */
declare const DouyinMethodRoutes: {
readonly parseWork: "/fetch_one_work";
readonly textWork: "/fetch_one_work";
readonly videoWork: "/fetch_one_work";
readonly imageAlbumWork: "/fetch_one_work";
readonly slidesWork: "/fetch_one_work";
readonly comments: "/fetch_work_comments";
readonly commentReplies: "/fetch_video_comment_replies";
readonly userProfile: "/fetch_user_info";
readonly userVideoList: "/fetch_user_post_videos";
readonly userFavoriteList: "/fetch_user_favorite_list";
readonly userRecommendList: "/fetch_user_recommend_list";
readonly search: "/fetch_search_info";
readonly suggestWords: "/fetch_suggest_words";
readonly musicInfo: "/fetch_music_work";
readonly emojiList: "/fetch_emoji_list";
readonly dynamicEmojiList: "/fetch_emoji_pro_list";
readonly liveRoomInfo: "/fetch_user_live_videos";
readonly danmakuList: "/fetch_work_danmaku";
readonly loginQrcode: "/fetch_login_qrcode";
};
/** 抖音方法类型 */
type DouyinMethodType = keyof typeof DouyinValidationSchemas;
//#endregion
//#region src/types/KuaishouAPIParams.d.ts
/**
* 快手 API 方法参数映射
*/
interface KuaishouMethodOptionsMap {
VideoInfoParams: {
methodType: 'videoWork'; /** 作品ID */
photoId: string;
};
CommentParams: {
methodType: 'comments'; /** 作品ID */
photoId: string;
};
UserProfileParams: {
methodType: 'userProfile'; /** 用户主页 principalId,可直接取 profile 页 URL 末段 */
principalId: string;
};
UserWorkListParams: {
methodType: 'userWorkList'; /** 用户主页 principalId,可直接取 profile 页 URL 末段 */
principalId: string; /** 分页游标;为空时请求首屏作品列表 */
pcursor?: string; /** 每页数量,默认 12 */
count?: number;
};
LiveRoomInfoParams: {
methodType: 'liveRoomInfo'; /** 直播间 principalId,可直接取 /u/{principalId} URL 末段 */
principalId: string;
};
EmojiListParams: {
methodType: 'emojiList';
};
}
/**
* 快手方法类型到参数的映射
*/
type KuaishouMethodOptMap = {
videoWork: KuaishouMethodOptionsMap['VideoInfoParams'];
comments: KuaishouMethodOptionsMap['CommentParams'];
userProfile: KuaishouMethodOptionsMap['UserProfileParams'];
userWorkList: KuaishouMethodOptionsMap['UserWorkListParams'];
liveRoomInfo: KuaishouMethodOptionsMap['LiveRoomInfoParams'];
emojiList: KuaishouMethodOptionsMap['EmojiListParams'];
};
//#endregion
//#region src/validation/kuaishou.d.ts
/**
* 快手视频参数验证模式
*/
declare const KuaishouVideoParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['VideoInfoParams']>;
/**
* 快手评论参数验证模式
*/
declare const KuaishouCommentParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['CommentParams']>;
/**
* 快手用户主页参数验证模式
*/
declare const KuaishouUserProfileParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['UserProfileParams']>;
/**
* 快手用户作品列表参数验证模式
*/
declare const KuaishouUserWorkListParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['UserWorkListParams']>;
/**
* 快手直播间信息参数验证模式
*/
declare const KuaishouLiveRoomInfoParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['LiveRoomInfoParams']>;
/**
* 快手表情参数验证模式
*/
declare const KuaishouEmojiParamsSchema: zod.ZodType<KuaishouMethodOptionsMap['EmojiListParams']>;
/**
* 快手参数验证模式映射
*/
declare const KuaishouValidationSchemas: {
readonly videoWork: zod.ZodType<{
methodType: "videoWork";
photoId: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "videoWork";
photoId: string;
}, unknown>>;
readonly comments: zod.ZodType<{
methodType: "comments";
photoId: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "comments";
photoId: string;
}, unknown>>;
readonly userProfile: zod.ZodType<{
methodType: "userProfile";
principalId: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userProfile";
principalId: string;
}, unknown>>;
readonly userWorkList: zod.ZodType<{
methodType: "userWorkList";
principalId: string;
pcursor?: string;
count?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userWorkList";
principalId: string;
pcursor?: string;
count?: number;
}, unknown>>;
readonly liveRoomInfo: zod.ZodType<{
methodType: "liveRoomInfo";
principalId: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "liveRoomInfo";
principalId: string;
}, unknown>>;
readonly emojiList: zod.ZodType<{
methodType: "emojiList";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "emojiList";
}, unknown>>;
};
/**
* 快手方法路由映射
*/
declare const KuaishouMethodRoutes: {
readonly videoWork: "/fetch_one_work";
readonly comments: "/fetch_work_comments";
readonly userProfile: "/fetch_user_profile";
readonly userWorkList: "/fetch_user_work_list";
readonly liveRoomInfo: "/fetch_live_room_info";
readonly emojiList: "/fetch_emoji_list";
};
type KuaishouMethodType = keyof typeof KuaishouValidationSchemas;
//#endregion
//#region src/types/XiaohongshuAPIParams.d.ts
/**
* 小红书 API 方法参数映射
*/
interface XiaohongshuMethodOptionsMap {
HomeFeedParams: {
methodType: 'homeFeed'; /** 游标分数,用于分页 */
cursor_score?: string; /** 每次请求的数量 */
num?: number; /** 刷新类型 */
refresh_type?: number; /** 笔记索引 */
note_index?: number; /** 分类 */
category?: string; /** 搜索关键词 */
search_key?: string;
};
NoteParams: {
methodType: 'noteDetail'; /** 笔记ID */
note_id: string; /** 反爬的 X-Sec-Token 可从web地址中获取 */
xsec_token: string;
};
CommentParams: {
methodType: 'noteComments'; /** 笔记ID */
note_id: string; /** 游标 */
cursor?: string; /** 反爬的 X-Sec-Token 可从web地址中获取 */
xsec_token: string;
};
UserParams: {
methodType: 'userProfile'; /** 用户ID */
user_id: string;
};
UserNoteParams: {
methodType: 'userNoteList'; /** 用户ID */
user_id: string; /** 上一页最后一条笔记的ID */
cursor?: string;
/**
* 每次请求的数量
* @default 30
*/
num?: number;
};
EmojiListParams: {
methodType: 'emojiList';
};
SearchNoteParams: {
methodType: 'searchNotes'; /** 搜索关键词 */
keyword: string; /** 页码 */
page?: number; /** 每页数量 */
page_size?: number; /** 排序类型 */
sort?: SearchSortType; /** 笔记类型 */
note_type?: SearchNoteType;
};
}
/**
* 小红书方法类型到参数的映射
*/
type XiaohongshuMethodOptMap = {
homeFeed: XiaohongshuMethodOptionsMap['HomeFeedParams'];
noteDetail: XiaohongshuMethodOptionsMap['NoteParams'];
noteComments: XiaohongshuMethodOptionsMap['CommentParams'];
userProfile: XiaohongshuMethodOptionsMap['UserParams'];
userNoteList: XiaohongshuMethodOptionsMap['UserNoteParams'];
emojiList: XiaohongshuMethodOptionsMap['EmojiListParams'];
searchNotes: XiaohongshuMethodOptionsMap['SearchNoteParams'];
};
//#endregion
//#region src/platform/xiaohongshu/API.d.ts
/**
* 根据 XiaohongshuMethodOptionsMap 创建一个新的类型,去除每个字段中的 methodType
*/
type XiaohongshuMethodOptionsWithoutMethodType = { [K in keyof XiaohongshuMethodOptionsMap]: Omit<XiaohongshuMethodOptionsMap[K], 'methodType'> };
/**
* 搜索排序类型枚举
*/
declare enum SearchSortType {
/**
* 默认排序
*/
GENERAL = "general",
/**
* 最受欢迎(按热度降序)
*/
MOST_POPULAR = "popularity_descending",
/**
* 最新发布(按时间降序)
*/
LATEST = "time_descending"
}
/**
* 搜索笔记类型枚举
*/
declare enum SearchNoteType {
/**
* 默认(全部类型)
*/
ALL = 0,
/**
* 仅视频
*/
VIDEO = 1,
/**
* 仅图片
*/
IMAGE = 2
}
/**
* 小红书API地址配置
*/
declare const xiaohongshuApiUrls: {
/**
* 获取首页推荐数据的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
homeFeed(data?: XiaohongshuMethodOptionsWithoutMethodType["HomeFeedParams"]): {
apiPath: string;
Url: string;
Body: {
cursor_score: string;
num: number;
refresh_type: number;
note_index: number;
category: string;
search_key: string;
image_formats: string[];
};
};
/**
* 获取单个笔记数据的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
noteDetail(data: XiaohongshuMethodOptionsWithoutMethodType["NoteParams"]): {
apiPath: string;
Url: string;
Body: {
source_note_id: string;
image_formats: string[];
extra: {
need_body_topic: string;
};
xsec_source: string;
xsec_token: string;
};
};
/**
* 获取评论数据的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
noteComments(data: XiaohongshuMethodOptionsWithoutMethodType["CommentParams"]): {
apiPath: string;
Url: string;
};
/**
* 获取用户数据的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
userProfile(data: XiaohongshuMethodOptionsWithoutMethodType["UserParams"]): {
apiPath: string;
Url: string;
};
/**
* 获取用户笔记数据的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
userNoteList(data: XiaohongshuMethodOptionsWithoutMethodType["UserNoteParams"]): {
apiPath: string;
Url: string;
};
/**
* 获取笔记表情列表的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
emojiList(data: XiaohongshuMethodOptionsWithoutMethodType["EmojiListParams"]): {
apiPath: string;
Url: string;
};
/**
* 搜索笔记的接口地址
* @param data - 请求参数
* @returns 完整的接口URL
*/
searchNotes(data: XiaohongshuMethodOptionsWithoutMethodType["SearchNoteParams"]): {
apiPath: string;
Body: {
keyword: string;
page: number;
page_size: number;
sort: SearchSortType;
note_type: SearchNoteType;
search_id: string;
image_formats: string[];
};
Url: string;
};
};
//#endregion
//#region src/validation/xiaohongshu.d.ts
/**
* 小红书验证模式映射
*/
declare const XiaohongshuValidationSchemas: {
readonly homeFeed: zod.ZodType<{
methodType: "homeFeed";
cursor_score?: string;
num?: number;
refresh_type?: number;
note_index?: number;
category?: string;
search_key?: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "homeFeed";
cursor_score?: string;
num?: number;
refresh_type?: number;
note_index?: number;
category?: string;
search_key?: string;
}, unknown>>;
readonly noteDetail: zod.ZodType<{
methodType: "noteDetail";
note_id: string;
xsec_token: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "noteDetail";
note_id: string;
xsec_token: string;
}, unknown>>;
readonly noteComments: zod.ZodType<{
methodType: "noteComments";
note_id: string;
cursor?: string;
xsec_token: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "noteComments";
note_id: string;
cursor?: string;
xsec_token: string;
}, unknown>>;
readonly userProfile: zod.ZodType<{
methodType: "userProfile";
user_id: string;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userProfile";
user_id: string;
}, unknown>>;
readonly userNoteList: zod.ZodType<{
methodType: "userNoteList";
user_id: string;
cursor?: string;
num?: number;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "userNoteList";
user_id: string;
cursor?: string;
num?: number;
}, unknown>>;
readonly emojiList: zod.ZodType<{
methodType: "emojiList";
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "emojiList";
}, unknown>>;
readonly searchNotes: zod.ZodType<{
methodType: "searchNotes";
keyword: string;
page?: number;
page_size?: number;
sort?: SearchSortType;
note_type?: SearchNoteType;
}, unknown, zod.core.$ZodTypeInternals<{
methodType: "searchNotes";
keyword: string;
page?: number;
page_size?: number;
sort?: SearchSortType;
note_type?: SearchNoteType;
}, unknown>>;
};
/**
* 小红书方法路由映射
*/
declare const XiaohongshuMethodRoutes: {
readonly homeFeed: "/fetch_home_feed";
readonly noteDetail: "/fetch_one_note";
readonly noteComments: "/fetch_note_comments";
readonly userProfile: "/fetch_user_profile";
readonly userNoteList: "/fetch_user_notes";
readonly emojiList: "/fetch_emoji_list";
readonly searchNotes: "/fetch_search_notes";
};
type XiaohongshuMethodType = keyof typeof XiaohongshuValidationSchemas;
//#endregion
//#region src/types/NetworksConfigType.d.ts
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;
/**
* 接口响应数据的 code 属性
* 个别平台可能不存在
*/
responseCode?: 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"
}
/** 小红书平台API错误码 */
declare enum xiaohongshuAPIErrorCode {
/** Cookie无效或已过期 */
COOKIE = "INVALID_COOKIE",
/** 未知错误 */
UNKNOWN = "UNKNOWN_ERROR",
/** 非法请求 */
ILLEGAL_REQUEST = 500,
/** 检测到帐号异常,请稍后重试 */
ACCOUNT_ABNORMAL = 300011,
/** 网络连接异常,请检查网络设置后重试 */
NETWORK_ERROR = 300012,
/** 访问频次异常,请勿频繁操作 */
FREQUENCY_ERROR = 300013,
/** 浏览器异常,请尝试更换浏览器后重试 */
BROWSER_ERROR = 300015
}
//#endregion
//#region src/validation/index.d.ts
/**
* 基础响应类型
*/
type BaseResponse = {
/** 响应消息 */message: string; /** 响应状态码 */
code: number;
};
/**
* 成功响应类型
* @template T - 响应数据的类型,默认为any
*/
type SuccessResult<T = any> = BaseResponse & {
/** 响应状态 */success: true; /** 响应数据,类型由泛型 T 决定 */
data: T; /** 成功响应时错误信息为空 */
error: never;
};
/**
* 错误响应类型
*/
type ErrorResult = BaseResponse & {
/** 响应状态 */success: false; /** API 错误类型 */
error: APIErrorType; /** 错误响应时数据为空 */
data: never;
};
/**
* 通用API响应类型
* @template T - 成功响应数据的类型,默认为any
*/
type Result<T> = SuccessResult<T> | ErrorResult;
/**
* 通用API响应类型
* @template T - 成功响应数据的类型,默认为any
* @deprecated 请使用 Result<T> 替代
*/
type ApiResponse<T> = Result<T>;
/**
* 验证抖音参数
* @param methodType - 抖音方法类型
* @param params - 待验证的参数
* @returns 验证后的参数,符合原始API期望的类型
*/
declare const validateDouyinParams: <T extends DouyinMethodType>(methodType: T, params: unknown) => zod.infer<(typeof DouyinValidationSchemas)[T]>;
/**
* 验证哔哩哔哩参数
* @param methodType - 哔哩哔哩方法类型
* @param params - 待验证的参数
* @returns 验证后的参数,符合原始API期望的类型
*/
declare const validateBilibiliParams: <T extends BilibiliMethodType>(methodType: T, params: unknown) => zod.infer<(typeof BilibiliValidationSchemas)[T]>;
/**
* 验证快手参数
* @param methodType - 快手方法类型
* @param params - 待验证的参数
* @returns 验证后的参数,符合原始API期望的类型
*/
declare const validateKuaishouParams: <T extends KuaishouMethodType>(methodType: T, params: unknown) => zod.infer<(typeof KuaishouValidationSchemas)[T]>;
/**
* 验证小红书参数
* @param methodType - 小红书方法类型
* @param params - 待验证的参数
* @returns 验证后的参数
*/
declare const validateXiaohongshuParams: <T ex