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

快速上手

三步上手:创建客户端、获取数据、按 success 读取返回值

快速上手

安装完成后,从创建客户端到获取第一条数据,大致分三步,下面逐步说明。

第一步:创建客户端

amagi() 接收各平台的 Cookie,返回一个客户端实例。此后的所有请求都通过它发起,无需重复传入 Cookie:

import  from '@ikenxuan/amagi'

const  = ({
  : {
    : 'SESSDATA=xxx; bili_jct=yyy; ...',
    : 'ttwid=...; ...',
    : 'did=...; ...',
    : 'a1=...; ...'
  },
  : {
    // 如需自定义请求头、超时、代理,在此配置(可选)
    : { 'User-Agent': 'Mozilla/5.0 ...' }
  }
})

关于 Cookie 的获取:登录对应平台的网页版,在浏览器开发者工具中完整复制请求头里的 Cookie。用不到的平台留空字符串即可,无需四个平台全部填写。

第二步:获取数据

通过 client.<平台>.fetcher 调用对应的方法。下面四个平台各举一例,均为获取一条作品或视频的详情:

// 获取视频信息
const video = await client.bilibili.fetcher.fetchVideoInfo({
  bvid: 'BV1xx411c7mD'
})

if (video.success) {
  console.log(video.data)
}

// 获取评论
const comments = await client.bilibili.fetcher.fetchComments({
  oid: '170001',
  type: 1,
  number: 20
})

第三步(可选):启动 HTTP 服务

如果不想在代码中直接调用,而是希望通过 HTTP 请求获取数据(例如供其他语言或进程使用),在客户端上调用 startServer,即可将其启动为本地服务:

import  from '@ikenxuan/amagi'

({
  : {
    : 'SESSDATA=xxx; ...',
    : 'ttwid=...; ...',
    : 'did=...; ...',
    : 'a1=...; ...'
  }
}).(4567)

// 在浏览器中打开 http://localhost:4567/ 查看接口列表
// 在线调试:https://amagi.apifox.cn

该服务默认不带鉴权,任何能访问此端口的人都可以使用你的 Cookie 发起请求。请仅在本机使用,或在其前自行添加一层访问控制,不要直接暴露到公网。

不创建客户端的调用方式

如果只是临时调用少数几个接口,不想先创建客户端,可以直接使用静态方法,代价是每次都要手动传入 Cookie:

import  from '@ikenxuan/amagi'

const  = await ..({ : 'BV1xx411c7mD' }, 'SESSDATA=...')

如何读取返回值

每个方法都返回同一种结构。先判断 result.success:为 true 时,result.data 即为数据;为 false 时,result.error 是错误详情。在 TypeScript 中,只有先判断过 success 才能访问 data,因此这个 if 判断不可省略:

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

if (.) {
  .data
AmagiSuccess.data: VideoInfo_V0

端点声明的返回类型

} else { // 失败分支没有 data,只有 error(kind / code / message 等) .(.., ..) }

类型是根据真实响应逐一编写的,偶尔会滞后于平台新增的字段。即使遇到类型中未声明的字段,同样可以读取(读取结果为 unknown,需自行判断后再使用),也可以用泛型将返回类型替换为自定义类型。这几种写法在响应类型中有详细说明。

记录请求日志

如果想知道每次请求发往何处、耗时多少、是否发生重试,可以通过客户端的事件总线订阅,调用 client.on 即可。每条事件都带有 meta,上述信息都在其中:

// 一次调用成功
.('api:success', () => {
  .(`[${..}] ${..} 成功,耗时 ${..}ms`)
})

// 一次调用失败:error 中包含错误的类型与原因
.('api:error', () => {
  .(`[${..}] ${..} 失败: ${..}`)
})

// 底层每发出一条 HTTP 请求都会触发一次
.('http:request', () => {
  .(.., .., ..)
})

包顶层还导出了一个 amagiEvents,那是为 v6 旧代码保留的另一条总线,接收不到 client.on 上的事件,请勿将两者混淆。完整的事件名与两条总线的分工见事件系统。

下一步

最后更新于 2026-09-28

On this page