Skip to content

Commit 7ff3664

Browse files
committed
feat(api): 更新直播相关接口
1 parent 20d7ada commit 7ff3664

3 files changed

Lines changed: 114 additions & 34 deletions

File tree

src/application/TikTokDownloader.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,10 @@
4040

4141
# from typing import Type
4242
# from webbrowser import open
43-
# from flask import abort
44-
# from flask import request
45-
46-
# from .main_server import Server
47-
# from .main_web_UI import WebUI
4843

4944
__all__ = ["TikTokDownloader"]
5045

5146

52-
def server_tip(function):
53-
async def inner(self, *args, **kwargs):
54-
self.console.print(_("正在启动服务器,如需关闭服务器,请按下 Ctrl + C"))
55-
return await function(self, *args, **kwargs)
56-
57-
return inner
58-
59-
6047
class TikTokDownloader:
6148
VERSION_MAJOR = VERSION_MAJOR
6249
VERSION_MINOR = VERSION_MINOR
@@ -150,7 +137,6 @@ async def disable_function(
150137
"该功能正在重构,未来开发完成重新开放!",
151138
)
152139

153-
@server_tip
154140
async def server(self):
155141
try:
156142
self.console.print(
@@ -169,12 +155,6 @@ async def server(self):
169155
except KeyboardInterrupt:
170156
self.running = False
171157

172-
# def __web_ui_object(self):
173-
# self.server(WebUI, token=False)
174-
175-
# def __server_object(self):
176-
# self.server(Server)
177-
178158
async def __modify_record(self):
179159
await self.change_config("Record")
180160

src/application/main_server.py

Lines changed: 88 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
Reply,
3131
Mix,
3232
MixTikTok,
33+
Live,
34+
LiveTikTok,
3335
)
3436
from ..translation import _
3537
from .main_terminal import TikTok
@@ -45,7 +47,7 @@ def token_dependency(token: str = Header(None)):
4547
if not is_valid_token(token):
4648
raise HTTPException(
4749
status_code=403,
48-
detail=_("无效令牌!"),
50+
detail=_("验证失败!"),
4951
)
5052

5153

@@ -248,6 +250,34 @@ async def handle_mix(extract: Mix, token: str = Depends(token_dependency)):
248250
return self.success_response(extract, data)
249251
return self.failed_response(extract)
250252

253+
@self.server.post(
254+
"/douyin/live",
255+
summary=_("获取直播数据"),
256+
description=dedent(
257+
_("""
258+
待更新
259+
""")
260+
),
261+
tags=[_("抖音")],
262+
response_model=DataResponse,
263+
)
264+
async def handle_live(extract: Live, token: str = Depends(token_dependency)):
265+
if self.check_live_params(
266+
extract.web_rid,
267+
extract.room_id,
268+
extract.sec_user_id,
269+
):
270+
if data := await self.handle_live(
271+
extract,
272+
):
273+
return self.success_response(extract, data[0])
274+
return self.failed_response(extract)
275+
return DataResponse(
276+
message=_("参数错误!"),
277+
data=None,
278+
params=extract.model_dump(),
279+
)
280+
251281
@self.server.post(
252282
"/douyin/comment",
253283
summary=_("获取作品评论数据"),
@@ -314,7 +344,7 @@ async def handle_reply(extract: Reply, token: str = Depends(token_dependency)):
314344
tags=[_("抖音")],
315345
response_model=DataResponse,
316346
)
317-
async def handle_general(
347+
async def handle_search_general(
318348
extract: GeneralSearch, token: str = Depends(token_dependency)
319349
):
320350
return await self.handle_search(extract)
@@ -330,7 +360,7 @@ async def handle_general(
330360
tags=[_("抖音")],
331361
response_model=DataResponse,
332362
)
333-
async def handle_video(
363+
async def handle_search_video(
334364
extract: VideoSearch, token: str = Depends(token_dependency)
335365
):
336366
return await self.handle_search(extract)
@@ -346,7 +376,7 @@ async def handle_video(
346376
tags=[_("抖音")],
347377
response_model=DataResponse,
348378
)
349-
async def handle_user(
379+
async def handle_search_user(
350380
extract: UserSearch, token: str = Depends(token_dependency)
351381
):
352382
return await self.handle_search(extract)
@@ -362,7 +392,7 @@ async def handle_user(
362392
tags=[_("抖音")],
363393
response_model=DataResponse,
364394
)
365-
async def handle_live(
395+
async def handle_search_live(
366396
extract: LiveSearch, token: str = Depends(token_dependency)
367397
):
368398
return await self.handle_search(extract)
@@ -452,6 +482,27 @@ async def handle_mix_tiktok(
452482
return self.success_response(extract, data)
453483
return self.failed_response(extract)
454484

485+
@self.server.post(
486+
"/tiktok/live",
487+
summary=_("获取直播数据"),
488+
description=dedent(
489+
_("""
490+
待更新
491+
""")
492+
),
493+
tags=["TikTok"],
494+
response_model=DataResponse,
495+
)
496+
async def handle_live_tiktok(
497+
extract: Live, token: str = Depends(token_dependency)
498+
):
499+
if data := await self.handle_live(
500+
extract,
501+
True,
502+
):
503+
return self.success_response(extract, data[0])
504+
return self.failed_response(extract)
505+
455506
async def handle_search(self, extract):
456507
if data := await self.deal_search_data(
457508
extract,
@@ -523,3 +574,35 @@ def generate_mix_params(mix_id: str = None, detail_id: str = None):
523574
if mix_id:
524575
return True, mix_id
525576
return (False, detail_id) if detail_id else (None, None)
577+
578+
@staticmethod
579+
def check_live_params(
580+
web_rid: str = None,
581+
room_id: str = None,
582+
sec_user_id: str = None,
583+
) -> bool:
584+
return bool(web_rid or room_id and sec_user_id)
585+
586+
async def handle_live(self, extract: Live | LiveTikTok, tiktok=False):
587+
if tiktok:
588+
data = await self.get_live_data_tiktok(
589+
extract.room_id,
590+
extract.cookie,
591+
extract.proxy,
592+
)
593+
else:
594+
data = await self.get_live_data(
595+
extract.web_rid,
596+
extract.room_id,
597+
extract.sec_user_id,
598+
extract.cookie,
599+
extract.proxy,
600+
)
601+
if extract.source:
602+
return data
603+
return await self.extractor.run(
604+
[data],
605+
None,
606+
"live",
607+
tiktok=tiktok,
608+
)

src/application/main_terminal.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,10 +1108,33 @@ def _choice_live_quality(
11081108
return None
11091109
return list(flv_items.values())[i], list(m3u8_items.values())[i]
11101110

1111-
async def live_interactive(
1111+
async def get_live_data(
11121112
self,
1113+
web_rid: str = None,
1114+
room_id: str = None,
1115+
sec_user_id: str = None,
11131116
cookie: str = None,
11141117
proxy: str = None,
1118+
):
1119+
return await Live(
1120+
self.parameter,
1121+
cookie,
1122+
proxy,
1123+
web_rid,
1124+
room_id,
1125+
sec_user_id,
1126+
).run()
1127+
1128+
async def get_live_data_tiktok(
1129+
self,
1130+
room_id: str = None,
1131+
cookie: str = None,
1132+
proxy: str = None,
1133+
):
1134+
return await LiveTikTok(self.parameter, cookie, proxy, room_id).run()
1135+
1136+
async def live_interactive(
1137+
self,
11151138
*args,
11161139
):
11171140
while url := self._inquire_input(_("直播")):
@@ -1121,9 +1144,7 @@ async def live_interactive(
11211144
if not params:
11221145
self.logger.warning(_("{} 提取直播 ID 失败").format(url=url))
11231146
continue
1124-
live_data = [
1125-
await Live(self.parameter, cookie, proxy, **i).run() for i in params
1126-
]
1147+
live_data = [await self.get_live_data(**i) for i in params]
11271148
if not [i for i in live_data if i]:
11281149
self.logger.warning(_("获取直播数据失败"))
11291150
continue
@@ -1134,18 +1155,14 @@ async def live_interactive(
11341155

11351156
async def live_interactive_tiktok(
11361157
self,
1137-
cookie: str = None,
1138-
proxy: str = None,
11391158
*args,
11401159
):
11411160
while url := self._inquire_input(_("直播")):
11421161
__, ids = await self.links_tiktok.run(url, type_="live")
11431162
if not ids:
11441163
self.logger.warning(_("{} 提取直播 ID 失败").format(url=url))
11451164
continue
1146-
live_data = [
1147-
await LiveTikTok(self.parameter, cookie, proxy, i).run() for i in ids
1148-
]
1165+
live_data = [await self.get_live_data_tiktok(i) for i in ids]
11491166
if not [i for i in live_data if i]:
11501167
self.logger.warning(_("获取直播数据失败"))
11511168
continue

0 commit comments

Comments
 (0)