admin commited on
Commit
0d11e5e
·
1 Parent(s): 49e3a43
Files changed (5) hide show
  1. app.py +1 -4
  2. modules/bili.py +13 -16
  3. modules/bvid2acid.py +1 -4
  4. modules/tiktok.py +16 -21
  5. 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 extract_fst_url(text):
41
- url_pattern = r'(https?://[^\s"]+)'
42
- match = re.search(url_pattern, text)
43
- if match:
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 = extract_fst_url(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
- "8.20 Njc:/ [email protected] 11/03 黑塔女士举世无双!# 大黑塔 # 黑塔 # 崩坏星穹铁道 # 再创世的凯歌 # 天才俱乐部 https://v.douyin.com/8FVe5DzarE0/ 复制此链接,打开Dou音搜索,直接观看视频!",
 
 
 
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
- return naive_time.strftime("%Y-%m-%d %H:%M:%S")
 
 
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