123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- # -*- 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)
|