Skip to content

播客上传声音 ​

先上传音频文件,再提交声音所属播客、封面和分类等信息。使用具有发布权限的登录 Cookie,不能只调用一个空的 voiceUpload()。

接口信息 ​

项目值
接口地址/voice/upload
上传方式POST multipart
身份要求有发布权限的登录身份
对应模块voice_upload

请求参数 ​

songFile 是上传所需的文件。其余发布信息按目标播客和上游要求填写,当前本地输入解码不会替上游完整验证发布规则。

参数类型说明
songFileHTTP 文件或 SDK 文件对象音频字节,SDK 对象含 data、name、mimetype、size
voiceListIdnumber 或 string所属播客 ID
coverImgIdnumber 或 string封面图片 ID
categoryIdnumber 或 string分类 ID
secondCategoryIdnumber 或 string子分类 ID
descriptionstring声音介绍
songNamestring声音名称,未提供时从文件名整理
privacy布尔值或相应数字、字符串是否为隐私声音,示例配置可用 1 或 0
publishTimenumber 或数字字符串定时发布时间,未设置时发送 0
autoPublish布尔值或相应数字、字符串是否发布动态,建议传 1 或 0
autoPublishTextstring动态文案,默认空字符串
orderNonumber 或数字字符串排序,默认 1
composedSongsstring包含的歌曲 ID,用逗号分隔

HTTP 示例 ​

先准备 MP3 文件,并替换示例中的发布信息:

bash
curl 'http://127.0.0.1:3021/voice/upload' \
  -H 'Cookie: MUSIC_U=your-cookie' \
  -F 'songFile=@./episode.mp3;type=audio/mpeg' \
  -F 'voiceListId=your-voice-list-id' \
  -F 'coverImgId=your-cover-id' \
  -F 'categoryId=your-category-id' \
  -F 'secondCategoryId=your-subcategory-id' \
  -F 'description=本期声音介绍'

编程式调用 ​

ts
import { readFile } from 'node:fs/promises';
import { voiceUpload } from 'hana-music-api';

const data = await readFile('./episode.mp3');
const result = await voiceUpload(
  {
    songFile: {
      data,
      name: 'episode.mp3',
      mimetype: 'audio/mpeg',
      size: data.byteLength,
    },
    voiceListId: 'your-voice-list-id',
    coverImgId: 'your-cover-id',
    categoryId: 'your-category-id',
    secondCategoryId: 'your-subcategory-id',
    description: '本期声音介绍',
    songName: '第一期',
  },
  { cookie: 'MUSIC_U=your-cookie' },
);
console.log(result.body);

分块上传和部分完成 ​

内部按最多 10 MiB 一块传输,但这不会绕过 HTTP 服务默认 10 MiB 的入站文件总量限制。通过 HTTP 上传更大文件时,需要调整服务配置,见 部署 HTTP 服务。

每个阶段最多 60 秒,整个上传模块最多 5 分钟,调用方可以设置更短的总期限。已经完成的上游阶段无法回滚;失败时的 partialCompletion 和数字 completedStages 表示部分阶段已完成,不代表声音已经发布成功。再次上传前先确认上游结果,避免重复提交。

Released under the MIT License.