download_play.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/4/18
  4. """
  5. 下载并上传:播放量视频
  6. """
  7. import os
  8. import sys
  9. import time
  10. sys.path.append(os.getcwd())
  11. from main.common import Common
  12. from main.get_feeds import get_feeds
  13. from main.publish import Publish
  14. from main.feishu_lib import Feishu
  15. class DownloadPlay:
  16. # 下载规则
  17. @staticmethod
  18. def play_rule(play_width, play_height, play_duration, play_play_cnt):
  19. """
  20. 1.分辨率,宽或者高 >= 720 or ==0
  21. 2.600s >= 时长 >= 60s
  22. 3.视频播放量 >= 150000
  23. """
  24. if int(play_width) >= 720 or int(play_height) >= 720 or play_width == "0" or play_height == "0":
  25. if 600 >= int(play_duration) >= 60:
  26. if int(play_play_cnt) >= 150000:
  27. return True
  28. else:
  29. return False
  30. else:
  31. return False
  32. else:
  33. return False
  34. @classmethod
  35. def download_play_video(cls, env):
  36. """
  37. 下载播放量视频
  38. 测试环境:env == dev
  39. 正式环境:env == prod
  40. """
  41. try:
  42. for i in range(1, len(Feishu.get_values_batch("SdCHOM"))+1):
  43. time.sleep(1)
  44. # download_push_time = Feishu.get_values_batch("SdCHOM")[i][0]
  45. download_video_id = Feishu.get_values_batch("SdCHOM")[i][2]
  46. download_video_title = Feishu.get_values_batch("SdCHOM")[i][3]
  47. download_video_play_cnt = Feishu.get_values_batch("SdCHOM")[i][4]
  48. download_video_comment_cnt = Feishu.get_values_batch("SdCHOM")[i][5]
  49. download_video_like_cnt = Feishu.get_values_batch("SdCHOM")[i][6]
  50. download_video_share_cnt = Feishu.get_values_batch("SdCHOM")[i][7]
  51. download_video_duration = Feishu.get_values_batch("SdCHOM")[i][8]
  52. download_video_resolution = Feishu.get_values_batch("SdCHOM")[i][9]
  53. download_video_width = download_video_resolution.split("*")[0]
  54. download_video_height = download_video_resolution.split("*")[-1]
  55. download_video_send_time = Feishu.get_values_batch("SdCHOM")[i][10]
  56. download_user_name = Feishu.get_values_batch("SdCHOM")[i][11]
  57. download_user_id = Feishu.get_values_batch("SdCHOM")[i][12]
  58. download_head_url = Feishu.get_values_batch("SdCHOM")[i][13][0]["link"]
  59. download_cover_url = Feishu.get_values_batch("SdCHOM")[i][14][0]["link"]
  60. download_video_url = Feishu.get_values_batch("SdCHOM")[i][15][0]["link"]
  61. # Common.logger().info("download_video_id:{}", download_video_id)
  62. # Common.logger().info("download_video_title:{}", download_video_title)
  63. # Common.logger().info("download_video_play_cnt:{}", download_video_play_cnt)
  64. # Common.logger().info("download_video_comment_cnt:{}", download_video_comment_cnt)
  65. # Common.logger().info("download_video_like_cnt:{}", download_video_like_cnt)
  66. # Common.logger().info("download_video_share_cnt:{}", download_video_share_cnt)
  67. # Common.logger().info("download_video_duration:{}", download_video_duration)
  68. # Common.logger().info("download_video_resolution:{}", download_video_resolution)
  69. # Common.logger().info("download_video_send_time:{}", download_video_send_time)
  70. # Common.logger().info("download_user_name:{}", download_user_name)
  71. # Common.logger().info("download_user_id:{}", download_user_id)
  72. # Common.logger().info("download_head_url:{}", download_head_url)
  73. # Common.logger().info("download_cover_url:{}", download_cover_url)
  74. # Common.logger().info("download_video_url:{}", download_video_url)
  75. Common.logger().info("正在判断第{}行,视频:{}", i, download_video_title)
  76. if cls.play_rule(
  77. play_width=download_video_width, play_height=download_video_height,
  78. play_duration=download_video_duration, play_play_cnt=download_video_play_cnt) is False:
  79. Common.logger().info("不满足播放量下载规则,删除该视频信息:{}", download_video_title)
  80. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  81. Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1)
  82. return
  83. elif download_video_id in [j for m in Feishu.get_values_batch("20ce0c") for j in m]:
  84. Common.logger().info("视频已下载,删除该视频信息:{}", download_video_title)
  85. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  86. Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1)
  87. return
  88. else:
  89. Common.logger().info("开始下载视频:{}", download_video_title)
  90. # 下载封面
  91. Common.download_method(text="cover", d_name=download_video_title, d_url=download_cover_url)
  92. # 下载视频
  93. Common.download_method(text="video", d_name=download_video_title, d_url=download_video_url)
  94. # 保存视频信息至 "./videos/{download_video_title}/info.txt"
  95. with open(r"./videos/" + download_video_title
  96. + "/" + "info.txt", "a", encoding="utf8") as f_a:
  97. f_a.write(str(download_video_id) + "\n" +
  98. str(download_video_title) + "\n" +
  99. str(download_video_duration) + "\n" +
  100. str(download_video_play_cnt) + "\n" +
  101. str(download_video_comment_cnt) + "\n" +
  102. str(download_video_like_cnt) + "\n" +
  103. str(download_video_share_cnt) + "\n" +
  104. str(download_video_resolution) + "\n" +
  105. str(int(time.mktime(
  106. time.strptime(download_video_send_time, "%Y/%m/%d %H:%M:%S")))) + "\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(Common.get_session()))
  112. Common.logger().info("==========视频信息已保存至info.txt==========")
  113. # 上传视频
  114. Common.logger().info("开始上传视频:{}", download_video_title)
  115. Publish.upload_and_publish(env, "play")
  116. # 保存视频 ID 到云文档:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=20ce0c
  117. Common.logger().info("保存视频ID至云文档:{}", download_video_title)
  118. # 看一看+ ,视频ID工作表,插入首行
  119. Feishu.insert_columns("20ce0c", "ROWS", 1, 2)
  120. # 看一看+ ,视频ID工作表,首行写入数据
  121. upload_time = int(time.time())
  122. values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(upload_time)),
  123. "播放量榜",
  124. str(download_video_id),
  125. str(download_video_title),
  126. download_video_play_cnt,
  127. download_video_comment_cnt,
  128. download_video_like_cnt,
  129. download_video_share_cnt,
  130. download_video_duration,
  131. str(download_video_resolution),
  132. str(download_video_send_time),
  133. str(download_user_name),
  134. str(download_user_id),
  135. str(download_head_url),
  136. str(download_cover_url),
  137. str(download_video_url)]]
  138. time.sleep(1)
  139. Feishu.update_values("20ce0c", "A2:Q2", values)
  140. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  141. Common.logger().info("从云文档删除该视频信息:{}", download_video_title)
  142. # 删除行或列,可选 ROWS、COLUMNS
  143. Feishu.dimension_range("SdCHOM", "ROWS", i + 1, i + 1)
  144. return
  145. except Exception as e:
  146. Common.logger().error("视频info异常:{}", e)
  147. return
  148. # 执行播放量下载及上传
  149. @classmethod
  150. def run_download_play_video(cls):
  151. try:
  152. if len(Feishu.get_values_batch("SdCHOM")) == 1:
  153. pass
  154. else:
  155. cls.download_play_video("prod")
  156. except Exception as e:
  157. Common.logger().error("执行上传及下载异常:{}", e)
  158. if __name__ == "__main__":
  159. download_play = DownloadPlay()
  160. get_feeds()
  161. download_play.download_play_video("dev")