mirror of
https://github.com/imgyh/tiktok.git
synced 2025-10-06 20:50:00 +08:00
add new func
This commit is contained in:
parent
ded3850ecc
commit
f2c0dbb7ce
29
TikTok.py
29
TikTok.py
@ -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(
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user