feat(tiktok): 增加下载前n个作品功能

This commit is contained in:
imgyh 2023-03-02 19:34:39 +08:00
parent 7cb1c4be5c
commit 4efeb62701
2 changed files with 57 additions and 9 deletions

View File

@ -136,10 +136,14 @@ class TikTok(object):
# 传入 url 支持 https://www.iesdouyin.com 与 https://v.douyin.com
# 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)
if sec_uid is None:
return None
if number <= 0:
numflag = False
else:
numflag = True
max_cursor = 0
awemeList = []
@ -178,6 +182,13 @@ class TikTok(object):
# 深拷贝 dict 不然list里面全是同样的数据
datanew, dataraw = self.getAwemeInfo(aweme_id)
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 = datadict["max_cursor"]
@ -266,10 +277,14 @@ class TikTok(object):
print('[ 📺 ]:复制链接使用下载工具下载')
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)
if mix_id is None:
return None
if number <= 0:
numflag = False
else:
numflag = True
cursor = 0
awemeList = []
@ -302,6 +317,13 @@ class TikTok(object):
# 深拷贝 dict 不然list里面全是同样的数据
datanew, dataraw = self.getAwemeInfo(aweme_id)
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
cursor = datadict["cursor"]
@ -315,10 +337,14 @@ class TikTok(object):
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)
if sec_uid is None:
return None
if number <= 0:
numflag = False
else:
numflag = True
cursor = 0
mixIdNameDict = {}
@ -347,6 +373,13 @@ class TikTok(object):
for mix in datadict["mix_infos"]:
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
cursor = datadict["cursor"]
@ -360,10 +393,14 @@ class TikTok(object):
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)
if music_id is None:
return None
if number <= 0:
numflag = False
else:
numflag = True
cursor = 0
awemeList = []
@ -396,6 +433,13 @@ class TikTok(object):
# 深拷贝 dict 不然list里面全是同样的数据
datanew, dataraw = self.getAwemeInfo(aweme_id)
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 = datadict["cursor"]

View File

@ -23,7 +23,7 @@ from TikTokUtils import Utils
def argument():
parser = argparse.ArgumentParser(description='抖音批量下载工具 使用帮助')
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)",
type=str, required=True)
parser.add_argument("--path", "-p", help="下载保存位置",
@ -36,6 +36,10 @@ def argument():
type=Utils().str2bool, required=False, default=True)
parser.add_argument("--mode", "-M", help="link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为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()
return args
@ -50,13 +54,13 @@ def main():
if key is None or key_type is None:
return
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,
savePath=args.path)
elif key_type == "user" and args.mode == 'mix':
if not os.path.exists(args.path):
os.mkdir(args.path)
mixIdNameDict = tk.getUserAllMixInfo(key, 35)
mixIdNameDict = tk.getUserAllMixInfo(key, 35, args.number)
for mix_id in mixIdNameDict:
print(f'[ 提示 ]:正在下载合集 [{mixIdNameDict[mix_id]}] 中的作品\r\n')
@ -66,11 +70,11 @@ def main():
savePath=os.path.join(args.path, mix_file_name))
print(f'[ 提示 ]:合集 [{mixIdNameDict[mix_id]}] 中的作品下载完成\r\n')
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,
savePath=args.path)
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,
savePath=args.path)
elif key_type == "aweme":