# -*- coding: utf-8 -*- # @Author: wangkun # @Time: 2022/4/18 """ 下载并上传:播放量视频 """ import os import sys import time sys.path.append(os.getcwd()) from main.common import Common from main.get_feeds import get_feeds from main.publish import Publish from main.feishu_lib import Feishu class DownloadPlay: # 下载规则 @staticmethod def play_rule(play_width, play_height, play_duration, play_play_cnt): """ 1.分辨率,宽或者高 >= 720 or ==0 2.600s >= 时长 >= 60s 3.视频播放量 >= 150000 """ if int(play_width) >= 720 or int(play_height) >= 720 or play_width == "0" or play_height == "0": if 600 >= int(play_duration) >= 60: if int(play_play_cnt) >= 150000: return True else: return False else: return False else: return False @classmethod def download_play_video(cls, env): """ 下载播放量视频 测试环境:env == dev 正式环境:env == prod """ try: for i in range(1, len(Feishu.get_values_batch("SdCHOM"))+1): time.sleep(1) # download_push_time = Feishu.get_values_batch("SdCHOM")[i][0] download_video_id = Feishu.get_values_batch("SdCHOM")[i][2] download_video_title = Feishu.get_values_batch("SdCHOM")[i][3] download_video_play_cnt = Feishu.get_values_batch("SdCHOM")[i][4] download_video_comment_cnt = Feishu.get_values_batch("SdCHOM")[i][5] download_video_like_cnt = Feishu.get_values_batch("SdCHOM")[i][6] download_video_share_cnt = Feishu.get_values_batch("SdCHOM")[i][7] download_video_duration = Feishu.get_values_batch("SdCHOM")[i][8] download_video_resolution = Feishu.get_values_batch("SdCHOM")[i][9] download_video_width = download_video_resolution.split("*")[0] download_video_height = download_video_resolution.split("*")[-1] download_video_send_time = Feishu.get_values_batch("SdCHOM")[i][10] download_user_name = Feishu.get_values_batch("SdCHOM")[i][11] download_user_id = Feishu.get_values_batch("SdCHOM")[i][12] download_head_url = Feishu.get_values_batch("SdCHOM")[i][13][0]["link"] download_cover_url = Feishu.get_values_batch("SdCHOM")[i][14][0]["link"] download_video_url = Feishu.get_values_batch("SdCHOM")[i][15][0]["link"] # Common.logger().info("download_video_id:{}", download_video_id) # Common.logger().info("download_video_title:{}", download_video_title) # Common.logger().info("download_video_play_cnt:{}", download_video_play_cnt) # Common.logger().info("download_video_comment_cnt:{}", download_video_comment_cnt) # Common.logger().info("download_video_like_cnt:{}", download_video_like_cnt) # Common.logger().info("download_video_share_cnt:{}", download_video_share_cnt) # Common.logger().info("download_video_duration:{}", download_video_duration) # Common.logger().info("download_video_resolution:{}", download_video_resolution) # Common.logger().info("download_video_send_time:{}", download_video_send_time) # Common.logger().info("download_user_name:{}", download_user_name) # Common.logger().info("download_user_id:{}", download_user_id) # Common.logger().info("download_head_url:{}", download_head_url) # Common.logger().info("download_cover_url:{}", download_cover_url) # Common.logger().info("download_video_url:{}", download_video_url) Common.logger().info("正在判断第{}行,视频:{}", i, download_video_title) if cls.play_rule( play_width=download_video_width, play_height=download_video_height, play_duration=download_video_duration, play_play_cnt=download_video_play_cnt) is False: Common.logger().info("不满足播放量下载规则,删除该视频信息:{}", download_video_title) # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1) return elif download_video_id in [j for m in Feishu.get_values_batch("20ce0c") for j in m]: Common.logger().info("视频已下载,删除该视频信息:{}", download_video_title) # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1) return else: Common.logger().info("开始下载视频:{}", 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(r"./videos/" + download_video_title + "/" + "info.txt", "a", encoding="utf8") 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(int(time.mktime( time.strptime(download_video_send_time, "%Y/%m/%d %H:%M:%S")))) + "\n" + str(download_user_name) + "\n" + str(download_head_url) + "\n" + str(download_video_url) + "\n" + str(download_cover_url) + "\n" + str(Common.get_session())) Common.logger().info("==========视频信息已保存至info.txt==========") # 上传视频 Common.logger().info("开始上传视频:{}", download_video_title) Publish.upload_and_publish(env, "play") # 保存视频 ID 到云文档:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=20ce0c Common.logger().info("保存视频ID至云文档:{}", download_video_title) # 看一看+ ,视频ID工作表,插入首行 Feishu.insert_columns("20ce0c", "ROWS", 1, 2) # 看一看+ ,视频ID工作表,首行写入数据 upload_time = int(time.time()) values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(upload_time)), "播放量榜", str(download_video_id), str(download_video_title), download_video_play_cnt, download_video_comment_cnt, download_video_like_cnt, download_video_share_cnt, download_video_duration, str(download_video_resolution), str(download_video_send_time), str(download_user_name), str(download_user_id), str(download_head_url), str(download_cover_url), str(download_video_url)]] time.sleep(1) Feishu.update_values("20ce0c", "A2:Q2", values) # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM Common.logger().info("从云文档删除该视频信息:{}", download_video_title) # 删除行或列,可选 ROWS、COLUMNS Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1) return except Exception as e: Common.logger().error("视频info异常:{}", e) return # 执行播放量下载及上传 @classmethod def run_download_play_video(cls): try: if len(Feishu.get_values_batch("SdCHOM")) == 1: pass else: cls.download_play_video("prod") except Exception as e: Common.logger().error("执行上传及下载异常:{}", e) if __name__ == "__main__": download_play = DownloadPlay() get_feeds() download_play.download_play_video("dev")