mirror of
https://github.com/imgyh/tiktok.git
synced 2026-01-02 18:18:27 +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):
|
class TikTok(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, download_deep):
|
||||||
self.urls = Urls()
|
self.urls = Urls()
|
||||||
self.utils = Utils()
|
self.utils = Utils()
|
||||||
self.result = Result()
|
self.result = Result()
|
||||||
|
self.download_deep = download_deep
|
||||||
self.headers = {
|
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',
|
'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/',
|
'referer': 'https://www.douyin.com/',
|
||||||
@ -63,7 +64,7 @@ class TikTok(object):
|
|||||||
# 合集
|
# 合集
|
||||||
# https://www.douyin.com/collection/7093490319085307918
|
# https://www.douyin.com/collection/7093490319085307918
|
||||||
urlstr = str(r.request.path_url)
|
urlstr = str(r.request.path_url)
|
||||||
|
print("urlstr:", urlstr)
|
||||||
if "/share/user/" in urlstr:
|
if "/share/user/" in urlstr:
|
||||||
# 获取用户 sec_uid
|
# 获取用户 sec_uid
|
||||||
if '?' in r.request.path_url:
|
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)):
|
for one in re.finditer(r'user\/([\d\D]*)', str(r.request.path_url)):
|
||||||
key = one.group(1)
|
key = one.group(1)
|
||||||
key_type = "user"
|
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:
|
elif "/share/video/" in urlstr:
|
||||||
# 获取作品 aweme_id
|
# 获取作品 aweme_id
|
||||||
key = re.findall('video/(\d+)?', urlstr)[0]
|
key = re.findall('video/(\d+)?', urlstr)[0]
|
||||||
@ -84,7 +93,10 @@ class TikTok(object):
|
|||||||
elif "live.douyin.com" in r.url:
|
elif "live.douyin.com" in r.url:
|
||||||
key = r.url.replace('https://live.douyin.com/', '')
|
key = r.url.replace('https://live.douyin.com/', '')
|
||||||
key_type = "live"
|
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:
|
if key is None or key_type is None:
|
||||||
print('[ 错误 ]:输入链接有误!无法获取 id\r')
|
print('[ 错误 ]:输入链接有误!无法获取 id\r')
|
||||||
return key_type, key
|
return key_type, key
|
||||||
@ -100,8 +112,11 @@ class TikTok(object):
|
|||||||
|
|
||||||
# 单作品接口返回 'aweme_detail'
|
# 单作品接口返回 'aweme_detail'
|
||||||
# 主页作品接口返回 'aweme_list'->['aweme_detail']
|
# 主页作品接口返回 'aweme_list'->['aweme_detail']
|
||||||
jx_url = self.urls.POST_DETAIL + self.utils.getXbogus(
|
info = self.utils.getXbogus(url=f'aweme_id={aweme_id}&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333')
|
||||||
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:
|
while True:
|
||||||
# 接口不稳定, 有时服务器不返回数据, 需要重新获取
|
# 接口不稳定, 有时服务器不返回数据, 需要重新获取
|
||||||
@ -143,8 +158,10 @@ class TikTok(object):
|
|||||||
print("[ 提示 ]:正在获取所有作品数据请稍后...\r")
|
print("[ 提示 ]:正在获取所有作品数据请稍后...\r")
|
||||||
print("[ 提示 ]:会进行多次请求,等待时间较长...\r\n")
|
print("[ 提示 ]:会进行多次请求,等待时间较长...\r\n")
|
||||||
times = 0
|
times = 0
|
||||||
while True:
|
while times < self.download_deep:
|
||||||
times = times + 1
|
times = times + 1
|
||||||
|
if times > 2:
|
||||||
|
break
|
||||||
print("[ 提示 ]:正在对 [主页] 进行第 " + str(times) + " 次请求...\r")
|
print("[ 提示 ]:正在对 [主页] 进行第 " + str(times) + " 次请求...\r")
|
||||||
if mode == "post":
|
if mode == "post":
|
||||||
url = self.urls.USER_POST + self.utils.getXbogus(
|
url = self.urls.USER_POST + self.utils.getXbogus(
|
||||||
|
|||||||
@ -36,6 +36,8 @@ def argument():
|
|||||||
type=bool, required=False, default=True)
|
type=bool, required=False, default=True)
|
||||||
parser.add_argument("--mode", "-M", help="link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post",
|
parser.add_argument("--mode", "-M", help="link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post",
|
||||||
type=str, required=False, default="post")
|
type=str, required=False, default="post")
|
||||||
|
parser.add_argument("--deep", "-d", help="下载深度限制",
|
||||||
|
type=int, required=False, default=2)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
return args
|
return args
|
||||||
@ -44,7 +46,7 @@ def argument():
|
|||||||
def main():
|
def main():
|
||||||
utils = Utils()
|
utils = Utils()
|
||||||
args = argument()
|
args = argument()
|
||||||
tk = TikTok()
|
tk = TikTok(args.deep)
|
||||||
url = tk.getShareLink(args.link)
|
url = tk.getShareLink(args.link)
|
||||||
key_type, key = tk.getKey(url)
|
key_type, key = tk.getKey(url)
|
||||||
if key is None or key_type is None:
|
if key is None or key_type is None:
|
||||||
|
|||||||
@ -52,15 +52,19 @@ class Utils(object):
|
|||||||
|
|
||||||
def getXbogus(self, url, headers=None):
|
def getXbogus(self, url, headers=None):
|
||||||
urls = Urls()
|
urls = Urls()
|
||||||
|
times = 0
|
||||||
|
while times < 3:
|
||||||
try:
|
try:
|
||||||
response = json.loads(requests.post(
|
response = json.loads(requests.post(
|
||||||
url= urls.GET_XB_PATH, data={"param" : url}, headers=headers).text)
|
url= urls.GET_XB_PATH, data={"param" : url}, headers=headers).text)
|
||||||
params = response["param"]
|
params = response["param"]
|
||||||
xb = response["X-Bogus"]
|
xb = response["X-Bogus"]
|
||||||
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('[ 错误 ]:X-Bogus接口异常, 可能是访问流量高, 接口限流请稍等几分钟再次尝试')
|
print('[ 错误 ]:X-Bogus接口异常, 可能是访问流量高, 接口限流请稍等几分钟再次尝试')
|
||||||
|
times += 1
|
||||||
|
if times == 3:
|
||||||
return
|
return
|
||||||
|
|
||||||
return params #, xb
|
return params #, xb
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user