download.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/5/12
  4. import time
  5. from main.common import Common
  6. from main.feishu_lib import Feishu
  7. from main.publish import Publish
  8. class Download:
  9. # 已下载视频列表
  10. download_video_list = []
  11. # 下载规则
  12. @staticmethod
  13. def download_rule(d_duration, d_width, d_height, d_play_cnt, d_like_cnt, d_share_cnt):
  14. """
  15. 下载视频的基本规则
  16. :param d_duration: 时长
  17. :param d_width: 宽
  18. :param d_height: 高
  19. :param d_play_cnt: 播放量
  20. :param d_like_cnt: 点赞量
  21. :param d_share_cnt: 分享量
  22. :return: 满足规则,返回 True;反之,返回 False
  23. """
  24. if 600 >= int(float(d_duration)) >= 60:
  25. if int(d_width) >= 0 or int(d_height) >= 0:
  26. if int(d_play_cnt) >= 10000:
  27. if int(d_like_cnt) >= 0:
  28. if int(d_share_cnt) >= 0:
  29. return True
  30. else:
  31. return False
  32. else:
  33. return False
  34. else:
  35. return False
  36. return False
  37. return False
  38. # 下载 / 上传 视频
  39. @classmethod
  40. def download(cls, env):
  41. """
  42. 1.从云文档中取视频:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=S714lO
  43. 2.满足规则,则下载及上传
  44. :param env: 测试环境:dev ; 正式环境:prod
  45. """
  46. try:
  47. if len(Feishu.get_values_batch("S714lO")) == 1:
  48. pass
  49. else:
  50. for i in range(len(Feishu.get_values_batch("S714lO"))):
  51. time.sleep(1)
  52. try:
  53. download_video_id = Feishu.get_values_batch("S714lO")[i + 1][1]
  54. download_video_play_cnt = Feishu.get_values_batch("S714lO")[i + 1][2]
  55. download_video_title = Feishu.get_values_batch("S714lO")[i + 1][3]
  56. download_video_duration = Feishu.get_values_batch("S714lO")[i + 1][4]
  57. download_video_comment_cnt = Feishu.get_values_batch("S714lO")[i + 1][5]
  58. download_video_like_cnt = Feishu.get_values_batch("S714lO")[i + 1][6]
  59. download_video_share_cnt = Feishu.get_values_batch("S714lO")[i + 1][7]
  60. download_video_resolution = Feishu.get_values_batch("S714lO")[i + 1][8]
  61. download_video_width = download_video_resolution.split("*")[0]
  62. download_video_height = download_video_resolution.split("*")[-1]
  63. download_video_send_time = Feishu.get_values_batch("S714lO")[i + 1][9]
  64. download_user_name = Feishu.get_values_batch("S714lO")[i + 1][10]
  65. download_head_url = Feishu.get_values_batch("S714lO")[i + 1][11]
  66. download_cover_url = Feishu.get_values_batch("S714lO")[i + 1][12]
  67. download_video_url = Feishu.get_values_batch("S714lO")[i + 1][13]
  68. download_video_session = Feishu.get_values_batch("S714lO")[i + 1][14]
  69. if int(time.time()) - int(download_video_send_time)/1000 > 259200:
  70. Common.logger().info("发布时间大于3天,删除该视频:{}", download_video_title)
  71. # 删除行或列,可选 ROWS、COLUMNS
  72. Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2)
  73. # 去重
  74. elif download_video_id in [j for m in Feishu.get_values_batch("onyBDH") for j in m]:
  75. Common.logger().info("视频已下载,删除该视频:{}", download_video_title)
  76. # 删除行或列,可选 ROWS、COLUMNS
  77. Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2)
  78. # 判断是否满足下载规则
  79. elif cls.download_rule(
  80. download_video_duration,
  81. download_video_width,
  82. download_video_height,
  83. download_video_play_cnt,
  84. download_video_like_cnt,
  85. download_video_share_cnt) is False:
  86. Common.logger().info("不满足下载规则,删除该视频:{}", download_video_title)
  87. # 删除行或列,可选 ROWS、COLUMNS
  88. Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2)
  89. else:
  90. Common.logger().info("开始下载视频:{}".format(download_video_title))
  91. # 下载封面
  92. Common.download_method(text="cover", d_name=download_video_title, d_url=download_cover_url)
  93. # 下载视频
  94. Common.download_method(text="video", d_name=download_video_title, d_url=download_video_url)
  95. # # 保存视频信息至 "./videos/{download_video_title}/info.txt"
  96. # with open("./videos/" + download_video_title + "/"
  97. # + "info.txt", "a", encoding="UTF-8") as f_a:
  98. # f_a.write(str(download_video_id) + "\n" +
  99. # str(download_video_title) + "\n" +
  100. # str(download_video_duration) + "\n" +
  101. # str(download_video_play_cnt) + "\n" +
  102. # str(download_video_comment_cnt) + "\n" +
  103. # str(download_video_like_cnt) + "\n" +
  104. # str(download_video_share_cnt) + "\n" +
  105. # str(download_video_resolution) + "\n" +
  106. # str(download_video_send_time) + "\n" +
  107. # str(download_user_name) + "\n" +
  108. # str(download_head_url) + "\n" +
  109. # str(download_video_url) + "\n" +
  110. # str(download_cover_url) + "\n" +
  111. # str(download_video_session))
  112. # Common.logger().info("==========视频信息已保存至info.txt==========")
  113. # 添加视频 ID 到 list,用于统计当次下载总数
  114. cls.download_video_list.append(download_video_id)
  115. # # 上传视频
  116. # Common.logger().info("开始上传视频:{}".format(download_video_title))
  117. # Publish.upload_and_publish(env, "play")
  118. # 保存视频 ID 到云文档:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=onyBDH
  119. Common.logger().info("保存视频ID至云文档:{}", download_video_title)
  120. # 视频ID工作表,插入首行
  121. Feishu.insert_columns("onyBDH", "ROWS", 1, 2)
  122. # 视频ID工作表,首行写入数据
  123. upload_time = int(time.time())
  124. time.sleep(1)
  125. Feishu.update_values("onyBDH",
  126. str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(upload_time))),
  127. str(download_video_id),
  128. str(download_video_play_cnt),
  129. str(download_video_title),
  130. str(download_video_duration),
  131. str(download_video_comment_cnt),
  132. str(download_video_like_cnt),
  133. str(download_video_share_cnt),
  134. str(download_video_resolution),
  135. str(time.strftime("%Y-%m-%d %H:%M:%S",
  136. time.localtime(
  137. int(download_video_send_time)/1000))),
  138. str(download_user_name),
  139. str(download_head_url),
  140. str(download_cover_url),
  141. str(download_video_url),
  142. str(download_video_session))
  143. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=S714lO
  144. Common.logger().info("从云文档删除该视频信息:{}", download_video_title)
  145. # 删除行或列,可选 ROWS、COLUMNS
  146. Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2)
  147. except Exception as e:
  148. Common.logger().error("视频 info 异常,删除该视频信息:{}", e)
  149. # 删除行或列,可选 ROWS、COLUMNS
  150. Feishu.dimension_range("S714lO", "ROWS", i + 2, i + 2)
  151. cls.download("prod")
  152. except Exception as e:
  153. Common.logger().error("获取视频数据异常:{}", e)