Spaces:
Running
Running
admin
commited on
Commit
·
0d11e5e
1
Parent(s):
49e3a43
sync ms
Browse files- app.py +1 -4
- modules/bili.py +13 -16
- modules/bvid2acid.py +1 -4
- modules/tiktok.py +16 -21
- utils.py +16 -2
app.py
CHANGED
@@ -12,10 +12,7 @@ ZH2EN = {
|
|
12 |
|
13 |
|
14 |
def _L(zh_txt: str):
|
15 |
-
if LANG
|
16 |
-
return ZH2EN[zh_txt]
|
17 |
-
else:
|
18 |
-
return zh_txt
|
19 |
|
20 |
|
21 |
if __name__ == "__main__":
|
|
|
12 |
|
13 |
|
14 |
def _L(zh_txt: str):
|
15 |
+
return ZH2EN[zh_txt] if LANG else zh_txt
|
|
|
|
|
|
|
16 |
|
17 |
|
18 |
if __name__ == "__main__":
|
modules/bili.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
import re
|
2 |
import requests
|
3 |
import gradio as gr
|
4 |
from utils import (
|
5 |
download_file,
|
|
|
6 |
HEADER,
|
7 |
TIMEOUT,
|
8 |
API_BILI,
|
@@ -31,17 +31,13 @@ ZH2EN = {
|
|
31 |
|
32 |
|
33 |
def _L(zh_txt: str):
|
34 |
-
if LANG
|
35 |
-
return ZH2EN[zh_txt]
|
36 |
-
else:
|
37 |
-
return zh_txt
|
38 |
|
39 |
|
40 |
-
def
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
out_url = match.group(1).split("?")[0]
|
45 |
if out_url[-1] == "/":
|
46 |
out_url = out_url[:-1]
|
47 |
|
@@ -110,12 +106,13 @@ def channel_2(video_url: str, p: int, cache: str):
|
|
110 |
|
111 |
response_data = response_json["data"][int(p) - 1]
|
112 |
dur = response_data["duration"]
|
113 |
-
video = get_video(video_url, p, cache)
|
114 |
|
115 |
author_data = response_json["user"]
|
116 |
author = author_data["name"]
|
117 |
avatar = author_data["user_img"]
|
118 |
|
|
|
|
|
119 |
return title, cover, video, desc, dur, avatar, author
|
120 |
|
121 |
else:
|
@@ -131,15 +128,15 @@ def channel_1(video_url: str, p: int, cache: str):
|
|
131 |
cover = response_json["imgurl"]
|
132 |
desc = response_json["desc"]
|
133 |
|
|
|
|
|
|
|
|
|
134 |
response_data = response_json["data"][int(p) - 1]
|
135 |
dur = response_data["duration"]
|
136 |
video_id = video_url.split("/")[-1]
|
137 |
video = download_file(response_data["video_url"], video_id, cache)
|
138 |
|
139 |
-
author_data = response_json["user"]
|
140 |
-
author = author_data["name"]
|
141 |
-
avatar = author_data["user_img"]
|
142 |
-
|
143 |
return title, cover, video, desc, dur, avatar, author
|
144 |
|
145 |
else:
|
@@ -157,7 +154,7 @@ def infer(ch: str, video_url: str, p: int, cache=f"{TMP_DIR}/bili"):
|
|
157 |
if not video_url:
|
158 |
raise ValueError("视频链接为空!")
|
159 |
|
160 |
-
video_url =
|
161 |
if "b23.tv" in video_url:
|
162 |
video_url = get_real_url(video_url)
|
163 |
|
|
|
|
|
1 |
import requests
|
2 |
import gradio as gr
|
3 |
from utils import (
|
4 |
download_file,
|
5 |
+
extract_fst_url,
|
6 |
HEADER,
|
7 |
TIMEOUT,
|
8 |
API_BILI,
|
|
|
31 |
|
32 |
|
33 |
def _L(zh_txt: str):
|
34 |
+
return ZH2EN[zh_txt] if LANG else zh_txt
|
|
|
|
|
|
|
35 |
|
36 |
|
37 |
+
def get_fst_url(text):
|
38 |
+
fst_url = extract_fst_url(text)
|
39 |
+
if fst_url:
|
40 |
+
out_url = fst_url.split("?")[0]
|
|
|
41 |
if out_url[-1] == "/":
|
42 |
out_url = out_url[:-1]
|
43 |
|
|
|
106 |
|
107 |
response_data = response_json["data"][int(p) - 1]
|
108 |
dur = response_data["duration"]
|
|
|
109 |
|
110 |
author_data = response_json["user"]
|
111 |
author = author_data["name"]
|
112 |
avatar = author_data["user_img"]
|
113 |
|
114 |
+
video = get_video(video_url, p, cache)
|
115 |
+
|
116 |
return title, cover, video, desc, dur, avatar, author
|
117 |
|
118 |
else:
|
|
|
128 |
cover = response_json["imgurl"]
|
129 |
desc = response_json["desc"]
|
130 |
|
131 |
+
author_data = response_json["user"]
|
132 |
+
author = author_data["name"]
|
133 |
+
avatar = author_data["user_img"]
|
134 |
+
|
135 |
response_data = response_json["data"][int(p) - 1]
|
136 |
dur = response_data["duration"]
|
137 |
video_id = video_url.split("/")[-1]
|
138 |
video = download_file(response_data["video_url"], video_id, cache)
|
139 |
|
|
|
|
|
|
|
|
|
140 |
return title, cover, video, desc, dur, avatar, author
|
141 |
|
142 |
else:
|
|
|
154 |
if not video_url:
|
155 |
raise ValueError("视频链接为空!")
|
156 |
|
157 |
+
video_url = get_fst_url(video_url)
|
158 |
if "b23.tv" in video_url:
|
159 |
video_url = get_real_url(video_url)
|
160 |
|
modules/bvid2acid.py
CHANGED
@@ -9,10 +9,7 @@ ZH2EN = {
|
|
9 |
|
10 |
|
11 |
def _L(zh_txt: str):
|
12 |
-
if LANG
|
13 |
-
return ZH2EN[zh_txt]
|
14 |
-
else:
|
15 |
-
return zh_txt
|
16 |
|
17 |
|
18 |
def infer(bvid: str):
|
|
|
9 |
|
10 |
|
11 |
def _L(zh_txt: str):
|
12 |
+
return ZH2EN[zh_txt] if LANG else zh_txt
|
|
|
|
|
|
|
13 |
|
14 |
|
15 |
def infer(bvid: str):
|
modules/tiktok.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
-
import re
|
2 |
import requests
|
3 |
import gradio as gr
|
4 |
-
from utils import download_file, API_TIKTOK, TIMEOUT, LANG, TMP_DIR
|
5 |
|
6 |
ZH2EN = {
|
7 |
"状态栏": "Status",
|
@@ -13,27 +12,16 @@ ZH2EN = {
|
|
13 |
"作者昵称": "Author nickname",
|
14 |
"作者签名": "Author signature",
|
15 |
"抖音无水印视频解析": "Parse TikTok video without watermark",
|
|
|
16 |
}
|
17 |
|
18 |
|
19 |
def _L(zh_txt: str):
|
20 |
-
if LANG
|
21 |
-
return ZH2EN[zh_txt]
|
22 |
-
else:
|
23 |
-
return zh_txt
|
24 |
-
|
25 |
-
|
26 |
-
def extract_fst_url(text):
|
27 |
-
url_pattern = r'(https?://[^\s"]+)'
|
28 |
-
match = re.search(url_pattern, text)
|
29 |
-
if match:
|
30 |
-
return match.group(1)
|
31 |
-
else:
|
32 |
-
return None
|
33 |
|
34 |
|
35 |
# outer func
|
36 |
-
def infer(video_url, cache=f"{TMP_DIR}/tiktok"):
|
37 |
status = "Success"
|
38 |
video = parse_time = desc = avatar = author = sign = None
|
39 |
try:
|
@@ -49,16 +37,19 @@ def infer(video_url, cache=f"{TMP_DIR}/tiktok"):
|
|
49 |
retcode = response_json["code"]
|
50 |
if retcode == 200:
|
51 |
response_data = response_json["data"]
|
52 |
-
video_id = response_data["play_url"].split("video_id=")[1].split("&")[0]
|
53 |
-
video = download_file(response_data["video_url"], video_id, cache)
|
54 |
parse_time = response_data["parse_time"]
|
55 |
-
|
56 |
additional_data = response_data["additional_data"][0]
|
57 |
desc = additional_data["desc"]
|
58 |
avatar = additional_data["url"].split("?from=")[0]
|
59 |
author = additional_data["nickname"]
|
60 |
sign = additional_data["signature"]
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
else:
|
63 |
raise ConnectionError(f"接口调用失败, 错误码: HTTP {retcode}")
|
64 |
|
@@ -72,6 +63,7 @@ def tiktok_parser():
|
|
72 |
return gr.Interface(
|
73 |
fn=infer,
|
74 |
inputs=[
|
|
|
75 |
gr.Textbox(
|
76 |
label=_L("请输入抖音视频分享短链接"),
|
77 |
placeholder="https://v.douyin.com/*",
|
@@ -93,8 +85,11 @@ def tiktok_parser():
|
|
93 |
title=_L("抖音无水印视频解析"),
|
94 |
flagging_mode="never",
|
95 |
examples=[
|
96 |
-
"https://v.douyin.com/8FVe5DzarE0",
|
97 |
-
|
|
|
|
|
|
|
98 |
],
|
99 |
cache_examples=False,
|
100 |
)
|
|
|
|
|
1 |
import requests
|
2 |
import gradio as gr
|
3 |
+
from utils import download_file, extract_fst_url, API_TIKTOK, TIMEOUT, LANG, TMP_DIR
|
4 |
|
5 |
ZH2EN = {
|
6 |
"状态栏": "Status",
|
|
|
12 |
"作者昵称": "Author nickname",
|
13 |
"作者签名": "Author signature",
|
14 |
"抖音无水印视频解析": "Parse TikTok video without watermark",
|
15 |
+
"直链": "Direct link",
|
16 |
}
|
17 |
|
18 |
|
19 |
def _L(zh_txt: str):
|
20 |
+
return ZH2EN[zh_txt] if LANG else zh_txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
|
23 |
# outer func
|
24 |
+
def infer(direct_link, video_url, cache=f"{TMP_DIR}/tiktok"):
|
25 |
status = "Success"
|
26 |
video = parse_time = desc = avatar = author = sign = None
|
27 |
try:
|
|
|
37 |
retcode = response_json["code"]
|
38 |
if retcode == 200:
|
39 |
response_data = response_json["data"]
|
|
|
|
|
40 |
parse_time = response_data["parse_time"]
|
|
|
41 |
additional_data = response_data["additional_data"][0]
|
42 |
desc = additional_data["desc"]
|
43 |
avatar = additional_data["url"].split("?from=")[0]
|
44 |
author = additional_data["nickname"]
|
45 |
sign = additional_data["signature"]
|
46 |
|
47 |
+
if direct_link:
|
48 |
+
video = response_data["video_url"]
|
49 |
+
else:
|
50 |
+
video_id = response_data["play_url"].split("video_id=")[1].split("&")[0]
|
51 |
+
video = download_file(response_data["video_url"], video_id, cache)
|
52 |
+
|
53 |
else:
|
54 |
raise ConnectionError(f"接口调用失败, 错误码: HTTP {retcode}")
|
55 |
|
|
|
63 |
return gr.Interface(
|
64 |
fn=infer,
|
65 |
inputs=[
|
66 |
+
gr.Checkbox(label=_L("直链"), value=False),
|
67 |
gr.Textbox(
|
68 |
label=_L("请输入抖音视频分享短链接"),
|
69 |
placeholder="https://v.douyin.com/*",
|
|
|
85 |
title=_L("抖音无水印视频解析"),
|
86 |
flagging_mode="never",
|
87 |
examples=[
|
88 |
+
[False, "https://v.douyin.com/8FVe5DzarE0"],
|
89 |
+
[
|
90 |
+
True,
|
91 |
+
"8.20 Njc:/ [email protected] 11/03 黑塔女士举世无双!# 大黑塔 # 黑塔 # 崩坏星穹铁道 # 再创世的凯歌 # 天才俱乐部 https://v.douyin.com/8FVe5DzarE0/ 复制此链接,打开Dou音搜索,直接观看视频!",
|
92 |
+
],
|
93 |
],
|
94 |
cache_examples=False,
|
95 |
)
|
utils.py
CHANGED
@@ -1,8 +1,11 @@
|
|
1 |
import os
|
|
|
2 |
import shutil
|
3 |
import requests
|
4 |
from tqdm import tqdm
|
5 |
from datetime import datetime
|
|
|
|
|
6 |
|
7 |
|
8 |
LANG = os.getenv("language")
|
@@ -21,11 +24,13 @@ HEADER = {
|
|
21 |
}
|
22 |
|
23 |
|
24 |
-
def timestamp(naive_time: datetime = None):
|
25 |
if not naive_time:
|
26 |
naive_time = datetime.now()
|
27 |
|
28 |
-
|
|
|
|
|
29 |
|
30 |
|
31 |
def mk_dir(dirpath: str):
|
@@ -66,3 +71,12 @@ def download_file(url, video_id, cache_dir: str):
|
|
66 |
raise ConnectionError(f"HTTP: {response.status_code}")
|
67 |
|
68 |
return local_file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import os
|
2 |
+
import re
|
3 |
import shutil
|
4 |
import requests
|
5 |
from tqdm import tqdm
|
6 |
from datetime import datetime
|
7 |
+
from zoneinfo import ZoneInfo
|
8 |
+
from tzlocal import get_localzone
|
9 |
|
10 |
|
11 |
LANG = os.getenv("language")
|
|
|
24 |
}
|
25 |
|
26 |
|
27 |
+
def timestamp(naive_time: datetime = None, target_tz=ZoneInfo("Asia/Shanghai")):
|
28 |
if not naive_time:
|
29 |
naive_time = datetime.now()
|
30 |
|
31 |
+
local_tz = get_localzone()
|
32 |
+
aware_local = naive_time.replace(tzinfo=local_tz)
|
33 |
+
return aware_local.astimezone(target_tz).strftime("%Y-%m-%d %H:%M:%S")
|
34 |
|
35 |
|
36 |
def mk_dir(dirpath: str):
|
|
|
71 |
raise ConnectionError(f"HTTP: {response.status_code}")
|
72 |
|
73 |
return local_file
|
74 |
+
|
75 |
+
|
76 |
+
def extract_fst_url(text):
|
77 |
+
url_pattern = r'(https?://[^\s"]+)'
|
78 |
+
match = re.search(url_pattern, text)
|
79 |
+
if match:
|
80 |
+
return match.group(1)
|
81 |
+
else:
|
82 |
+
return None
|