前言说明
本短视频解析 API 提供便捷的接口服务,支持通过 API 密钥验证 方式安全调用所有平台接口,无功能限制。无论是当前已开放的解析能力,还是后续平台升级新增的短视频解析接口,均可无缝使用。
核心功能
- 短视频去水印:快速解析并去除短视频水印,保留原画质内容。
- 常用图集解析:支持解析主流平台图集资源,提取高清图片素材。
服务优势
- 全接口开放:覆盖现有及未来新增的所有短视频解析接口,满足多样化需求。
- 安全验证机制:通过 API 密钥验证确保调用安全,保障数据隐私与接口稳定性。
解析支持
支持抖音、快手、小红书、微博、微视、今日头条、西瓜视频、哔哩哔哩、秒抽、美拍、皮皮虾、皮皮搞笑、全民小视频、火山小视频、好看视频、看点视频、全民K歌、看点视频、看点快报、度小视、QQ看点、陌陌、唱吧、YY、小咖秀、糖豆、最左、配音秀、酷狗音乐、酷我音乐、看看视频、梨视频、网易云音乐、大众点评、虎牙视频、懂车帝、剪映、趣头条、美图秀秀、刷宝、迅雷、京东、淘宝、天猫、拼多多、微信公众号、火锅视频、轻视频、百度视频、、微叭、微云、快看点、等等100多个短视频去水印和常用图集解析。
一、接口地址
接口地址为 https://www.yuntts.com/api/v1/tiktok二、前置条件
通过:https://www.yuntts.com/user/api/ 生成自己的秘钥
三、请求方式
支持 POST 请求。
四、请求头
Authorization: Bearer 你的 API 密钥
Content-Type: application/json五、请求参数
{
"url": "https://v.douyin.com/F5o2FM6/"
}六、响应示例
解析成功时,视频响应示例如下:
{
"code": 200,
"msg": "解析成功",
"data": {
"title": "#beyond #黄家驹 #大地 你知道呢首歌想表達嘅意思係乜嘢嗎 ?",
"author": "乜秋秋",
"uid": "QQ166cm",
"cover": "https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/ebcbce39e0f24ff1944cdc503339d9bf_1646541783~tplv-dy-360p.jpeg?lk3s=138a59ce&x-expires=1748502000&x-signature=yHtFVga9KDcYwG1twLXVy%2BNJDAw%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=20250515152946EC609EDD948DEE04C163",
"time": "2025-05-15 15:29:46",
"url": "https://v26-default.365yg.com/d1b92b0e6620de51dfac1ff720ec60c7/6825c226/video/tos/cn/tos-cn-ve-15-alinc2/e6a536741a0b4a3797ada5b16c28468d/?a=6383&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=920&bt=920&cs=0&ds=4&ft=rVWEerwwZR7Gs0Po0PDS6kwc3RZtGVpUhu9eFtRSVIr12nzXT&mime_type=video_mp4&qs=0&rc=NGQ2Ojw7NDc5MzxmN2Q4NkBpajUzNmU6ZmU2OzMzNGkzM0BiNDAyX2AuNjMxMC5hNWNgYSMwXmlicjRnamZgLS1kLWFzcw%3D%3D&btag=c0000e00008000&cquery=102u_100o_100w_100B_100x&dy_q=1747294186&l=20250515152946EC609EDD948DEE04C163"
}
}解析成功时,图集响应示例如下:
{
"code": "200",
"msg": "解析成功",
"info": "本站所有接口仅限学习使用,请勿用于非法途径!",
"data": {
"title": "真的有人愿意用兄弟十年单身来换一个这样的女朋友吗#颜值 #氛围感 #图文来了",
"url": "",
"cover": "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/94d009bb801d4c7e844721dd612c2171~noop.jpeg?lk3s=138a59ce&x-expires=1748509200&x-signature=NOnQtCqUSLJm2Jj0ey9OGJBU6rQ%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&biz_tag=pcweb_cover&l=20250515170527747D5AC231FE53031941",
"images": [
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/94d009bb801d4c7e844721dd612c2171~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=8hONTsUlw16sGhgBWvrpfYuYav4%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/1e53975c0b604a64a91b3cb279d8fd10~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=NoAGnt3z1%2FVaSaplFQJSUhF%2BRkE%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/b412e40b62d648e2b05cbc49943708aa~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=vUchb4vFdX%2B4GzSYiu9RXXIuTUs%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/1f7955bca3354071890721dbcefcc637~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=jJNisc1CKM53kbzVmTRu2RcfOzc%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/d9d90fef8507405681ada17b412a1bfa~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=JHSRVallmcvRYPWj8GajFeuJGDs%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941"
],
"pics": [
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/94d009bb801d4c7e844721dd612c2171~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=8hONTsUlw16sGhgBWvrpfYuYav4%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/1e53975c0b604a64a91b3cb279d8fd10~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=NoAGnt3z1%2FVaSaplFQJSUhF%2BRkE%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/b412e40b62d648e2b05cbc49943708aa~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=vUchb4vFdX%2B4GzSYiu9RXXIuTUs%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/1f7955bca3354071890721dbcefcc637~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=jJNisc1CKM53kbzVmTRu2RcfOzc%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941",
"https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/d9d90fef8507405681ada17b412a1bfa~tplv-dy-aweme-images:q75.webp?lk3s=138a59ce&x-expires=1749891600&x-signature=JHSRVallmcvRYPWj8GajFeuJGDs%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=image&biz_tag=aweme_images&l=20250515170527747D5AC231FE53031941"
],
"time": "2025-05-15 17:05:28",
"mp3": "",
"author": {
"uid": "28140762319",
"name": "万花筒.(限流中)"
}
}
}七、参数说明
| 字段 | 类型 | 说明 |
|---|---|---|
| code | int | 状态码,“200”表示请求成功 |
| msg | string | 状态信息,描述操作结果 |
| title | string | 短视频标题或描述(含话题标签) |
| url | string | 解析后的无水印视频播放地址 |
| cover | string | 短视频封面图片地址 |
| time | string | 视频发布/解析时间(格式:YYYY-MM-DD HH:mm:ss) |
| mp3 | string | 音频下载地址(当前返回为空) |
| pics | string | 图集 |
| images | string | 图集 |
| author | object | 发布者信息对象 |
| ├─ uid | string | 用户唯一标识符 |
| └─ name | string | 用户昵称 |
八、错误处理
1. 缺少 API 密钥
{
"code": 0,
"msg": "缺少API密钥",
"data": []
}2. API 密钥无效
{
"code": "401",
"message": "API密钥无效"
}3. 解析次数不足
{
"code": 0,
"msg": "解析次数不足",
"data": []
}九、参考代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="never">
<title>Video Parser</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2 class="text-center">Video Parser</h2>
<div class="row mt-4">
<div class="col-md-6">
<div class="mb-3">
<label for="apiKey" class="form-label">API Key</label>
<input type="text" class="form-control" id="apiKey" placeholder="请输入API Key">
</div>
<div class="mb-3">
<label for="videoUrl" class="form-label">Video URL</label>
<textarea class="form-control" id="videoUrl" rows="10"></textarea>
</div>
<button type="button" class="btn btn-primary me-2" id="parseButton">解析视频</button>
<a id="downloadButton" class="btn btn-success" style="display: none;">下载视频</a>
</div>
<div class="col-md-6">
<table class="table table-striped" id="resultTable">
<thead>
<tr>
<th scope="col">项目</th>
<th scope="col">值</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">标题</th>
<td id="videoTitleCell"></td>
</tr>
<tr>
<th scope="row">作者</th>
<td id="authorNameCell"></td>
</tr>
<tr>
<th scope="row">图片地址</th>
<td id="coverUrlCell"></td>
</tr>
<tr>
<th scope="row">视频地址</th>
<td id="videoUrlCell"></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row mt-4">
<div class="col-md-12">
<video id="videoPlayer" controls style="max-width: 100%; display: none;"></video>
</div>
</div>
</div>
<script>
const parseButton = document.getElementById('parseButton');
const resultTable = document.getElementById('resultTable');
const videoPlayer = document.getElementById('videoPlayer');
const downloadButton = document.getElementById('downloadButton');
const videoTitleCell = document.getElementById('videoTitleCell');
const authorNameCell = document.getElementById('authorNameCell');
const coverUrlCell = document.getElementById('coverUrlCell');
const videoUrlCell = document.getElementById('videoUrlCell');
parseButton.addEventListener('click', () => {
const apiKey = document.getElementById('apiKey').value;
const videoUrl = document.getElementById('videoUrl').value;
// 验证API Key是否为空
if (!apiKey) {
alert('请输入API Key');
return;
}
// 禁用按钮,防止重复点击
parseButton.disabled = true;
const originalText = parseButton.textContent;
parseButton.innerHTML = '<span class="spinner-border spinner-border-sm me-1"></span>解析中...';
const apiUrl = 'https://www.yuntts.com/api/v1/tiktok';
const requestData = {
url: videoUrl
};
// 发送请求前的日志
console.log('%c=== API请求信息 ===', 'color: blue; font-weight: bold;');
console.log('请求URL:', apiUrl);
console.log('请求方法:', 'POST');
console.log('请求参数:', requestData);
console.log('API Key:', apiKey);
console.log('请求时间:', new Date().toLocaleString());
fetch(apiUrl, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(requestData)
})
.then(response => {
console.log('\n%c=== 响应状态信息 ===', 'color: green; font-weight: bold;');
console.log('HTTP状态码:', response.status);
console.log('状态文本:', response.statusText);
console.log('响应头:', response.headers);
// 根据HTTP状态码处理响应
if (response.ok) {
// 200-299状态码,解析JSON
return response.json().then(data => {
return { success: true, data: data, status: response.status };
});
} else {
// 非200状态码
// 尝试解析JSON错误响应
return response.json().then(errorData => {
return { success: false, data: errorData, status: response.status, statusText: response.statusText };
}).catch(() => {
// 无法解析JSON,返回HTTP状态码和状态文本
return { success: false, status: response.status, statusText: response.statusText };
});
}
})
.then(result => {
console.log('\n%c=== 完整响应数据 ===', 'color: purple; font-weight: bold;');
console.log('响应结果:', result);
if (result.success) {
// 处理成功响应
console.log('\n%c=== 成功响应详情 ===', 'color: green; font-weight: bold;');
console.log('响应数据:', JSON.stringify(result.data, null, 2));
const data = result.data;
videoPlayer.style.display = 'block';
downloadButton.style.display = 'inline-block';
// 显示视频信息
videoTitleCell.textContent = data.data?.title || '';
authorNameCell.textContent = data.data?.author?.name || data.data?.author || '';
coverUrlCell.textContent = data.data?.cover || '';
videoUrlCell.textContent = data.data?.url || '';
// 设置视频播放器和下载链接
if (data.data?.url) {
videoPlayer.src = data.data.url;
downloadButton.href = data.data.url;
downloadButton.download = data.data.title || 'video.mp4';
}
} else {
// 处理错误响应
console.error('\n%c=== 错误响应详情 ===', 'color: red; font-weight: bold;');
console.error('错误状态码:', result.status);
console.error('错误数据:', result.data);
let errorMsg = '解析失败';
if (result.data) {
// 有错误数据
if (result.data.msg) {
errorMsg = result.data.msg;
} else if (result.data.error) {
errorMsg = result.data.error;
} else if (result.data.message) {
errorMsg = result.data.message;
} else {
errorMsg = JSON.stringify(result.data);
}
} else {
// 无错误数据,使用HTTP状态信息
if (result.status === 401) {
errorMsg = 'API密钥无效,请检查密钥是否正确';
} else if (result.status === 400) {
errorMsg = '请求参数错误,请检查视频链接格式';
} else if (result.status === 500) {
errorMsg = '服务器内部错误,请稍后重试';
} else {
errorMsg = `请求失败 (${result.status}): ${result.statusText || '未知错误'}`;
}
}
alert(errorMsg);
}
})
.catch((error) => {
console.error('\n%c=== 网络请求错误 ===', 'color: red; font-weight: bold;');
console.error('错误类型:', error.name);
console.error('错误消息:', error.message);
console.error('错误详情:', error);
alert('网络请求失败,请检查网络连接或稍后重试');
})
.finally(() => {
// 恢复按钮状态
parseButton.disabled = false;
parseButton.textContent = originalText;
console.log('\n%c=== 请求处理完成 ===', 'color: blue; font-weight: bold;');
console.log('完成时间:', new Date().toLocaleString());
});
});
</script>
</body>
</html>
curl -X POST \
-H "Authorization: Bearer 4f4e3128b66856908abea9d440657cce" \
-H "Content-Type: application/json" \
-d '{"url": "https://v.douyin.com/F5o2FM6/"}' \
https://www.yuntts.com/api/v1/tiktok
import requests
# 配置信息
api_key = "4f4e3128b66856908abea9d440657cce"
api_url = 'https://www.yuntts.com/api/v1/tiktok'
video_url = 'https://v.douyin.com/F5o2FM6/'
# 准备请求数据和请求头
headers = {
'Authorization': 'Bearer ' + api_key,
'Content-Type': 'application/json'
}
data = {
'url': video_url
}
# 发送 POST 请求
response = requests.post(api_url, headers=headers, json=data)
# 处理响应
if response.status_code == 200:
result = response.json()
print('请求成功:', result)
if result.get('code') == 200:
print('视频标题:', result['data']['title'])
print('视频链接:', result['data']['url'])
else:
print('请求失败,状态码:', response.status_code)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。


评论(0)