# -*- coding: utf-8 -*- # @Author: wangkun # @Time: 2022/5/12 import time from main.common import Common from main.feishu_lib import Feishu from main.publish import Publish class Download: # 已下载视频列表 download_video_list = [] # 下载规则 @staticmethod def download_rule(d_duration, d_width, d_height, d_play_cnt, d_like_cnt, d_share_cnt): """ 下载视频的基本规则 :param d_duration: 时长 :param d_width: 宽 :param d_height: 高 :param d_play_cnt: 播放量 :param d_like_cnt: 点赞量 :param d_share_cnt: 分享量 :return: 满足规则,返回 True;反之,返回 False """ if 600 >= int(float(d_duration)) >= 60: if int(d_width) >= 0 or int(d_height) >= 0: if int(d_play_cnt) >= 10000: if int(d_like_cnt) >= 0: if int(d_share_cnt) >= 0: return True else: return False else: return False else: return False return False return False # 下载 / 上传 视频 @classmethod def download(cls, env): """ 1.从云文档中取视频:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=S714lO 2.满足规则,则下载及上传 :param env: 测试环境:dev ; 正式环境:prod """ try: if len(Feishu.get_values_batch("S714lO")) == 1: pass else: for i in range(len(Feishu.get_values_batch("S714lO"))): time.sleep(1) try: download_video_id = Feishu.get_values_batch("S714lO")[i + 1][1] download_video_play_cnt = Feishu.get_values_batch("S714lO")[i + 1][2] download_video_title = Feishu.get_values_batch("S714lO")[i + 1][3] download_video_duration = Feishu.get_values_batch("S714lO")[i + 1][4] download_video_comment_cnt = Feishu.get_values_batch("S714lO")[i + 1][5] download_video_like_cnt = Feishu.get_values_batch("S714lO")[i + 1][6] download_video_share_cnt = Feishu.get_values_batch("S714lO")[i + 1][7] download_video_resolution = Feishu.get_values_batch("S714lO")[i + 1][8] download_video_width = download_video_resolution.split("*")[0] download_video_height = download_video_resolution.split("*")[-1] download_video_send_time = Feishu.get_values_batch("S714lO")[i + 1][9] download_user_name = Feishu.get_values_batch("S714lO")[i + 1][10] download_head_url = Feishu.get_values_batch("S714lO")[i + 1][11] download_cover_url = Feishu.get_values_batch("S714lO")[i + 1][12] download_video_url = Feishu.get_values_batch("S714lO")[i + 1][13] download_video_session = Feishu.get_values_batch("S714lO")[i + 1][14] if int(time.time()) - int(download_video_send_time)/1000 > 259200: Common.logger().info("发布时间大于3天,删除该视频:{}", download_video_title) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2) # 去重 elif download_video_id in [j for m in Feishu.get_values_batch("onyBDH") for j in m]: Common.logger().info("视频已下载,删除该视频:{}", download_video_title) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2) # 判断是否满足下载规则 elif cls.download_rule( download_video_duration, download_video_width, download_video_height, download_video_play_cnt, download_video_like_cnt, download_video_share_cnt) is False: Common.logger().info("不满足下载规则,删除该视频:{}", download_video_title) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2) else: Common.logger().info("开始下载视频:{}".format(download_video_title)) # 下载封面 Common.download_method(text="cover", d_name=download_video_title, d_url=download_cover_url) # 下载视频 Common.download_method(text="video", d_name=download_video_title, d_url=download_video_url) # # 保存视频信息至 "./videos/{download_video_title}/info.txt" # with open("./videos/" + download_video_title + "/" # + "info.txt", "a", encoding="UTF-8") as f_a: # f_a.write(str(download_video_id) + "\n" + # str(download_video_title) + "\n" + # str(download_video_duration) + "\n" + # str(download_video_play_cnt) + "\n" + # str(download_video_comment_cnt) + "\n" + # str(download_video_like_cnt) + "\n" + # str(download_video_share_cnt) + "\n" + # str(download_video_resolution) + "\n" + # str(download_video_send_time) + "\n" + # str(download_user_name) + "\n" + # str(download_head_url) + "\n" + # str(download_video_url) + "\n" + # str(download_cover_url) + "\n" + # str(download_video_session)) # Common.logger().info("==========视频信息已保存至info.txt==========") # 添加视频 ID 到 list,用于统计当次下载总数 cls.download_video_list.append(download_video_id) # # 上传视频 # Common.logger().info("开始上传视频:{}".format(download_video_title)) # Publish.upload_and_publish(env, "play") # 保存视频 ID 到云文档:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=onyBDH Common.logger().info("保存视频ID至云文档:{}", download_video_title) # 视频ID工作表,插入首行 Feishu.insert_columns("onyBDH", "ROWS", 1, 2) # 视频ID工作表,首行写入数据 upload_time = int(time.time()) time.sleep(1) Feishu.update_values("onyBDH", str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(upload_time))), str(download_video_id), str(download_video_play_cnt), str(download_video_title), str(download_video_duration), str(download_video_comment_cnt), str(download_video_like_cnt), str(download_video_share_cnt), str(download_video_resolution), str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime( int(download_video_send_time)/1000))), str(download_user_name), str(download_head_url), str(download_cover_url), str(download_video_url), str(download_video_session)) # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=S714lO Common.logger().info("从云文档删除该视频信息:{}", download_video_title) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2) except Exception as e: Common.logger().error("视频 info 异常,删除该视频信息:{}", e) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2) cls.download("prod") except Exception as e: Common.logger().error("获取视频数据异常:{}", e)