前言说明

本短视频解析 API 提供便捷的接口服务,支持通过 API 密钥验证 方式安全调用所有平台接口,无功能限制。无论是当前已开放的解析能力,还是后续平台升级新增的短视频解析接口,均可无缝使用。

核心功能

  • 短视频去水印:快速解析并去除短视频水印,保留原画质内容。
  • 常用图集解析:支持解析主流平台图集资源,提取高清图片素材。

服务优势

  • 全接口开放:覆盖现有及未来新增的所有短视频解析接口,满足多样化需求。
  • 安全验证机制:通过 API 密钥验证确保调用安全,保障数据隐私与接口稳定性。

解析支持

支持抖音、快手、小红书、微博、微视、今日头条、西瓜视频、哔哩哔哩、秒抽、美拍、皮皮虾、皮皮搞笑、全民小视频、火山小视频、好看视频、看点视频、全民K歌、看点视频、看点快报、度小视、QQ看点、陌陌、唱吧、YY、小咖秀、糖豆、最左、配音秀、酷狗音乐、酷我音乐、看看视频、梨视频、网易云音乐、大众点评、虎牙视频、懂车帝、剪映、趣头条、美图秀秀、刷宝、迅雷、京东、淘宝、天猫、拼多多、微信公众号、火锅视频、轻视频、百度视频、、微叭、微云、快看点、等等100多个短视频去水印和常用图集解析。

短视频平台解析API接口使用说明 1

一、接口地址

接口地址为 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)

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。