|  | @@ -215,199 +215,199 @@ class HourList:
 | 
	
		
			
				|  |  |              "wx_ver": "8.0.20",
 | 
	
		
			
				|  |  |              "code_ver": "3.62.0"
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        # try:
 | 
	
		
			
				|  |  | -        urllib3.disable_warnings()
 | 
	
		
			
				|  |  | -        r = requests.post(url=url, headers=headers, json=data, proxies=proxies, verify=False)
 | 
	
		
			
				|  |  | -        if "data" not in r.json():
 | 
	
		
			
				|  |  | -            Common.logger(log_type).warning("获取视频feeds错误:{}", r.text)
 | 
	
		
			
				|  |  | -        elif "list" not in r.json()["data"]:
 | 
	
		
			
				|  |  | -            Common.logger(log_type).warning("获取视频feeds无数据,休眠10s:{}", r.json()["data"])
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            # 视频列表数据
 | 
	
		
			
				|  |  | -            feeds = r.json()["data"]["list"]
 | 
	
		
			
				|  |  | -            for i in range(len(feeds)):
 | 
	
		
			
				|  |  | -                # 标题,表情随机加在片头、片尾,或替代句子中间的标点符号
 | 
	
		
			
				|  |  | -                if "title" in feeds[i]:
 | 
	
		
			
				|  |  | -                    befor_video_title = feeds[i]["title"].strip().replace("\n", "") \
 | 
	
		
			
				|  |  | -                        .replace("/", "").replace("\r", "").replace("#", "") \
 | 
	
		
			
				|  |  | -                        .replace(".", "。").replace("\\", "").replace("&NBSP", "") \
 | 
	
		
			
				|  |  | -                        .replace(":", "").replace("*", "").replace("?", "") \
 | 
	
		
			
				|  |  | -                        .replace("?", "").replace('"', "").replace("<", "") \
 | 
	
		
			
				|  |  | -                        .replace(">", "").replace("|", "").replace(" ", "").replace("#表情", "").replace("#符号", "")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    expression = cls.get_expression()
 | 
	
		
			
				|  |  | -                    expression_list = expression[0]
 | 
	
		
			
				|  |  | -                    char_list = expression[1]
 | 
	
		
			
				|  |  | -                    # print(f"expression_list:{expression_list}")
 | 
	
		
			
				|  |  | -                    # print(f"char_list:{char_list}")
 | 
	
		
			
				|  |  | -                    # 随机取一个表情
 | 
	
		
			
				|  |  | -                    expression = random.choice(expression_list)
 | 
	
		
			
				|  |  | -                    # print(f"expression:{expression}")
 | 
	
		
			
				|  |  | -                    # 生成标题list[表情+title, title+表情]
 | 
	
		
			
				|  |  | -                    expression_title_list = [expression + befor_video_title, befor_video_title + expression]
 | 
	
		
			
				|  |  | -                    # print(f"expression_title_list:{expression_title_list}")
 | 
	
		
			
				|  |  | -                    # 从标题list中随机取一个标题
 | 
	
		
			
				|  |  | -                    title_list1 = random.choice(expression_title_list)
 | 
	
		
			
				|  |  | -                    # print(f"title_list1:{title_list1}")
 | 
	
		
			
				|  |  | -                    # 生成标题:原标题+符号
 | 
	
		
			
				|  |  | -                    title_list2 = befor_video_title + random.choice(char_list)
 | 
	
		
			
				|  |  | -                    # print(f"befor_video_title:{befor_video_title}")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    # title_list3 = befor_video_title.replace(
 | 
	
		
			
				|  |  | -                    #     ",", random.choice(expression_list)).replace(",", random.choice(expression_list))
 | 
	
		
			
				|  |  | -                    # 表情和标题组合,与标题和符号组合,汇总成待使用的标题列表
 | 
	
		
			
				|  |  | -                    title_list4 = [title_list2, title_list1]
 | 
	
		
			
				|  |  | -                    # print(f"title_list4:{title_list4}")
 | 
	
		
			
				|  |  | -                    # 最终标题
 | 
	
		
			
				|  |  | -                    video_title = random.choice(title_list4)
 | 
	
		
			
				|  |  | -                    # print(f"video_title:{video_title}\n")
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_title = 0
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            urllib3.disable_warnings()
 | 
	
		
			
				|  |  | +            r = requests.post(url=url, headers=headers, json=data, proxies=proxies, verify=False)
 | 
	
		
			
				|  |  | +            if "data" not in r.json():
 | 
	
		
			
				|  |  | +                Common.logger(log_type).warning("获取视频feeds错误:{}", r.text)
 | 
	
		
			
				|  |  | +            elif "list" not in r.json()["data"]:
 | 
	
		
			
				|  |  | +                Common.logger(log_type).warning("获取视频feeds无数据,休眠10s:{}", r.json()["data"])
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                # 视频列表数据
 | 
	
		
			
				|  |  | +                feeds = r.json()["data"]["list"]
 | 
	
		
			
				|  |  | +                for i in range(len(feeds)):
 | 
	
		
			
				|  |  | +                    # 标题,表情随机加在片头、片尾,或替代句子中间的标点符号
 | 
	
		
			
				|  |  | +                    if "title" in feeds[i]:
 | 
	
		
			
				|  |  | +                        befor_video_title = feeds[i]["title"].strip().replace("\n", "") \
 | 
	
		
			
				|  |  | +                            .replace("/", "").replace("\r", "").replace("#", "") \
 | 
	
		
			
				|  |  | +                            .replace(".", "。").replace("\\", "").replace("&NBSP", "") \
 | 
	
		
			
				|  |  | +                            .replace(":", "").replace("*", "").replace("?", "") \
 | 
	
		
			
				|  |  | +                            .replace("?", "").replace('"', "").replace("<", "") \
 | 
	
		
			
				|  |  | +                            .replace(">", "").replace("|", "").replace(" ", "").replace("#表情", "").replace("#符号", "")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        expression = cls.get_expression()
 | 
	
		
			
				|  |  | +                        expression_list = expression[0]
 | 
	
		
			
				|  |  | +                        char_list = expression[1]
 | 
	
		
			
				|  |  | +                        # print(f"expression_list:{expression_list}")
 | 
	
		
			
				|  |  | +                        # print(f"char_list:{char_list}")
 | 
	
		
			
				|  |  | +                        # 随机取一个表情
 | 
	
		
			
				|  |  | +                        expression = random.choice(expression_list)
 | 
	
		
			
				|  |  | +                        # print(f"expression:{expression}")
 | 
	
		
			
				|  |  | +                        # 生成标题list[表情+title, title+表情]
 | 
	
		
			
				|  |  | +                        expression_title_list = [expression + befor_video_title, befor_video_title + expression]
 | 
	
		
			
				|  |  | +                        # print(f"expression_title_list:{expression_title_list}")
 | 
	
		
			
				|  |  | +                        # 从标题list中随机取一个标题
 | 
	
		
			
				|  |  | +                        title_list1 = random.choice(expression_title_list)
 | 
	
		
			
				|  |  | +                        # print(f"title_list1:{title_list1}")
 | 
	
		
			
				|  |  | +                        # 生成标题:原标题+符号
 | 
	
		
			
				|  |  | +                        title_list2 = befor_video_title + random.choice(char_list)
 | 
	
		
			
				|  |  | +                        # print(f"befor_video_title:{befor_video_title}")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        # title_list3 = befor_video_title.replace(
 | 
	
		
			
				|  |  | +                        #     ",", random.choice(expression_list)).replace(",", random.choice(expression_list))
 | 
	
		
			
				|  |  | +                        # 表情和标题组合,与标题和符号组合,汇总成待使用的标题列表
 | 
	
		
			
				|  |  | +                        title_list4 = [title_list2, title_list1]
 | 
	
		
			
				|  |  | +                        # print(f"title_list4:{title_list4}")
 | 
	
		
			
				|  |  | +                        # 最终标题
 | 
	
		
			
				|  |  | +                        video_title = random.choice(title_list4)
 | 
	
		
			
				|  |  | +                        # print(f"video_title:{video_title}\n")
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_title = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 视频 ID
 | 
	
		
			
				|  |  | -                if "vid" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_id = feeds[i]["vid"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_id = 0
 | 
	
		
			
				|  |  | +                    # 视频 ID
 | 
	
		
			
				|  |  | +                    if "vid" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_id = feeds[i]["vid"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_id = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 播放量
 | 
	
		
			
				|  |  | -                if "play_pv" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_play_cnt = feeds[i]["play_pv"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_play_cnt = 0
 | 
	
		
			
				|  |  | +                    # 播放量
 | 
	
		
			
				|  |  | +                    if "play_pv" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_play_cnt = feeds[i]["play_pv"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_play_cnt = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 点赞量
 | 
	
		
			
				|  |  | -                if "favor" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_like_cnt = feeds[i]["favor"]["total"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_like_cnt = 0
 | 
	
		
			
				|  |  | +                    # 点赞量
 | 
	
		
			
				|  |  | +                    if "favor" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_like_cnt = feeds[i]["favor"]["total"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_like_cnt = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 分享量
 | 
	
		
			
				|  |  | -                if "share" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_share_cnt = feeds[i]["share"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_share_cnt = 0
 | 
	
		
			
				|  |  | +                    # 分享量
 | 
	
		
			
				|  |  | +                    if "share" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_share_cnt = feeds[i]["share"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_share_cnt = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # # 评论量
 | 
	
		
			
				|  |  | -                # if "comment_count" in feeds[i]:
 | 
	
		
			
				|  |  | -                #     video_comment_cnt = feeds[i]["comment_count"]
 | 
	
		
			
				|  |  | -                # else:
 | 
	
		
			
				|  |  | -                #     video_comment_cnt = 0
 | 
	
		
			
				|  |  | +                    # # 评论量
 | 
	
		
			
				|  |  | +                    # if "comment_count" in feeds[i]:
 | 
	
		
			
				|  |  | +                    #     video_comment_cnt = feeds[i]["comment_count"]
 | 
	
		
			
				|  |  | +                    # else:
 | 
	
		
			
				|  |  | +                    #     video_comment_cnt = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 时长
 | 
	
		
			
				|  |  | -                if "du" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_duration = int(feeds[i]["du"] / 1000)
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_duration = 0
 | 
	
		
			
				|  |  | +                    # 时长
 | 
	
		
			
				|  |  | +                    if "du" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_duration = int(feeds[i]["du"] / 1000)
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_duration = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 宽和高
 | 
	
		
			
				|  |  | -                if "w" or "h" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_width = feeds[i]["w"]
 | 
	
		
			
				|  |  | -                    video_height = feeds[i]["h"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_width = 0
 | 
	
		
			
				|  |  | -                    video_height = 0
 | 
	
		
			
				|  |  | +                    # 宽和高
 | 
	
		
			
				|  |  | +                    if "w" or "h" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_width = feeds[i]["w"]
 | 
	
		
			
				|  |  | +                        video_height = feeds[i]["h"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_width = 0
 | 
	
		
			
				|  |  | +                        video_height = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 发布时间
 | 
	
		
			
				|  |  | -                if "t" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_send_time = feeds[i]["t"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_send_time = 0
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                # 用户名 / 头像
 | 
	
		
			
				|  |  | -                if "user" in feeds[i]:
 | 
	
		
			
				|  |  | -                    user_name = feeds[i]["user"]["nick"].strip().replace("\n", "") \
 | 
	
		
			
				|  |  | -                        .replace("/", "").replace("快手", "").replace(" ", "") \
 | 
	
		
			
				|  |  | -                        .replace(" ", "").replace("&NBSP", "").replace("\r", "")
 | 
	
		
			
				|  |  | -                    head_url = feeds[i]["user"]["hurl"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    user_name = 0
 | 
	
		
			
				|  |  | -                    head_url = 0
 | 
	
		
			
				|  |  | +                    # 发布时间
 | 
	
		
			
				|  |  | +                    if "t" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_send_time = feeds[i]["t"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_send_time = 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    # 用户名 / 头像
 | 
	
		
			
				|  |  | +                    if "user" in feeds[i]:
 | 
	
		
			
				|  |  | +                        user_name = feeds[i]["user"]["nick"].strip().replace("\n", "") \
 | 
	
		
			
				|  |  | +                            .replace("/", "").replace("快手", "").replace(" ", "") \
 | 
	
		
			
				|  |  | +                            .replace(" ", "").replace("&NBSP", "").replace("\r", "")
 | 
	
		
			
				|  |  | +                        head_url = feeds[i]["user"]["hurl"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        user_name = 0
 | 
	
		
			
				|  |  | +                        head_url = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 用户 ID
 | 
	
		
			
				|  |  | -                profile_id = feeds[i]["id"]
 | 
	
		
			
				|  |  | +                    # 用户 ID
 | 
	
		
			
				|  |  | +                    profile_id = feeds[i]["id"]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 用户 mid
 | 
	
		
			
				|  |  | -                profile_mid = feeds[i]["user"]["mid"]
 | 
	
		
			
				|  |  | +                    # 用户 mid
 | 
	
		
			
				|  |  | +                    profile_mid = feeds[i]["user"]["mid"]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 视频封面
 | 
	
		
			
				|  |  | -                if "url" in feeds[i]:
 | 
	
		
			
				|  |  | -                    cover_url = feeds[i]["url"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    cover_url = 0
 | 
	
		
			
				|  |  | +                    # 视频封面
 | 
	
		
			
				|  |  | +                    if "url" in feeds[i]:
 | 
	
		
			
				|  |  | +                        cover_url = feeds[i]["url"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        cover_url = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                # 视频播放地址
 | 
	
		
			
				|  |  | -                if "v_url" in feeds[i]:
 | 
	
		
			
				|  |  | -                    video_url = feeds[i]["v_url"]
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    video_url = 0
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("标题:{}", video_title)
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("视频ID:{}", video_id)
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("播放量:{}", video_play_cnt)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("点赞量:{}", video_like_cnt)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("分享量:{}", video_share_cnt)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("评论数:{}", video_comment_cnt)
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("时长:{}秒", video_duration)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("宽高:{}*{}", video_width, video_height)
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info(
 | 
	
		
			
				|  |  | -                    "视频发布时间:{}", time.strftime(
 | 
	
		
			
				|  |  | -                        "%Y/%m/%d %H:%M:%S", time.localtime(int(video_send_time) / 1000)))
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("用户名:{}", user_name)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("用户头像:{}", head_url)
 | 
	
		
			
				|  |  | -                # Common.logger(log_type).info("封面:{}", cover_url)
 | 
	
		
			
				|  |  | -                Common.logger(log_type).info("播放地址:{}", video_url)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                # 过滤无效视频
 | 
	
		
			
				|  |  | -                if video_title == 0 or video_id == 0 or video_duration == 0 \
 | 
	
		
			
				|  |  | -                        or video_send_time == 0 or user_name == 0 or head_url == 0 \
 | 
	
		
			
				|  |  | -                        or cover_url == 0 or video_url == 0:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).warning("无效视频")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                elif cls.download_rule(video_duration, video_width, video_height, video_play_cnt,
 | 
	
		
			
				|  |  | -                                       video_like_cnt, video_share_cnt, video_send_time) is False:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).info("不满足基础门槛规则")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                # 过滤敏感词
 | 
	
		
			
				|  |  | -                elif any(word if word in video_title else False for word in cls.sensitive_words(log_type)) is True:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).info("视频已中敏感词:{}".format(video_title))
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                # 从云文档中去重:https://w42nne6hzg.feishu.cn/sheets/shtcnYxiyQ1wLklo1W5Kdqc9cGh?sheet=yatRv2
 | 
	
		
			
				|  |  | -                elif video_id in [j for i in Feishu.get_values_batch(log_type, "xiaoniangao", "yatRv2") for j in i]:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).info("该视频已下载:{}", video_title)
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                # 从云文档去重:https://w42nne6hzg.feishu.cn/sheets/shtcnYxiyQ1wLklo1W5Kdqc9cGh?sheet=ba0da4
 | 
	
		
			
				|  |  | -                elif video_id in [j for i in Feishu.get_values_batch("hour", "xiaoniangao", "ba0da4") for j in i]:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).info("该视频已保存过:{}", video_title)
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    Common.logger(log_type).info("该视频未下载,添加至feeds中:{}".format(video_title))
 | 
	
		
			
				|  |  | -                    # feeds工作表,插入空行
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -                    Feishu.insert_columns(log_type, "xiaoniangao", "ba0da4", "ROWS", 2, 3)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    # 获取当前时间
 | 
	
		
			
				|  |  | -                    get_feeds_time = int(time.time())
 | 
	
		
			
				|  |  | -                    # 看一看云文档,工作表中写入数据
 | 
	
		
			
				|  |  | -                    values = [[profile_id,
 | 
	
		
			
				|  |  | -                               profile_mid,
 | 
	
		
			
				|  |  | -                               video_id,
 | 
	
		
			
				|  |  | -                               video_title,
 | 
	
		
			
				|  |  | -                               user_name,
 | 
	
		
			
				|  |  | -                               video_duration,
 | 
	
		
			
				|  |  | -                               cover_url,
 | 
	
		
			
				|  |  | -                               video_url,
 | 
	
		
			
				|  |  | -                               time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(video_send_time) / 1000)),
 | 
	
		
			
				|  |  | -                               str(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(get_feeds_time))),
 | 
	
		
			
				|  |  | -                               video_play_cnt]]
 | 
	
		
			
				|  |  | -                    # 等待 1s,防止操作云文档太频繁,导致报错
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -                    Feishu.update_values(log_type, "xiaoniangao", "ba0da4", "A3:K3", values)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        # except Exception as e:
 | 
	
		
			
				|  |  | -        #     Common.logger(log_type).error("获取小时榜视频列表异常:{}", e)
 | 
	
		
			
				|  |  | +                    # 视频播放地址
 | 
	
		
			
				|  |  | +                    if "v_url" in feeds[i]:
 | 
	
		
			
				|  |  | +                        video_url = feeds[i]["v_url"]
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        video_url = 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("标题:{}", video_title)
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("视频ID:{}", video_id)
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("播放量:{}", video_play_cnt)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("点赞量:{}", video_like_cnt)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("分享量:{}", video_share_cnt)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("评论数:{}", video_comment_cnt)
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("时长:{}秒", video_duration)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("宽高:{}*{}", video_width, video_height)
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info(
 | 
	
		
			
				|  |  | +                        "视频发布时间:{}", time.strftime(
 | 
	
		
			
				|  |  | +                            "%Y/%m/%d %H:%M:%S", time.localtime(int(video_send_time) / 1000)))
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("用户名:{}", user_name)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("用户头像:{}", head_url)
 | 
	
		
			
				|  |  | +                    # Common.logger(log_type).info("封面:{}", cover_url)
 | 
	
		
			
				|  |  | +                    Common.logger(log_type).info("播放地址:{}", video_url)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    # 过滤无效视频
 | 
	
		
			
				|  |  | +                    if video_title == 0 or video_id == 0 or video_duration == 0 \
 | 
	
		
			
				|  |  | +                            or video_send_time == 0 or user_name == 0 or head_url == 0 \
 | 
	
		
			
				|  |  | +                            or cover_url == 0 or video_url == 0:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).warning("无效视频")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    elif cls.download_rule(video_duration, video_width, video_height, video_play_cnt,
 | 
	
		
			
				|  |  | +                                           video_like_cnt, video_share_cnt, video_send_time) is False:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).info("不满足基础门槛规则")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    # 过滤敏感词
 | 
	
		
			
				|  |  | +                    elif any(word if word in video_title else False for word in cls.sensitive_words(log_type)) is True:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).info("视频已中敏感词:{}".format(video_title))
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    # 从云文档中去重:https://w42nne6hzg.feishu.cn/sheets/shtcnYxiyQ1wLklo1W5Kdqc9cGh?sheet=yatRv2
 | 
	
		
			
				|  |  | +                    elif video_id in [j for i in Feishu.get_values_batch(log_type, "xiaoniangao", "yatRv2") for j in i]:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).info("该视频已下载:{}", video_title)
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    # 从云文档去重:https://w42nne6hzg.feishu.cn/sheets/shtcnYxiyQ1wLklo1W5Kdqc9cGh?sheet=ba0da4
 | 
	
		
			
				|  |  | +                    elif video_id in [j for i in Feishu.get_values_batch("hour", "xiaoniangao", "ba0da4") for j in i]:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).info("该视频已保存过:{}", video_title)
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        Common.logger(log_type).info("该视频未下载,添加至feeds中:{}".format(video_title))
 | 
	
		
			
				|  |  | +                        # feeds工作表,插入空行
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +                        Feishu.insert_columns(log_type, "xiaoniangao", "ba0da4", "ROWS", 2, 3)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        # 获取当前时间
 | 
	
		
			
				|  |  | +                        get_feeds_time = int(time.time())
 | 
	
		
			
				|  |  | +                        # 看一看云文档,工作表中写入数据
 | 
	
		
			
				|  |  | +                        values = [[profile_id,
 | 
	
		
			
				|  |  | +                                   profile_mid,
 | 
	
		
			
				|  |  | +                                   video_id,
 | 
	
		
			
				|  |  | +                                   video_title,
 | 
	
		
			
				|  |  | +                                   user_name,
 | 
	
		
			
				|  |  | +                                   video_duration,
 | 
	
		
			
				|  |  | +                                   cover_url,
 | 
	
		
			
				|  |  | +                                   video_url,
 | 
	
		
			
				|  |  | +                                   time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(video_send_time) / 1000)),
 | 
	
		
			
				|  |  | +                                   str(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(get_feeds_time))),
 | 
	
		
			
				|  |  | +                                   video_play_cnt]]
 | 
	
		
			
				|  |  | +                        # 等待 1s,防止操作云文档太频繁,导致报错
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +                        Feishu.update_values(log_type, "xiaoniangao", "ba0da4", "A3:K3", values)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        except Exception as e:
 | 
	
		
			
				|  |  | +            Common.logger(log_type).error("获取小时榜视频列表异常:{}", e)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      # 更新小时榜数据
 | 
	
		
			
				|  |  |      @classmethod
 |