mirror of
https://github.com/Evil0ctal/Douyin_TikTok_Download_API.git
synced 2025-04-20 22:40:08 +08:00
🚀: Change Retry time for Douyin API
This commit is contained in:
parent
0badf9a9d4
commit
bc5315b177
38
scraper.py
38
scraper.py
@ -2,8 +2,8 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
# @Author: https://github.com/Evil0ctal/
|
# @Author: https://github.com/Evil0ctal/
|
||||||
# @Time: 2021/11/06
|
# @Time: 2021/11/06
|
||||||
# @Update: 2022/12/25
|
# @Update: 2023/02/19
|
||||||
# @Version: 3.1.9
|
# @Version: 3.2.0
|
||||||
# @Function:
|
# @Function:
|
||||||
# 核心代码,估值1块(๑•̀ㅂ•́)و✧
|
# 核心代码,估值1块(๑•̀ㅂ•́)و✧
|
||||||
# 用于爬取Douyin/TikTok数据并以字典形式返回。
|
# 用于爬取Douyin/TikTok数据并以字典形式返回。
|
||||||
@ -108,7 +108,7 @@ class Scraper:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# 转换链接/convert url
|
# 转换链接/convert url
|
||||||
@retry(stop=stop_after_attempt(3), wait=wait_random(min=1, max=2))
|
@retry(stop=stop_after_attempt(4), wait=wait_fixed(7))
|
||||||
async def convert_share_urls(self, url: str) -> Union[str, None]:
|
async def convert_share_urls(self, url: str) -> Union[str, None]:
|
||||||
"""
|
"""
|
||||||
用于将分享链接(短链接)转换为原始链接/Convert share links (short links) to original links
|
用于将分享链接(短链接)转换为原始链接/Convert share links (short links) to original links
|
||||||
@ -151,7 +151,8 @@ class Scraper:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('获取原始链接失败!')
|
print('获取原始链接失败!')
|
||||||
print(e)
|
print(e)
|
||||||
return None
|
# return None
|
||||||
|
raise e
|
||||||
else:
|
else:
|
||||||
print('该链接为原始链接,无需转换,原始链接为: {}'.format(url))
|
print('该链接为原始链接,无需转换,原始链接为: {}'.format(url))
|
||||||
return url
|
return url
|
||||||
@ -225,7 +226,7 @@ class Scraper:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
# 获取单个抖音视频数据/Get single Douyin video data
|
# 获取单个抖音视频数据/Get single Douyin video data
|
||||||
@retry(stop=stop_after_attempt(3), wait=wait_random(min=1, max=2))
|
@retry(stop=stop_after_attempt(4), wait=wait_fixed(7))
|
||||||
async def get_douyin_video_data(self, video_id: str) -> Union[dict, None]:
|
async def get_douyin_video_data(self, video_id: str) -> Union[dict, None]:
|
||||||
"""
|
"""
|
||||||
:param video_id: str - 抖音视频id
|
:param video_id: str - 抖音视频id
|
||||||
@ -252,10 +253,12 @@ class Scraper:
|
|||||||
return video_data
|
return video_data
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('获取抖音视频数据失败!原因:{}'.format(e))
|
print('获取抖音视频数据失败!原因:{}'.format(e))
|
||||||
return None
|
# return None
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
# 获取单个抖音直播视频数据/Get single Douyin Live video data
|
# 获取单个抖音直播视频数据/Get single Douyin Live video data
|
||||||
@retry(stop=stop_after_attempt(3), wait=wait_random(min=1, max=2))
|
@retry(stop=stop_after_attempt(4), wait=wait_fixed(7))
|
||||||
async def get_douyin_live_video_data(self, web_rid: str) -> Union[dict, None]:
|
async def get_douyin_live_video_data(self, web_rid: str) -> Union[dict, None]:
|
||||||
print('正在获取抖音视频数据...')
|
print('正在获取抖音视频数据...')
|
||||||
try:
|
try:
|
||||||
@ -274,7 +277,8 @@ class Scraper:
|
|||||||
return video_data
|
return video_data
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('获取抖音视频数据失败!原因:{}'.format(e))
|
print('获取抖音视频数据失败!原因:{}'.format(e))
|
||||||
return None
|
# return None
|
||||||
|
raise e
|
||||||
|
|
||||||
"""__________________________________________⬇️TikTok methods(TikTok方法)⬇️______________________________________"""
|
"""__________________________________________⬇️TikTok methods(TikTok方法)⬇️______________________________________"""
|
||||||
|
|
||||||
@ -300,7 +304,7 @@ class Scraper:
|
|||||||
print('获取TikTok视频ID出错了:{}'.format(e))
|
print('获取TikTok视频ID出错了:{}'.format(e))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@retry(stop=stop_after_attempt(3), wait=wait_random(min=1, max=2))
|
@retry(stop=stop_after_attempt(4), wait=wait_fixed(7))
|
||||||
async def get_tiktok_video_data(self, video_id: str) -> Union[dict, None]:
|
async def get_tiktok_video_data(self, video_id: str) -> Union[dict, None]:
|
||||||
"""
|
"""
|
||||||
获取单个视频信息
|
获取单个视频信息
|
||||||
@ -320,7 +324,9 @@ class Scraper:
|
|||||||
return video_data
|
return video_data
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('获取视频信息失败!原因:{}'.format(e))
|
print('获取视频信息失败!原因:{}'.format(e))
|
||||||
return None
|
# return None
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
"""__________________________________________⬇️Hybrid methods(混合方法)⬇️______________________________________"""
|
"""__________________________________________⬇️Hybrid methods(混合方法)⬇️______________________________________"""
|
||||||
|
|
||||||
@ -525,24 +531,24 @@ class Scraper:
|
|||||||
"""__________________________________________⬇️Test methods(测试方法)⬇️______________________________________"""
|
"""__________________________________________⬇️Test methods(测试方法)⬇️______________________________________"""
|
||||||
|
|
||||||
|
|
||||||
async def async_test(douyin_url: str = None, tiktok_url: str = None) -> None:
|
async def async_test(_douyin_url: str = None, _tiktok_url: str = None) -> None:
|
||||||
# 异步测试/Async test
|
# 异步测试/Async test
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
print("正在进行异步测试...")
|
print("正在进行异步测试...")
|
||||||
|
|
||||||
print("正在测试异步获取抖音视频ID方法...")
|
print("正在测试异步获取抖音视频ID方法...")
|
||||||
douyin_id = await api.get_douyin_video_id(douyin_url)
|
douyin_id = await api.get_douyin_video_id(_douyin_url)
|
||||||
print("正在测试异步获取抖音视频数据方法...")
|
print("正在测试异步获取抖音视频数据方法...")
|
||||||
douyin_data = await api.get_douyin_video_data(douyin_id)
|
douyin_data = await api.get_douyin_video_data(douyin_id)
|
||||||
|
|
||||||
print("正在测试异步获取TikTok视频ID方法...")
|
print("正在测试异步获取TikTok视频ID方法...")
|
||||||
tiktok_id = await api.get_tiktok_video_id(tiktok_url)
|
tiktok_id = await api.get_tiktok_video_id(_tiktok_url)
|
||||||
print("正在测试异步获取TikTok视频数据方法...")
|
print("正在测试异步获取TikTok视频数据方法...")
|
||||||
tiktok_data = await api.get_tiktok_video_data(tiktok_id)
|
tiktok_data = await api.get_tiktok_video_data(tiktok_id)
|
||||||
|
|
||||||
print("正在测试异步混合解析方法...")
|
print("正在测试异步混合解析方法...")
|
||||||
douyin_hybrid_data = await api.hybrid_parsing(douyin_url)
|
douyin_hybrid_data = await api.hybrid_parsing(_douyin_url)
|
||||||
tiktok_hybrid_data = await api.hybrid_parsing(tiktok_url)
|
tiktok_hybrid_data = await api.hybrid_parsing(_tiktok_url)
|
||||||
|
|
||||||
# 总耗时/Total time
|
# 总耗时/Total time
|
||||||
total_time = round(time.time() - start_time, 2)
|
total_time = round(time.time() - start_time, 2)
|
||||||
@ -554,4 +560,4 @@ if __name__ == '__main__':
|
|||||||
# 运行测试
|
# 运行测试
|
||||||
douyin_url = 'https://v.douyin.com/rLyrQxA/6.66'
|
douyin_url = 'https://v.douyin.com/rLyrQxA/6.66'
|
||||||
tiktok_url = 'https://vt.tiktok.com/ZSRwWXtdr/'
|
tiktok_url = 'https://vt.tiktok.com/ZSRwWXtdr/'
|
||||||
asyncio.run(async_test(douyin_url=douyin_url, tiktok_url=tiktok_url))
|
asyncio.run(async_test(_douyin_url=douyin_url, _tiktok_url=tiktok_url))
|
||||||
|
14
web_api.py
14
web_api.py
@ -2,8 +2,8 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
# @Author: https://github.com/Evil0ctal/
|
# @Author: https://github.com/Evil0ctal/
|
||||||
# @Time: 2021/11/06
|
# @Time: 2021/11/06
|
||||||
# @Update: 2023/01/12
|
# @Update: 2023/02/19
|
||||||
# @Version: 3.1.2
|
# @Version: 3.1.3
|
||||||
# @Function:
|
# @Function:
|
||||||
# 创建一个接受提交参数的FastAPi应用程序。
|
# 创建一个接受提交参数的FastAPi应用程序。
|
||||||
# 将scraper.py返回的内容以JSON格式返回。
|
# 将scraper.py返回的内容以JSON格式返回。
|
||||||
@ -41,8 +41,8 @@ Rate_Limit = config["Web_API"]["Rate_Limit"]
|
|||||||
|
|
||||||
# 创建FastAPI实例
|
# 创建FastAPI实例
|
||||||
title = "Douyin TikTok Download/Scraper API-V1"
|
title = "Douyin TikTok Download/Scraper API-V1"
|
||||||
version = '3.1.2'
|
version = '3.1.3'
|
||||||
update_time = "2022/12/25"
|
update_time = "2023/02/19"
|
||||||
description = """
|
description = """
|
||||||
#### Description/说明
|
#### Description/说明
|
||||||
<details>
|
<details>
|
||||||
@ -372,6 +372,12 @@ async def get_douyin_video_data(request: Request, douyin_video_url: str = None,
|
|||||||
@app.get("/douyin_live_video_data/", response_model=API_Video_Response, tags=["Douyin"])
|
@app.get("/douyin_live_video_data/", response_model=API_Video_Response, tags=["Douyin"])
|
||||||
@limiter.limit(Rate_Limit)
|
@limiter.limit(Rate_Limit)
|
||||||
async def get_douyin_live_video_data(request: Request, douyin_live_video_url: str = None, web_rid: str = None):
|
async def get_douyin_live_video_data(request: Request, douyin_live_video_url: str = None, web_rid: str = None):
|
||||||
|
"""
|
||||||
|
## 用途/Usage
|
||||||
|
- 获取抖音直播视频数据,参数是视频链接|分享口令
|
||||||
|
- Get the data of a Douyin live video, the parameter is the video link.
|
||||||
|
## 失效待修复/Waiting for repair
|
||||||
|
"""
|
||||||
if web_rid is None or web_rid == '':
|
if web_rid is None or web_rid == '':
|
||||||
# 获取视频ID
|
# 获取视频ID
|
||||||
web_rid = await api.get_douyin_video_id(douyin_live_video_url)
|
web_rid = await api.get_douyin_video_id(douyin_live_video_url)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user