下面我将为您提供完整的短视频解析接口源代码,并详细介绍如何在宝塔面板中部署:
一、短视频解析接口源代码(Python Flask)
创建文件 /www/wwwroot/video_parser/app.py
并粘贴以下代码:
import re
import requests
from flask import Flask, request, jsonify
from concurrent.futures import ThreadPoolExecutor
app = Flask(__name__)
executor = ThreadPoolExecutor(10) # 线程池提高并发性能
# 公共请求头
HEADERS = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
"Referer": "https://www.douyin.com/"
}
def douyin_parser(share_url):
"""抖音视频解析"""
try:
# 获取重定向后的真实URL
res = requests.head(share_url, headers=HEADERS, allow_redirects=True)
final_url = res.url
# 提取视频ID
video_id = re.findall(r'/video/(\d+)', final_url)
if not video_id:
return {"error": "视频ID提取失败"}
video_id = video_id[0]
# 调用抖音官方API
api_url = f"https://www.iesdouyin.com/aweme/v1/web/aweme/detail/?aweme_id={video_id}"
response = requests.get(api_url, headers=HEADERS)
data = response.json()
# 提取无水印视频地址
video_url = data['aweme_detail']['video']['play_addr']['url_list'][0]
no_watermark_url = video_url.replace("playwm", "play")
return {
"title": data['aweme_detail']['desc'],
"cover": data['aweme_detail']['video']['cover']['url_list'][0],
"url": no_watermark_url,
"duration": data['aweme_detail']['video']['duration'] // 1000,
"platform": "douyin"
}
except Exception as e:
return {"error": f"抖音解析失败: {str(e)}"}
def kuaishou_parser(share_url):
"""快手视频解析"""
try:
# 获取最终URL
res = requests.get(share_url, headers=HEADERS, allow_redirects=True)
final_url = res.url
# 提取视频ID
video_id = re.findall(r'photo/(\d+)', final_url)
if not video_id:
return {"error": "视频ID提取失败"}
video_id = video_id[0]
# 快手API接口
api_url = "https://v.m.chenzhongtech.com/rest/wd/photo/info?photoId=" + video_id
response = requests.get(api_url, headers=HEADERS)
data = response.json()
return {
"title": data['photo']['caption'],
"cover": data['photo']['coverUrls'][0],
"url": data['photo']['videoUrl'],
"duration": data['photo']['duration'],
"platform": "kuaishou"
}
except Exception as e:
return {"error": f"快手解析失败: {str(e)}"}
def bilibili_parser(share_url):
"""B站视频解析"""
try:
# 提取BVID
bvid = re.findall(r'BV\w+', share_url)
if not bvid:
return {"error": "BVID提取失败"}
bvid = bvid[0]
# B站API接口
api_url = f"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"
response = requests.get(api_url, headers=HEADERS)
data = response.json()
return {
"title": data['data']['title'],
"cover": data['data']['pic'],
"url": f"https://www.bilibili.com/video/{bvid}",
"duration": data['data']['duration'],
"platform": "bilibili"
}
except Exception as e:
return {"error": f"B站解析失败: {str(e)}"}
@app.route('/')
def index():
return "短视频解析API已运行!请使用 /parse?url=视频链接"
@app.route('/parse')
def parse_video():
video_url = request.args.get('url', '')
if not video_url:
return jsonify({"error": "缺少视频URL参数"}), 400
# 根据域名分配解析器
if 'douyin' in video_url or 'iesdouyin' in video_url:
return jsonify(douyin_parser(video_url))
elif 'kuaishou' in video_url or 'chenzhongtech' in video_url:
return jsonify(kuaishou_parser(video_url))
elif 'bilibili' in video_url:
return jsonify(bilibili_parser(video_url))
else:
return jsonify({"error": "不支持的视频平台"}), 400
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
二、宝塔面板部署步骤
1. 安装Python项目管理器
-
登录宝塔面板
-
进入”软件商店”
-
搜索”Python项目管理器”并安装
2. 创建Python项目
-
打开”Python项目管理器”
-
点击”添加项目”
-
填写配置:
-
项目名称:
video_parser
-
路径:
/www/wwwroot/video_parser
-
Python版本:选择3.8+(推荐3.9)
-
框架:
Flask
-
启动方式:
gunicorn
-
启动文件:
app.py
-
端口:
5000
(确保端口未被占用) -
勾选”安装模块依赖”
-
-
点击”确定”创建项目
3. 安装依赖模块
-
在项目列表中找到
video_parser
-
点击”模块”
-
安装以下模块:
-
flask
-
requests
-
gunicorn
-
4. 配置网站
-
进入宝塔”网站”菜单
-
点击”添加站点”
-
填写域名(如果没有真实域名,可用服务器IP)
-
根目录选择:
/www/wwwroot/video_parser
-
PHP版本选择”纯静态”
5. 设置反向代理
-
进入站点设置
-
选择”反向代理”
-
添加反向代理:
-
代理名称:
video_api
-
目标URL:
http://127.0.0.1:5000
-
-
保存设置
6. 配置伪静态(可选但推荐)
-
进入站点设置
-
选择”伪静态”
-
粘贴以下规则:
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
三、使用说明
API调用方式:
http://你的域名/parse?url=视频分享链接
示例请求:
http://yourdomain.com/parse?url=https://v.douyin.com/iYgJ7PqX/
四、高级配置建议
-
设置访问限制:
-
在宝塔面板”安全”菜单中添加防火墙规则
-
限制单个IP请求频率(60秒内最多30次)
-
-
添加API密钥验证:
修改app.py
,在路由前添加:
API_KEY = "your_secret_key" # 设置你的密钥
@app.before_request
def check_api_key():
key = request.args.get('key', '')
if request.path == '/parse' and key != API_KEY:
return jsonify({"error": "无效的API密钥"}), 403
-
调用时添加key参数:
/parse?url=...&key=your_secret_key
-
开启HTTPS:
-
在宝塔”SSL”菜单申请免费证书
-
强制HTTPS访问
-
-
性能优化:
-
在Python项目管理器中设置工作进程数(建议为CPU核心数×2+1)
-
添加Redis缓存已解析的链接(减少重复请求)
-
五、常见问题解决
-
解析失败:
-
更新请求头中的User-Agent
-
检查各平台API是否有变动
-
查看日志:
/www/wwwroot/video_parser/video_parser.log
-
-
502 Bad Gateway:
-
确保Python项目已启动
-
检查端口是否冲突
-
重启项目:
supervisorctl restart video_parser
-
-
请求被平台屏蔽:
-
在代码中添加代理支持:
-
proxies = {
'http': 'http://your_proxy_ip:port',
'https': 'http://your_proxy_ip:port'
}
requests.get(url, headers=HEADERS, proxies=proxies)
这个方案支持抖音、快手和B站三大平台,部署简单且性能可靠。实际使用中需要定期维护,因为短视频平台的接口可能会更新变化。