video_parsers / modules /tiktok.py
admin
sync ms
bf7d327
import requests
import gradio as gr
from utils import download_file, extract_fst_url, API_TIKTOK, TIMEOUT, EN_US, TMP_DIR
ZH2EN = {
"状态栏": "Status",
"请输入抖音视频分享短链接": "Please enter TikTok video sharing short link",
"视频下载": "Video download",
"视频描述": "Video description",
"解析耗时": "Parsing time",
"作者头像": "Author avatar",
"作者昵称": "Author nickname",
"作者签名": "Author signature",
"抖音无水印视频解析": "Parse TikTok video without watermark",
"直链输出": "Direct link output",
}
def _L(zh_txt: str):
return ZH2EN[zh_txt] if EN_US else zh_txt
# outer func
def infer(video_url: str, direct_lnk_out: bool, cache=f"{TMP_DIR}/tiktok"):
status = "Success"
video = parse_time = desc = avatar = author = sign = None
try:
if not video_url:
raise ValueError("视频分享链接为空!")
video_url = extract_fst_url(video_url)
if not video_url:
raise ValueError("请输入有效的视频分享链接!")
response = requests.get(API_TIKTOK, params={"url": video_url}, timeout=TIMEOUT)
response_json = response.json()
retcode = response_json["code"]
if retcode == 200:
response_data = response_json["data"]
parse_time = response_data["parse_time"]
additional_data = response_data["additional_data"][0]
desc = additional_data["desc"]
avatar = additional_data["url"].split("?from=")[0]
author = additional_data["nickname"]
sign = additional_data["signature"]
if direct_lnk_out:
video = response_data["video_url"]
else:
video_id = response_data["play_url"].split("video_id=")[1].split("&")[0]
video = download_file(response_data["video_url"], video_id, cache)
else:
raise ConnectionError(f"接口调用失败, 错误码: HTTP {retcode}")
except Exception as e:
status = f"视频解析失败: {e}"
return status, video, desc, parse_time, avatar, author, sign
def tiktok_parser():
return gr.Interface(
fn=infer,
inputs=[
gr.Textbox(
label=_L("请输入抖音视频分享短链接"),
placeholder="https://v.douyin.com/*",
),
gr.Checkbox(label=_L("直链输出"), value=False),
],
outputs=[
gr.Textbox(label=_L("状态栏"), show_copy_button=True),
gr.Video(
label=_L("视频下载"),
show_download_button=True,
show_share_button=False,
),
gr.Textbox(label=_L("视频描述"), show_copy_button=True),
gr.Textbox(label=_L("解析耗时"), show_copy_button=True),
gr.Image(label=_L("作者头像"), show_share_button=False),
gr.Textbox(label=_L("作者昵称"), show_copy_button=True),
gr.TextArea(label=_L("作者签名"), show_copy_button=True),
],
title=_L("抖音无水印视频解析"),
flagging_mode="never",
examples=[
["https://v.douyin.com/8FVe5DzarE0", False],
[
"8.20 Njc:/ [email protected] 11/03 黑塔女士举世无双!# 大黑塔 # 黑塔 # 崩坏星穹铁道 # 再创世的凯歌 # 天才俱乐部 https://v.douyin.com/8FVe5DzarE0/ 复制此链接,打开Dou音搜索,直接观看视频!",
True,
],
],
cache_examples=False,
)