当前浏览的是 v7 预览版文档(v7 尚未正式发布,API 可能随版本调整)。查看对应的 v6 正式版文档
@ikenxuan/amagi

抖音 SDK 方法

抖音平台的 26 个 SDK 方法,由端点注册表派生

本页 26 个方法由端点注册表生成:参数表、摘要与废弃标记都取自 端点声明。同一批端点的 HTTP 形态(路径、query 参数、响应信封、在线调用)见 HTTP 端点参考。

调用形式与单次请求配置

Client 上的绑定 Fetcher 是 client.<平台>.fetcher.<方法>(options, requestConfig?):cookie 已随 Client 绑好,第二个参数只作用于当前这一次调用,并与 Client 的实例级请求配置合并 —— 单次配置优先,headers 单独合并。

直接导出的裸 Fetcher 是 <平台>Fetcher.<方法>(options, cookie?, requestConfig?):没有实例级配置,cookie 按次传,第三个参数直接作用于当前请求。amagi.<平台>Fetcher 与同名的命名导出(import { bilibiliFetcher } from '@ikenxuan/amagi')是同一个对象。

两种形态都由端点注册表派生、走同一条执行管线、返回同一种信封,所以本页列出的方法名与参数对两者都成立。

requestConfig.headers 里任意大小写的 Cookie(Cookie / cookie / COOKIE)都会替换本次调用实际使用的 cookie:绑定形态覆盖 Client 上绑定的那份,裸 Fetcher 形态覆盖第二个参数。这次调用用哪份 Cookie,只写这一处就够。

匿名调一次:

const  = await ...(
  { : '7123456789' },
  { : { : '' } }
)

它只影响这一次请求,不改 Client 实例,也不影响同一实例后续的调用。

v7 的 Cookie 头按大小写不敏感匹配,覆盖只写在 headers 一处即可。

读取返回值:取 data

方法永不抛异常,返回的是信封:成功支有 data,失败支有 error,两支都有 message 与 meta,顶层没有 code。本页所有示例统一用 if (result.success) 收窄之后再读 result.data —— 四种读法里只有它既不必额外 import,收窄后的 data 又不带 | undefined:

读法拿到的 data
if (result.success)T(本页示例统一用这种)
直接读 result.data(不收窄)T | undefined
list.filter(isSuccess)T(数组回调里没有 if 可用)
unwrap(result)T,失败时抛 AmagiThrownError

四种读法的完整说明、失败分支的字段与三条逃生舱见响应类型。

大整数 ID 与响应类型

默认 JSON 解析会把超出 JavaScript 安全整数范围的裸整数保留为十进制字符串,防止直播间、作品等 ID 被四舍五入。普通安全整数、浮点数和指数写法保持原样;显式文本响应和自定义 transformResponse 仍由调用方控制。响应 ID 的类型因此可能是 string | number,需要统一存储时可用 String(id);不要先调用 Number() 再拼接请求。

新增端点只声明已有证据支持的响应字段;缺少完整成功响应样本的字段使用 unknown,使用前应检查对象、数组或字符串等实际结构。

普通 Fetcher 只自动规范化 Cookie。登录态探测与游客凭据申请通过显式的 douyinUtils.credentials 工具调用;不会在普通请求中静默切换账号。工具参数、缓存和游客握手说明见工具集。

本页之外:自定义请求

本页是已收录的端点方法。要请求 amagi 尚未收录的抖音接口,用 client.douyin.request(默认签名器 a-bogus,自动带上实例 ck 并走同一套 judge / 重试 / 事件)。URL 由 client.douyin.apiUrls 构造 —— 抖音那份全部返回 URL 字符串:

const  = ...({ : '1234567890123456789' })
const  = await ...()

详见自定义请求。

Fetcher 方法

parseWork

聚合解析作品数据(自动识别类型)。端点 douyin.parseWork,同一端点的 HTTP 形态。

同一个作品 ID 可能是视频、图集、合辑、文字或文章,这条自动识别形态并返回对应结构。

参数类型必填说明
aweme_idstring是作品 ID
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

推荐用 parseWork:它自动识别作品类型(视频 / 图集 / 合辑)并返回对应数据,不必先猜类型再挑方法。

fetchVideoWork

视频作品详细信息。端点 douyin.videoWork,同一端点的 HTTP 形态。

已知是视频作品时用这条;形态不确定时先用 parseWork 自动识别。

参数类型必填说明
aweme_idstring是作品 ID
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

fetchImageAlbumWork

图集作品详细信息。端点 douyin.imageAlbumWork,同一端点的 HTTP 形态。

已知是图集作品时用这条;形态不确定时先用 parseWork 自动识别。

参数类型必填说明
aweme_idstring是作品 ID
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

fetchSlidesWork

合辑作品详细信息。端点 douyin.slidesWork,同一端点的 HTTP 形态。

已知是合辑(幻灯片/图文)时用这条;形态不确定时先用 parseWork。

参数类型必填说明
aweme_idstring是作品 ID
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

fetchTextWork

文字作品详细信息。端点 douyin.textWork,同一端点的 HTTP 形态。

已知是文字作品时用这条;形态不确定时先用 parseWork 自动识别。

参数类型必填说明
aweme_idstring是作品 ID
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

fetchWorkComments

作品评论列表。端点 douyin.comments,同一端点的 HTTP 形态。

作品的一级评论列表;某条评论下的回复用 commentReplies。

支持声明式翻页:用 number 指定需要的条数,单页上限 50 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
aweme_idstring是作品 ID
numbernumber否目标条数,默认 50
const  = await ...({
  : '1234567890123456789'
})

if (.) {
  .(.)
}

fetchCommentReplies

指定评论的回复列表。端点 douyin.commentReplies,同一端点的 HTTP 形态。

某条根评论下的回复列表,单页仅 3 条;整个评论区用 comments。

支持声明式翻页:用 number 指定需要的条数,单页上限 3 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
aweme_idstring是作品 ID
comment_idstring是要取回复的评论 ID
numbernumber否目标条数,默认 3
const  = await ...({
  : '1234567890123456789',
  : '7123456789012345678'
})

if (.) {
  .(.)
}

fetchUserProfile

用户主页信息。端点 douyin.userProfile,同一端点的 HTTP 形态。

只认 sec_uid;手里只有抖音号时先用 guestUserInfo 换。

参数类型必填说明
sec_uidstring是用户 sec_uid,主页链接里那段
const  = await ...({
  : 'MS4wLjABAAAAxxxxxxxx'
})

if (.) {
  .(.)
}

fetchUserVideoList

用户主页作品列表。端点 douyin.userVideoList,同一端点的 HTTP 形态。

该用户发布的作品列表;喜欢列表用 userFavoriteList。

支持声明式翻页:用 number 指定需要的条数,单页上限 18 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
sec_uidstring是用户 sec_uid,主页链接里那段
numbernumber否目标条数,默认 18
const  = await ...({
  : 'MS4wLjABAAAAxxxxxxxx'
})

if (.) {
  .(.)
}

fetchUserFavoriteList

用户主页点赞作品列表。端点 douyin.userFavoriteList,同一端点的 HTTP 形态。

该用户点赞过的作品列表;其发布的作品用 userVideoList。

支持声明式翻页:用 number 指定需要的条数,单页上限 18 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
sec_uidstring是用户 sec_uid,主页链接里那段
numbernumber否目标条数,默认 18
const  = await ...({
  : 'MS4wLjABAAAAxxxxxxxx'
})

if (.) {
  .(.)
}

fetchUserRecommendList

用户主页推荐作品列表。端点 douyin.userRecommendList,同一端点的 HTTP 形态。

主页的推荐流作品,不保证是该用户发布的;自己的作品用 userVideoList。

支持声明式翻页:用 number 指定需要的条数,单页上限 18 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
sec_uidstring是用户 sec_uid,主页链接里那段
numbernumber否目标条数,默认 18
const  = await ...({
  : 'MS4wLjABAAAAxxxxxxxx'
})

if (.) {
  .(.)
}

searchContent

搜索结果列表(综合/用户/视频)。端点 douyin.search,同一端点的 HTTP 形态。

搜索结果的形态由 type 决定;响应里 __search_type 标出实际形态。

支持声明式翻页:用 number 指定需要的条数,单页上限 15 条,游标的带入与停止条件由端点声明处理。

参数类型必填默认值说明
querystring是—搜索关键词
type'general' | 'user' | 'video'否'general'搜索类型,默认综合搜索
numbernumber否—目标条数,默认 15
const  = await ...({
  : '关键词'
})

if (.) {
  .(.)
}

fetchSuggestWords

搜索联想词与热点词列表。端点 douyin.suggestWords,同一端点的 HTTP 形态。

按输入前缀返回候选词与热点词;不返回搜索结果,搜索用 search。

参数类型必填说明
querystring是搜索关键词(输入前缀)
const  = await ...({
  : '关键词'
})

if (.) {
  .(.)
}

fetchShortUrl

分享链接转短链接。端点 douyin.shortUrl,同一端点的 HTTP 形态。

把抖音作品分享链接转换成 v.douyin.com 短链;belong=aweme 是能缩短的前提。

参数类型必填默认值说明
targetstring是—需要缩短的分享链接
belongstring否'aweme'短链归属类型,抖音作品固定为 aweme,默认 aweme
const  = await ...({
  : 'https://v.douyin.com/xxxxxxx/'
})

if (.) {
  .(.)
}

target 是要缩短的分享链接,belong 默认 aweme(作品固定用它,缺失会被平台拒绝)。这条不需要 cookie,但必须带签名 —— 与四条免鉴权端点不同,它没有免签退路。成功与失败都回 HTTP 200 + code: 0,所以要看 reason:check failed 表示签名没带或不对(SIGNATURE_REFUSED,换 cookie 无用),not allowed to shorten 表示 belong 不对。同一个 target 多次调用返回同一个短码,不是一次性令牌。

fetchMusicInfo

音乐作品信息。端点 douyin.musicInfo,同一端点的 HTTP 形态。

带 mp3 播放地址与使用量的音乐详情,个别原声不回播放地址时用 musicAwemeList;免鉴权版本用 guestMusicInfo。

参数类型必填说明
music_idstring是音乐 ID(mid)
const  = await ...({
  : '7123456789012345678'
})

if (.) {
  .(.)
}

fetchMusicAwemeList

某条原声下的作品列表。端点 douyin.musicAwemeList,同一端点的 HTTP 形态。

某条原声下的作品列表,只取一页;每条作品的 music 带 mp3 播放地址,musicInfo 没有时从这里取。

参数类型必填说明
music_idstring是原声 ID
numbernumber否本页条数,默认 10
cursornumber否翻页游标,默认 0
const  = await ...({
  : '7123456789012345678'
})

if (.) {
  .(.)
}

fetchMixAweme

合集作品列表。端点 douyin.mixAweme,同一端点的 HTTP 形态。

按 mix_id 获取合集内的作品;mix_id 取自作品详情 mix_info.mix_id,number 为目标条数。

支持声明式翻页:用 number 指定需要的条数,单页上限 20 条,游标的带入与停止条件由端点声明处理。

参数类型必填说明
mix_idstring是合集 ID,取自作品详情 mix_info.mix_id
numbernumber否目标条数,默认 20
const  = await ...({
  : '7123456789012345678'
})

if (.) {
  .(.)
}

mix_id 是合集 ID,不是单条作品的 aweme_id。v7 用 number 表示目标条数,内部每页最多请求 20 条,并按上游 cursor 自动翻页(游标由端点接管,不在调用方签名里)。聚合后的 aweme_list 包含本次收集到的作品,游标与其他元数据取最后一页。

fetchLiveRoomInfo

直播间信息。端点 douyin.liveRoomInfo,同一端点的 HTTP 形态。

按直播间短号返回开播状态、标题与主播信息。

参数类型必填说明
web_ridstring是直播间短号(链接里那段)
const  = await ...({
  : '123456789'
})

if (.) {
  .(.)
}

requestLoginQrcode

登录二维码。端点 douyin.loginQrcode,同一端点的 HTTP 形态。

创建登录二维码,返回二维码内容与票据;扫码后的登录状态不在这条。

参数类型必填说明
verify_fpstring是设备验证指纹
const  = await ...({
  : 'verify_xxx'
})

if (.) {
  .(.)
}

fetchEmojiList

表情列表。端点 douyin.emojiList,同一端点的 HTTP 形态。

返回常规与限时/联名表情的清单;动态表情用 dynamicEmojiList。

无参数。

const  = await ...({})

if (.) {
  .(.)
}

fetchDynamicEmojiList

动态表情列表。端点 douyin.dynamicEmojiList,同一端点的 HTTP 形态。

返回动态表情资源;常规表情列表用 emojiList。

无参数。

const  = await ...({})

if (.) {
  .(.)
}

fetchDanmakuList

作品弹幕列表。端点 douyin.danmakuList,同一端点的 HTTP 形态。

取作品在给定时间区间内的弹幕;不给区间即全片,返回按时间排序。

参数类型必填说明
aweme_idstring是作品 ID
start_timenumber否区间起点(毫秒),默认 0
end_timenumber否区间终点(毫秒),默认取总时长
durationnumber是作品总时长(毫秒),也是默认终点
const  = await ...({
  : '1234567890123456789',
  : 60000
})

if (.) {
  .(.)
}

fetchGuestUserInfo

抖音号转用户信息(免鉴权)。端点 douyin.guestUserInfo,同一端点的 HTTP 形态。

用抖音号精确换 sec_uid;抖音号不存在时返回失败。

参数类型必填说明
unique_idstring是抖音号
const  = await ...({
  : ''
})

if (.) {
  .(.)
}

fetchGuestMusicInfo

原声本体(免鉴权)。端点 douyin.guestMusicInfo,同一端点的 HTTP 形态。

按原声 ID 返回原声详情;这条没有 mp3 播放地址,需要时用 musicInfo。

参数类型必填说明
music_idstring是原声 ID
const  = await ...({
  : '7123456789012345678'
})

if (.) {
  .(.)
}

fetchGuestMusicAwemeList

某条原声下的作品列表(免鉴权)。端点 douyin.guestMusicAwemeList,同一端点的 HTTP 形态。

某条原声下的作品列表,只取一页;只有 aweme_id 可用,详情走 parseWork。

参数类型必填说明
music_idstring是原声 ID
numbernumber否本页条数,默认 10
cursornumber否翻页游标,默认 0
const  = await ...({
  : '7123456789012345678'
})

if (.) {
  .(.)
}

fetchEmojiResourceMeta

表情资源包元信息(免鉴权)。端点 douyin.emojiResourceMeta,同一端点的 HTTP 形态。

返回表情资源包的版本与下载地址;下载与解包由调用方处理。

无参数。

const  = await ...({})

if (.) {
  .(.)
}

v6 的 passport 四方法

requestPassportQrcode / checkPassportQrcode / sendPassportVerifyCode / validatePassportVerifyCode 仍在裸 Fetcher(douyinFetcher)上,且都标了 @deprecated。它们是会话而不是端点 —— 不在端点注册表里,也不在 client.douyin.fetcher 上,所以本页(由注册表派生)不列它们。

新代码请走 v7 的登录会话:client.douyin.login.qrcode() 新建一次扫码会话,client.douyin.login.resume(blob) 从 serialize() 的产物恢复;轮询、退避、超时、二次验证编排都由引擎负责,不用自己拼 passport 的取码与轮询。会话的每一步还会发到实例总线上(session:state / session:success / session:error),见事件系统与项目架构的「会话(登录)」一节。

两条路径的事件总线不是同一条:passport 四方法写的是 v6 全局单例 amagiEvents(api:* / log:debug),client.douyin.login 写的是实例总线 client.events(session:*)。

On this page