mirror of
https://github.com/imgyh/tiktok.git
synced 2025-05-31 01:49:20 +08:00
feat(tiktok): 增加下载前n个作品功能
This commit is contained in:
parent
7cb1c4be5c
commit
4efeb62701
52
TikTok.py
52
TikTok.py
@ -136,10 +136,14 @@ class TikTok(object):
|
|||||||
|
|
||||||
# 传入 url 支持 https://www.iesdouyin.com 与 https://v.douyin.com
|
# 传入 url 支持 https://www.iesdouyin.com 与 https://v.douyin.com
|
||||||
# mode : post | like 模式选择 like为用户点赞 post为用户发布
|
# mode : post | like 模式选择 like为用户点赞 post为用户发布
|
||||||
def getUserInfo(self, sec_uid, mode="post", count=35):
|
def getUserInfo(self, sec_uid, mode="post", count=35, number=0):
|
||||||
print('[ 提示 ]:正在请求的用户 id = %s\r\n' % sec_uid)
|
print('[ 提示 ]:正在请求的用户 id = %s\r\n' % sec_uid)
|
||||||
if sec_uid is None:
|
if sec_uid is None:
|
||||||
return None
|
return None
|
||||||
|
if number <= 0:
|
||||||
|
numflag = False
|
||||||
|
else:
|
||||||
|
numflag = True
|
||||||
|
|
||||||
max_cursor = 0
|
max_cursor = 0
|
||||||
awemeList = []
|
awemeList = []
|
||||||
@ -178,6 +182,13 @@ class TikTok(object):
|
|||||||
# 深拷贝 dict 不然list里面全是同样的数据
|
# 深拷贝 dict 不然list里面全是同样的数据
|
||||||
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
||||||
awemeList.append(copy.deepcopy(datanew))
|
awemeList.append(copy.deepcopy(datanew))
|
||||||
|
if numflag:
|
||||||
|
number-=1
|
||||||
|
if number==0:
|
||||||
|
break
|
||||||
|
if numflag and number==0:
|
||||||
|
print("\r\n[ 提示 ]: [主页] 下指定数量作品数据获取完成...\r\n")
|
||||||
|
break
|
||||||
|
|
||||||
# 更新 max_cursor
|
# 更新 max_cursor
|
||||||
max_cursor = datadict["max_cursor"]
|
max_cursor = datadict["max_cursor"]
|
||||||
@ -266,10 +277,14 @@ class TikTok(object):
|
|||||||
print('[ 📺 ]:复制链接使用下载工具下载')
|
print('[ 📺 ]:复制链接使用下载工具下载')
|
||||||
return self.result.liveDict
|
return self.result.liveDict
|
||||||
|
|
||||||
def getMixInfo(self, mix_id: str, count=35):
|
def getMixInfo(self, mix_id: str, count=35, number=0):
|
||||||
print('[ 提示 ]:正在请求的合集 id = %s\r\n' % mix_id)
|
print('[ 提示 ]:正在请求的合集 id = %s\r\n' % mix_id)
|
||||||
if mix_id is None:
|
if mix_id is None:
|
||||||
return None
|
return None
|
||||||
|
if number <= 0:
|
||||||
|
numflag = False
|
||||||
|
else:
|
||||||
|
numflag = True
|
||||||
|
|
||||||
cursor = 0
|
cursor = 0
|
||||||
awemeList = []
|
awemeList = []
|
||||||
@ -302,6 +317,13 @@ class TikTok(object):
|
|||||||
# 深拷贝 dict 不然list里面全是同样的数据
|
# 深拷贝 dict 不然list里面全是同样的数据
|
||||||
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
||||||
awemeList.append(copy.deepcopy(datanew))
|
awemeList.append(copy.deepcopy(datanew))
|
||||||
|
if numflag:
|
||||||
|
number -= 1
|
||||||
|
if number == 0:
|
||||||
|
break
|
||||||
|
if numflag and number == 0:
|
||||||
|
print("\r\n[ 提示 ]:[合集] 下指定数量作品数据获取完成...\r\n")
|
||||||
|
break
|
||||||
|
|
||||||
# 更新 max_cursor
|
# 更新 max_cursor
|
||||||
cursor = datadict["cursor"]
|
cursor = datadict["cursor"]
|
||||||
@ -315,10 +337,14 @@ class TikTok(object):
|
|||||||
|
|
||||||
return awemeList
|
return awemeList
|
||||||
|
|
||||||
def getUserAllMixInfo(self, sec_uid, count=35):
|
def getUserAllMixInfo(self, sec_uid, count=35, number=0):
|
||||||
print('[ 提示 ]:正在请求的用户 id = %s\r\n' % sec_uid)
|
print('[ 提示 ]:正在请求的用户 id = %s\r\n' % sec_uid)
|
||||||
if sec_uid is None:
|
if sec_uid is None:
|
||||||
return None
|
return None
|
||||||
|
if number <= 0:
|
||||||
|
numflag = False
|
||||||
|
else:
|
||||||
|
numflag = True
|
||||||
|
|
||||||
cursor = 0
|
cursor = 0
|
||||||
mixIdNameDict = {}
|
mixIdNameDict = {}
|
||||||
@ -347,6 +373,13 @@ class TikTok(object):
|
|||||||
|
|
||||||
for mix in datadict["mix_infos"]:
|
for mix in datadict["mix_infos"]:
|
||||||
mixIdNameDict[mix["mix_id"]] = mix["mix_name"]
|
mixIdNameDict[mix["mix_id"]] = mix["mix_name"]
|
||||||
|
if numflag:
|
||||||
|
number -= 1
|
||||||
|
if number == 0:
|
||||||
|
break
|
||||||
|
if numflag and number == 0:
|
||||||
|
print("\r\n[ 提示 ]:[合集列表] 下指定数量合集数据获取完成...\r\n")
|
||||||
|
break
|
||||||
|
|
||||||
# 更新 max_cursor
|
# 更新 max_cursor
|
||||||
cursor = datadict["cursor"]
|
cursor = datadict["cursor"]
|
||||||
@ -360,10 +393,14 @@ class TikTok(object):
|
|||||||
|
|
||||||
return mixIdNameDict
|
return mixIdNameDict
|
||||||
|
|
||||||
def getMusicInfo(self, music_id: str, count=35):
|
def getMusicInfo(self, music_id: str, count=35, number=0):
|
||||||
print('[ 提示 ]:正在请求的音乐集合 id = %s\r\n' % music_id)
|
print('[ 提示 ]:正在请求的音乐集合 id = %s\r\n' % music_id)
|
||||||
if music_id is None:
|
if music_id is None:
|
||||||
return None
|
return None
|
||||||
|
if number <= 0:
|
||||||
|
numflag = False
|
||||||
|
else:
|
||||||
|
numflag = True
|
||||||
|
|
||||||
cursor = 0
|
cursor = 0
|
||||||
awemeList = []
|
awemeList = []
|
||||||
@ -396,6 +433,13 @@ class TikTok(object):
|
|||||||
# 深拷贝 dict 不然list里面全是同样的数据
|
# 深拷贝 dict 不然list里面全是同样的数据
|
||||||
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
datanew, dataraw = self.getAwemeInfo(aweme_id)
|
||||||
awemeList.append(copy.deepcopy(datanew))
|
awemeList.append(copy.deepcopy(datanew))
|
||||||
|
if numflag:
|
||||||
|
number -= 1
|
||||||
|
if number == 0:
|
||||||
|
break
|
||||||
|
if numflag and number == 0:
|
||||||
|
print("\r\n[ 提示 ]:[音乐集合] 下指定数量作品数据获取完成...\r\n")
|
||||||
|
break
|
||||||
|
|
||||||
# 更新 cursor
|
# 更新 cursor
|
||||||
cursor = datadict["cursor"]
|
cursor = datadict["cursor"]
|
||||||
|
@ -23,7 +23,7 @@ from TikTokUtils import Utils
|
|||||||
def argument():
|
def argument():
|
||||||
parser = argparse.ArgumentParser(description='抖音批量下载工具 使用帮助')
|
parser = argparse.ArgumentParser(description='抖音批量下载工具 使用帮助')
|
||||||
parser.add_argument("--link", "-l",
|
parser.add_argument("--link", "-l",
|
||||||
help="1.作品(视频或图集)、合集、个人主页抖音分享链接(删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/)\r\n"
|
help="1.作品(视频或图集)、合集、音乐集合、个人主页抖音分享链接(删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/)\r\n" +
|
||||||
"2.解析直播网页版网址(https://live.douyin.com/802939216127)",
|
"2.解析直播网页版网址(https://live.douyin.com/802939216127)",
|
||||||
type=str, required=True)
|
type=str, required=True)
|
||||||
parser.add_argument("--path", "-p", help="下载保存位置",
|
parser.add_argument("--path", "-p", help="下载保存位置",
|
||||||
@ -36,6 +36,10 @@ def argument():
|
|||||||
type=Utils().str2bool, required=False, default=True)
|
type=Utils().str2bool, 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("--number", "-n",
|
||||||
|
help="1.当下载单个合集、音乐集合、主页作品(post模式)和喜欢(like模式)时, 可设置下载前n个作品, 默认为0全部下载\r\n" +
|
||||||
|
"2.当下载主页下所有合集(mix模式)时, 设置下载前n个合集下所有作品, 默认为0全部下载",
|
||||||
|
type=int, required=False, default=0)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
return args
|
return args
|
||||||
@ -50,13 +54,13 @@ def main():
|
|||||||
if key is None or key_type is None:
|
if key is None or key_type is None:
|
||||||
return
|
return
|
||||||
elif key_type == "user" and args.mode != 'mix':
|
elif key_type == "user" and args.mode != 'mix':
|
||||||
datalist = tk.getUserInfo(key, args.mode, 35)
|
datalist = tk.getUserInfo(key, args.mode, 35, args.number)
|
||||||
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
||||||
savePath=args.path)
|
savePath=args.path)
|
||||||
elif key_type == "user" and args.mode == 'mix':
|
elif key_type == "user" and args.mode == 'mix':
|
||||||
if not os.path.exists(args.path):
|
if not os.path.exists(args.path):
|
||||||
os.mkdir(args.path)
|
os.mkdir(args.path)
|
||||||
mixIdNameDict = tk.getUserAllMixInfo(key, 35)
|
mixIdNameDict = tk.getUserAllMixInfo(key, 35, args.number)
|
||||||
|
|
||||||
for mix_id in mixIdNameDict:
|
for mix_id in mixIdNameDict:
|
||||||
print(f'[ 提示 ]:正在下载合集 [{mixIdNameDict[mix_id]}] 中的作品\r\n')
|
print(f'[ 提示 ]:正在下载合集 [{mixIdNameDict[mix_id]}] 中的作品\r\n')
|
||||||
@ -66,11 +70,11 @@ def main():
|
|||||||
savePath=os.path.join(args.path, mix_file_name))
|
savePath=os.path.join(args.path, mix_file_name))
|
||||||
print(f'[ 提示 ]:合集 [{mixIdNameDict[mix_id]}] 中的作品下载完成\r\n')
|
print(f'[ 提示 ]:合集 [{mixIdNameDict[mix_id]}] 中的作品下载完成\r\n')
|
||||||
elif key_type == "mix":
|
elif key_type == "mix":
|
||||||
datalist = tk.getMixInfo(key,35)
|
datalist = tk.getMixInfo(key,35, args.number)
|
||||||
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
||||||
savePath=args.path)
|
savePath=args.path)
|
||||||
elif key_type == "music":
|
elif key_type == "music":
|
||||||
datalist = tk.getMusicInfo(key,35)
|
datalist = tk.getMusicInfo(key,35, args.number)
|
||||||
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
tk.userDownload(awemeList=datalist, music=args.music, cover=args.cover, avatar=args.avatar,
|
||||||
savePath=args.path)
|
savePath=args.path)
|
||||||
elif key_type == "aweme":
|
elif key_type == "aweme":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user