@ikenxuan/amagi

v6 迁移指南

从 v5.x 升级到 v6.x 的迁移指南

v6 迁移指南

本文档描述了从 Amagi v5.x 升级到 v6.x 的主要变更和迁移步骤。

主要变更概览

  1. 日志系统重构 - 移除 log4js,改用事件驱动架构
  2. API 方法名英文化 - 新增英文方法名的 Fetcher API
  3. 类型系统增强 - 支持 typeMode: 'strict' 获取严格类型
  4. Fetcher 架构 - 新增 IBoundXxxFetcher 接口,支持绑定 Cookie

安装

npm install @ikenxuan/amagi@^6.0.0

日志系统迁移

v5 用法 (已废弃)

import { logger, initLogger } from '@ikenxuan/amagi'
initLogger()
logger.info('消息')

v6 用法

import { amagiEvents } from '@ikenxuan/amagi'

amagiEvents.on('log:info', (data) => console.log(data.message))
amagiEvents.on('log:error', (data) => console.error(data.message))
amagiEvents.on('api:success', (data) => console.log(`${data.platform} 成功`))
amagiEvents.on('api:error', (data) => console.error(`${data.platform} 失败`))

可用事件

事件名描述
log:info/warn/error/debug/mark日志事件
http:request/responseHTTP 请求/响应
network:retry/error网络重试/错误
api:success/errorAPI 调用成功/失败

API 调用方式迁移

v5 用法 (已移除)

以下 API 在 v6 中调用会直接抛出 DeprecatedApiError 错误:

// ❌ 这些调用会抛出错误
import { getDouyinData, getBilibiliData } from '@ikenxuan/amagi'

await getDouyinData('视频作品数据', { aweme_id: '123' }, cookie)
// Error: getDouyinData 已废弃,请使用 douyinFetcher 或 client.douyin.fetcher

await getBilibiliData('单个视频作品数据', { bvid: 'BV1xx' }, cookie)
// Error: getBilibiliData 已废弃,请使用 bilibiliFetcher 或 client.bilibili.fetcher

v6 用法

方式 1: 客户端实例 (推荐)

import Client from '@ikenxuan/amagi'

const amagi = Client({
  cookies: { bilibili: 'cookie', douyin: 'cookie' }
})

// 无需传递 cookie
const result = await amagi.bilibili.fetcher.fetchVideoInfo({ bvid: 'BV1xx' })
const result2 = await amagi.douyin.fetcher.fetchVideoWork({ aweme_id: '123' })

方式 2: 静态 Fetcher

import Client from '@ikenxuan/amagi'

// 需要传递 cookie
const result = await Client.bilibiliFetcher.fetchVideoInfo({ bvid: 'BV1xx' }, cookie)

方式 3: createBound 工厂函数

import Client from '@ikenxuan/amagi'

const fetcher = Client.createBoundBilibiliFetcher('your_cookie')
const result = await fetcher.fetchVideoInfo({ bvid: 'BV1xx' })

Fetcher 方法名对照

B站

v5 中文方法名v6 Fetcher 方法
单个视频作品数据fetchVideoInfo
单个视频下载信息数据fetchVideoStreamUrl
实时弹幕fetchVideoDanmaku
评论数据fetchComments
指定评论的回复fetchCommentReplies
用户主页数据fetchUserCard
用户主页动态列表数据fetchUserDynamicList
用户空间详细信息fetchUserSpaceInfo
获取UP主总播放量fetchUploaderTotalViews
动态详情数据fetchDynamicDetail
动态卡片数据fetchDynamicCard
番剧基本信息数据fetchBangumiInfo
番剧下载信息数据fetchBangumiStreamUrl
直播间信息fetchLiveRoomInfo
直播间初始化信息fetchLiveRoomInitInfo
登录基本信息fetchLoginStatus
申请二维码requestLoginQrcode
二维码状态checkQrcodeStatus
AV转BVconvertAvToBv
BV转AVconvertBvToAv
Emoji数据fetchEmojiList

抖音

v5 中文方法名v6 Fetcher 方法
视频作品数据fetchVideoWork
图集作品数据fetchImageAlbumWork
合辑作品数据fetchSlidesWork
文字作品数据fetchTextWork
聚合解析parseWork
评论数据fetchWorkComments
指定评论回复数据fetchCommentReplies
用户主页数据fetchUserProfile
用户主页视频列表数据fetchUserVideoList
搜索数据searchContent
热点词数据fetchSuggestWords
音乐数据fetchMusicInfo
直播间信息数据fetchLiveRoomInfo
弹幕数据fetchDanmakuList
Emoji数据fetchEmojiList
动态表情数据fetchDynamicEmojiList

快手

v5 中文方法名v6 Fetcher 方法
单个视频作品数据fetchVideoWork
评论数据fetchWorkComments
Emoji数据fetchEmojiList

小红书

v5 中文方法名v6 Fetcher 方法
首页推荐数据fetchHomeFeed
单个笔记数据fetchNoteDetail
评论数据fetchNoteComments
用户数据fetchUserProfile
用户笔记数据fetchUserNoteList
搜索笔记searchNotes
表情列表fetchEmojiList

搜索类型参数变更

抖音搜索 type 参数从中文改为英文:

v5v6
综合general
用户user
视频video
// v5
await getDouyinData('搜索数据', { query: '关键词', type: '用户' }, cookie)

// v6
await douyinFetcher.searchContent({ query: '关键词', type: 'user' }, cookie)

类型模式

v6 新增 typeMode 参数:

// 宽松模式 (默认)
const loose = await fetcher.fetchVideoInfo({ bvid: 'BV1xx' })
loose.data // any

// 严格模式
const strict = await fetcher.fetchVideoInfo({ bvid: 'BV1xx', typeMode: 'strict' })
strict.data // 有完整类型提示

兼容性说明

  • v5 的 getDouyinDatagetBilibiliData 等方法已完全移除,调用会抛出错误
  • 必须迁移到 v6 的 Fetcher API

常见问题

Q: 如何实现自定义日志?

import { amagiEvents } from '@ikenxuan/amagi'
import pino from 'pino'

const logger = pino()
amagiEvents.on('log:info', (data) => logger.info(data.message))
amagiEvents.on('log:error', (data) => logger.error(data.message))

Q: 如何监控 API 调用?

amagiEvents.on('api:success', (data) => {
  console.log(`[${data.platform}] ${data.methodType} 成功`)
})

amagiEvents.on('api:error', (data) => {
  console.error(`[${data.platform}] ${data.methodType} 失败: ${data.errorMessage}`)
})

Q: 如何获取严格类型?

const result = await fetcher.fetchVideoInfo({ bvid: 'BV1xx', typeMode: 'strict' })
// result.data 现在有完整类型提示

On this page