add new func

This commit is contained in:
陈柯宇$ 2023-02-22 20:55:15 +08:00
parent ded3850ecc
commit f2c0dbb7ce
3 changed files with 38 additions and 15 deletions

View File

@ -27,10 +27,11 @@ from TikTokResult import Result
class TikTok(object):
def __init__(self):
def __init__(self, download_deep):
self.urls = Urls()
self.utils = Utils()
self.result = Result()
self.download_deep = download_deep
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'referer': 'https://www.douyin.com/',
@ -63,7 +64,7 @@ class TikTok(object):
# 合集
# https://www.douyin.com/collection/7093490319085307918
urlstr = str(r.request.path_url)
print("urlstr:", urlstr)
if "/share/user/" in urlstr:
# 获取用户 sec_uid
if '?' in r.request.path_url:
@ -73,6 +74,14 @@ class TikTok(object):
for one in re.finditer(r'user\/([\d\D]*)', str(r.request.path_url)):
key = one.group(1)
key_type = "user"
elif "/user/" in urlstr:
if '?' in r.request.path_url:
for one in re.finditer(r'user\/([\d\D]*)([?])', str(r.request.path_url)):
key = one.group(1)
else:
for one in re.finditer(r'user\/([\d\D]*)', str(r.request.path_url)):
key = one.group(1)
key_type = "user"
elif "/share/video/" in urlstr:
# 获取作品 aweme_id
key = re.findall('video/(\d+)?', urlstr)[0]
@ -84,7 +93,10 @@ class TikTok(object):
elif "live.douyin.com" in r.url:
key = r.url.replace('https://live.douyin.com/', '')
key_type = "live"
elif "/video/" in urlstr:
key = re.findall('video/(\d+)?', urlstr)[0]
key_type = "aweme"
print("key:", key)
if key is None or key_type is None:
print('[ 错误 ]:输入链接有误!无法获取 id\r')
return key_type, key
@ -100,8 +112,11 @@ class TikTok(object):
# 单作品接口返回 'aweme_detail'
# 主页作品接口返回 'aweme_list'->['aweme_detail']
jx_url = self.urls.POST_DETAIL + self.utils.getXbogus(
url=f'aweme_id={aweme_id}&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333')
info = self.utils.getXbogus(url=f'aweme_id={aweme_id}&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333')
if info:
jx_url = self.urls.POST_DETAIL + info
#self.utils.getXbogus(
#url=f'aweme_id={aweme_id}&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333')
while True:
# 接口不稳定, 有时服务器不返回数据, 需要重新获取
@ -143,8 +158,10 @@ class TikTok(object):
print("[ 提示 ]:正在获取所有作品数据请稍后...\r")
print("[ 提示 ]:会进行多次请求,等待时间较长...\r\n")
times = 0
while True:
while times < self.download_deep:
times = times + 1
if times > 2:
break
print("[ 提示 ]:正在对 [主页] 进行第 " + str(times) + " 次请求...\r")
if mode == "post":
url = self.urls.USER_POST + self.utils.getXbogus(

View File

@ -36,6 +36,8 @@ def argument():
type=bool, required=False, default=True)
parser.add_argument("--mode", "-M", help="link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post",
type=str, required=False, default="post")
parser.add_argument("--deep", "-d", help="下载深度限制",
type=int, required=False, default=2)
args = parser.parse_args()
return args
@ -44,7 +46,7 @@ def argument():
def main():
utils = Utils()
args = argument()
tk = TikTok()
tk = TikTok(args.deep)
url = tk.getShareLink(args.link)
key_type, key = tk.getKey(url)
if key is None or key_type is None:

View File

@ -52,15 +52,19 @@ class Utils(object):
def getXbogus(self, url, headers=None):
urls = Urls()
try:
response = json.loads(requests.post(
url= urls.GET_XB_PATH, data={"param" : url}, headers=headers).text)
params = response["param"]
xb = response["X-Bogus"]
except Exception as e:
print('[ 错误 ]:X-Bogus接口异常, 可能是访问流量高, 接口限流请稍等几分钟再次尝试')
times = 0
while times < 3:
try:
response = json.loads(requests.post(
url= urls.GET_XB_PATH, data={"param" : url}, headers=headers).text)
params = response["param"]
xb = response["X-Bogus"]
break
except Exception as e:
print('[ 错误 ]:X-Bogus接口异常, 可能是访问流量高, 接口限流请稍等几分钟再次尝试')
times += 1
if times == 3:
return
return params #, xb