您有一队 YouTube 链接和一个需要本周 MP3 的 PHP 应用程序。在本指南结束时,您将从 PHP 后端调用 YouTube 视频到音频 API,获取直接的 MP3 链接和元数据,并安全地在生产中处理它——使用来自 Zyla API Hub 的一个 API 密钥。
您可以使用 YouTube 视频到音频 API 构建的内容
YouTube 视频到音频 API 将 YouTube 视频(通过 ID)转换为音频文件并返回:
- MP3 文件的直接链接
- 视频标题
- 文件大小
- 转换进度和状态
- 持续时间(秒,浮点数)
典型的用例包括从短视频生成播客源、内部转录管道(先获取 MP3,然后提供给语音转文本)、自动内容剪辑或离线收听工作流程。该端点旨在处理短视频(大约 5 分钟或更短)。
在 Zyla API Hub 上开始
Zyla API Hub 将数千个 API 集中在一个帐户、订阅和 API 密钥后面。您只需订阅一次,即可通过一致的授权头调用各个类别的端点。计费为订阅 + 配额(而不是按调用计费)。对于您尝试的第一个 API,您通常会获得 7 天的试用或 50 次请求。没有免费计划;在发布之前,请查看 API 页面以获取当前访问选项和定价。
- 打开 API 页面:Zyla 上的 YouTube 视频到音频 API。
- 点击订阅(或在可用时开始免费试用)并获取您的 API 密钥。
- 在每个请求中使用 Authorization: Bearer YOUR_API_KEY 访问 zylalabs.com API 端点。
准备好集成了吗?在这里创建您的免费开发者帐户以获取 API 密钥:注册。
端点参考
API 暴露一个可操作的转换端点。使用下面显示的确切 URL 和参数。
获取音频
- 方法:GET
- URL:https://zylalabs.com/api/1812/youtube-video-to-audio-api/5870/get-audio
- 描述:提供一个 YouTube 视频 ID。视频应大约 5 分钟或更短。
- 所需查询参数:
- id(字符串):YouTube 视频 ID
cURL
curl -s -X GET "https://zylalabs.com/api/1812/youtube-video-to-audio-api/5870/get-audio?id=p-Z3YrHJ1sU" \
-H "Authorization: Bearer YOUR_API_KEY"
JSON(真实 API 响应)
{
"link": "https://eta.123tokyo.xyz/get.php/9/9e/ty7nkwYqodA.mp3?cid=MmEwMTo0Zjg6YzAxMjozMmVlOjoxfE5BfERF&h=FwrcvY5cIfOO0jyXh5C-6Q&s=1737705748&n=%E2%82%B91%2C07%2C000%20_iPhone%2016%20Pro%20Max_%20USA%20to%20INDIA_%20%23shorts%20%23youtubeshorts&uT=R&uN=QWxlam9aeWxhTGFicw%3D%3D",
"title": "₹1,07,000 *iPhone 16 Pro Max* USA to INDIA! #shorts #youtubeshorts",
"filesize": 417480,
"progress": 100,
"duration": 22.896054233758,
"status": "ok",
"msg": "success"
}
这些字段的含义及其使用方法:
- link:生成的 MP3 的直接 URL。它包含 URL 编码的参数;将其视为不透明字符串,不要修改。
- title:原始视频标题。用于文件命名或元数据。
- filesize:MP3 的字节大小。适合配额检查或存储规划。
- progress:100 表示完成。
- duration:长度(秒,浮点数)。用于用户体验(例如,进度条)或下游处理。
- status/msg:简单的状态指示器。成功运行时期望“ok”和“success”。
PHP 集成(curl_init)与稳健处理
下面是一个最小的 PHP 示例,用于调用端点、解析 JSON,并可选择将 MP3 下载到磁盘。它仅使用所需的 id 参数和授权头。
PHP
<?php
$apiKey = 'YOUR_API_KEY';
$videoId = 'p-Z3YrHJ1sU'; // 用您的 YouTube 视频 ID 替换
$url = 'https://zylalabs.com/api/1812/youtube-video-to-audio-api/5870/get-audio?id=' . urlencode($videoId);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Accept: application/json'
],
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($response === false || $httpCode < 200 || $httpCode >= 300) {
http_response_code(502);
echo json_encode([
'error' => 'API 请求失败',
'httpCode' => $httpCode,
'curlError' => $error,
]);
exit;
}
data = json_decode($response, true);
if (!is_array($data) || empty($data['status']) || $data['status'] !== 'ok') {
http_response_code(500);
echo json_encode([
'error' => '意外的 API 响应',
'response' => $response,
]);
exit;
}
// 提取字段
$link = $data['link'] ?? null;
$title = $data['title'] ?? '未命名';
$filesize = $data['filesize'] ?? null;
$duration = $data['duration'] ?? null;
echo "标题:{
$title}
";
echo "持续时间(秒):{
$duration}
";
echo "文件大小(字节):{
$filesize}
";
echo "MP3 URL:{
$link}
";
// 可选:下载 MP3
if ($link) {
$safeTitle = preg_replace('/[^A-Za-z0-9_-]+/', '_', $title);
$target = __DIR__ . '/' . $safeTitle . '.mp3';
$fp = fopen($target, 'w');
if ($fp === false) {
throw new RuntimeException('无法打开文件进行写入:' . $target);
}
$ch2 = curl_init($link);
curl_setopt_array($ch2, [
CURLOPT_FILE => $fp,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 120,
]);
$ok = curl_exec($ch2);
$err2 = curl_error($ch2);
curl_close($ch2);
fclose($fp);
if (!$ok) {
unlink($target);
throw new RuntimeException('下载失败:' . $err2);
}
echo "已保存:{
$target}
";
}
JavaScript 示例(Node.js fetch)
此示例演示了使用 Node.js 18+ 或 undici 中的原生 fetch 进行简单 GET 请求。它打印相同的关键字段,并显示如何流式传输 MP3(如果您需要持久化它)。
JavaScript
import fs from 'node:fs';
import { pipeline } from 'node:stream';
import { promisify } from 'node:util';
const streamPipeline = promisify(pipeline);
const API_KEY = 'YOUR_API_KEY';
const videoId = 'p-Z3YrHJ1sU';
const url = `https://zylalabs.com/api/1812/youtube-video-to-audio-api/5870/get-audio?id=${encodeURIComponent(videoId)}`;
const res = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Accept': 'application/json'
}
});
if (!res.ok) {
throw new Error(`API 错误:${res.status} ${res.statusText}`);
}
const data = await res.json();
if (data.status !== 'ok') {
throw new Error(`转换不正常:${JSON.stringify(data)}`);
}
console.log('标题:', data.title);
console.log('持续时间(秒):', data.duration);
console.log('文件大小(字节):', data.filesize);
console.log('MP3 URL:', data.link);
// 可选下载
if (data.link) {
const mp3Res = await fetch(data.link);
if (!mp3Res.ok) throw new Error(`下载失败:${mp3Res.status}`);
const safeTitle = data.title.replace(/[^A-Za-z0-9_-]+/g, '_');
await streamPipeline(mp3Res.body, fs.createWriteStream(`${safeTitle}.mp3`));
console.log(`已保存:${safeTitle}.mp3`);
}
生产中的端到端流程
使用此顺序将 API 融入您的管道:
- 验证输入:确保您仅传递 YouTube 视频 ID(例如,p-Z3YrHJ1sU)。如果您有完整的 URL,请在您的端提取 v 参数或路径 ID。
- 使用 Authorization: Bearer YOUR_API_KEY 调用获取音频端点。
- 检查状态和消息;仅在状态为 ok 时继续。
- 读取持续时间以强制执行您自己的处理时间和存储上限。该端点旨在处理大约 5 分钟或更短的视频。
- 使用链接下载 MP3。将其视为不透明的 URL;不要修改查询参数。
- 将文件大小和标题存储为下游服务的元数据(索引、S3 对象元数据等)。
节省时间的实用技巧
- 超时:设置合理的 HTTP 客户端超时(例如,API 调用 30 秒,MP3 下载更长)以防止工作线程卡住。
- 重试:对于瞬态网络错误,使用退避重试 API 调用。不要在 4xx 响应上反复重试。
- 缓存:如果您经常处理相同的 ID,请在存储中缓存成功的响应(标题、文件大小、持续时间、链接)并设置您自己的保留。根据需要重新验证。
- 文件名:视频标题可能包含不适合文件系统的字符。保存之前进行清理。
- 单位:文件大小为字节;持续时间为秒(浮点数)。显示之前进行转换。
- 长度保护:强制执行您自己的限制,接近 5 分钟,以避免在较长视频上浪费工作。
通过 MCP 从 AI 代理使用 API
您可以通过与 Zyla 的 MCP 中心兼容的工具(Claude Code、Cursor、Windsurf 等)调用相同的端点。配置您的客户端以使用 MCP 基础并包含您的 API 密钥:
- MCP 基础:https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
- 您仍然会向相同的资源 URL 发出 GET 请求:https://zylalabs.com/api/1812/youtube-video-to-audio-api/5870/get-audio?id=p-Z3YrHJ1sU
- 在您工具的 HTTP 调用配置中保留 Authorization: Bearer YOUR_API_KEY 头。
有关环境设置和客户端详细信息,请参阅MCP 文档。
常见模式和实际用例
- 转录的批量摄取:将许多短 ID 转换为 MP3,将文件排入您的语音转文本管道,附加持续时间和文件大小以进行成本估算。
- 音频预览服务:在您的数据库中存储链接、标题和持续时间,以支持播放 UI 和紧凑的音频卡。
- 自动剪辑:提取短视频的 MP3,并通过音频归一化或静音修剪。
- 内部内容归档:对于特定创作者频道,解析 ID,转换并存储到带有搜索元数据的管理存储中。
故障排除和边缘案例
- 来自 API 的非 200 HTTP 代码:记录 HTTP 状态和响应主体;在错误时不要盲目解析 JSON。
- 状态不是“ok”:将其视为转换失败,并将消息显示到日志或操作员。
- 无效或缺失的 ID:确保您仅传递视频 ID 字符串。清理工作由您负责。
- 下载失败:遵循重定向并在 MP3 获取时允许足够的超时;存储部分失败并与元数据调用分开重试。
- 配额规划:Zyla 使用订阅 + 配额。监控您在 Zyla 仪表板中的使用情况,并检查API 页面以获取当前计划详细信息。
安全注意事项
- 不要在源代码中硬编码 API 密钥;使用环境变量或秘密管理器。
- 限制谁可以在您的应用中触发转换。如果公开 webhook 或 HTTP 端点,请验证请求的来源。
- 仅记录密钥的最后 4 个字符。切勿在日志或客户端代码中打印完整凭据。
发货前的测试清单
- 使用至少三个不同的 YouTube ID 进行测试(包括一个接近 5 分钟和一个短的)。
- 验证 JSON 解析和字段存在性,包括链接、标题、文件大小、持续时间、状态、消息。
- 模拟超时和网络故障,以确认重试和错误显示。
- 确保从标题派生的文件名在所有部署操作系统目标上都经过清理。
- 进行端到端测试:API 调用、MP3 下载、存储和任何下游处理(例如,转录)。
接下来去哪里
在Zyla 的 YouTube 视频到音频 API 页面和Zyla API Hub 探索更多音频和内容工具。一个帐户,一个密钥,在音频、AI、丰富等类别中保持一致的头部。
常见问题解答
1)我需要传递什么参数才能获取音频?
通过 id 查询参数传递 YouTube 视频 ID。示例:id=p-Z3YrHJ1sU。
2)我如何进行身份验证?
在请求头中包含 Authorization: Bearer YOUR_API_KEY 以访问 zylalabs.com 端点。
3)我会收到什么输出?
一个 JSON 对象,包含链接(直接 MP3 URL)、标题、文件大小(字节)、进度(完成时为 100)、持续时间(秒)、状态和消息。
4)视频长度有限制吗?
是的。该端点旨在处理大约 5 分钟或更短的视频。
5)计费是如何处理的?
Zyla 使用订阅 + 配额(而不是按调用计费)。对于您的第一个 API,您通常会获得 7 天的试用或 50 次请求。没有免费计划;请查看 API 页面以获取当前选项。
立即发货您的集成:在几分钟内获取您的 API 密钥并开始调用端点。在这里创建您的帐户:注册。然后访问YouTube 视频到音频 API 页面,订阅并将授权头插入您的 PHP 代码。