download_play.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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 int(play_duration) >= 40:
  26. if int(play_play_cnt) >= 100000:
  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. recommend_feeds = Feishu.get_values_batch("recommend", "kanyikan", "SdCHOM")
  43. for i in range(1, len(recommend_feeds)+1):
  44. time.sleep(1)
  45. # download_push_time = Feishu.get_values_batch("SdCHOM")[i][0]
  46. download_video_id = recommend_feeds[i][2]
  47. download_video_title = recommend_feeds[i][3]
  48. download_video_play_cnt = recommend_feeds[i][4]
  49. download_video_comment_cnt = recommend_feeds[i][5]
  50. download_video_like_cnt = recommend_feeds[i][6]
  51. download_video_share_cnt = recommend_feeds[i][7]
  52. download_video_duration = recommend_feeds[i][8]
  53. download_video_resolution = recommend_feeds[i][9]
  54. download_video_width = download_video_resolution.split("*")[0]
  55. download_video_height = download_video_resolution.split("*")[-1]
  56. download_video_send_time = recommend_feeds[i][10]
  57. download_user_name = recommend_feeds[i][11]
  58. download_user_id = recommend_feeds[i][12]
  59. download_head_url = recommend_feeds[i][13]
  60. download_cover_url = recommend_feeds[i][14]
  61. download_video_url = recommend_feeds[i][15]
  62. # Common.logger("recommend").info("download_video_id:{}", download_video_id)
  63. # Common.logger("recommend").info("download_video_title:{}", download_video_title)
  64. # Common.logger("recommend").info("download_video_play_cnt:{}", download_video_play_cnt)
  65. # Common.logger("recommend").info("download_video_comment_cnt:{}", download_video_comment_cnt)
  66. # Common.logger("recommend").info("download_video_like_cnt:{}", download_video_like_cnt)
  67. # Common.logger("recommend").info("download_video_share_cnt:{}", download_video_share_cnt)
  68. # Common.logger("recommend").info("download_video_duration:{}", download_video_duration)
  69. # Common.logger("recommend").info("download_video_resolution:{}", download_video_resolution)
  70. # Common.logger("recommend").info("download_video_send_time:{}", download_video_send_time)
  71. # Common.logger("recommend").info("download_user_name:{}", download_user_name)
  72. # Common.logger("recommend").info("download_user_id:{}", download_user_id)
  73. # Common.logger("recommend").info("download_head_url:{}", download_head_url)
  74. # Common.logger("recommend").info("download_cover_url:{}", download_cover_url)
  75. # Common.logger("recommend").info("download_video_url:{}", download_video_url)
  76. Common.logger("recommend").info("正在判断第{}行,视频:{}", i, download_video_title)
  77. if cls.play_rule(
  78. play_width=download_video_width, play_height=download_video_height,
  79. play_duration=download_video_duration, play_play_cnt=download_video_play_cnt) is False:
  80. Common.logger("recommend").info("不满足播放量下载规则,删除该视频信息:{}", download_video_title)
  81. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  82. Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
  83. return
  84. elif download_video_id in [j for m in Feishu.get_values_batch(
  85. "recommend", "kanyikan", "20ce0c") for j in m]:
  86. Common.logger("recommend").info("视频已下载,删除该视频信息:{}", download_video_title)
  87. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  88. Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
  89. return
  90. else:
  91. Common.logger("recommend").info("开始下载视频:{}", download_video_title)
  92. # 下载封面
  93. Common.download_method(log_type="recommend", text="cover",
  94. d_name=download_video_title, d_url=download_cover_url)
  95. # 下载视频
  96. Common.download_method(log_type="recommend", text="video",
  97. d_name=download_video_title, d_url=download_video_url)
  98. # 保存视频信息至 "./videos/{download_video_title}/info.txt"
  99. with open(r"./videos/" + download_video_title
  100. + "/" + "info.txt", "a", encoding="utf8") as f_a:
  101. f_a.write(str(download_video_id) + "\n" +
  102. str(download_video_title) + "\n" +
  103. str(download_video_duration) + "\n" +
  104. str(download_video_play_cnt) + "\n" +
  105. str(download_video_comment_cnt) + "\n" +
  106. str(download_video_like_cnt) + "\n" +
  107. str(download_video_share_cnt) + "\n" +
  108. str(download_video_resolution) + "\n" +
  109. str(int(time.mktime(
  110. time.strptime(download_video_send_time, "%Y/%m/%d %H:%M:%S")))) + "\n" +
  111. str(download_user_name) + "\n" +
  112. str(download_head_url) + "\n" +
  113. str(download_video_url) + "\n" +
  114. str(download_cover_url) + "\n" +
  115. str(Common.get_session("recommend")))
  116. Common.logger("recommend").info("==========视频信息已保存至info.txt==========")
  117. # 上传视频
  118. Common.logger("recommend").info("开始上传视频:{}", download_video_title)
  119. Publish.upload_and_publish("recommend", env, "play")
  120. # 保存视频 ID 到云文档:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=20ce0c
  121. Common.logger("recommend").info("保存视频ID至云文档:{}", download_video_title)
  122. # 看一看+ ,视频ID工作表,插入首行
  123. Feishu.insert_columns("recommend", "kanyikan", "20ce0c", "ROWS", 1, 2)
  124. # 看一看+ ,视频ID工作表,首行写入数据
  125. upload_time = int(time.time())
  126. values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(upload_time)),
  127. "播放量榜",
  128. str(download_video_id),
  129. str(download_video_title),
  130. download_video_play_cnt,
  131. download_video_comment_cnt,
  132. download_video_like_cnt,
  133. download_video_share_cnt,
  134. download_video_duration,
  135. str(download_video_resolution),
  136. str(download_video_send_time),
  137. str(download_user_name),
  138. str(download_user_id),
  139. str(download_head_url),
  140. str(download_cover_url),
  141. str(download_video_url)]]
  142. time.sleep(1)
  143. Feishu.update_values("recommend", "kanyikan", "20ce0c", "A2:Q2", values)
  144. # 从云文档删除该视频信息:https://w42nne6hzg.feishu.cn/sheets/shtcngRPoDYAi24x52j2nDuHMih?sheet=SdCHOM
  145. Common.logger("recommend").info("从云文档删除该视频信息:{}", download_video_title)
  146. # 删除行或列,可选 ROWS、COLUMNS
  147. Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", i + 1, i + 1)
  148. return
  149. except Exception as e:
  150. Common.logger("recommend").error("视频info异常:{}", e)
  151. Feishu.dimension_range("recommend", "kanyikan", "SdCHOM", "ROWS", 2, 2)
  152. return
  153. # 执行播放量下载及上传
  154. @classmethod
  155. def run_download_play_video(cls, env):
  156. try:
  157. while True:
  158. if len(Feishu.get_values_batch("recommend", "kanyikan", "SdCHOM")) == 1:
  159. break
  160. else:
  161. cls.download_play_video(env)
  162. except Exception as e:
  163. Common.logger("recommend").error("执行上传及下载异常:{}", e)
  164. if __name__ == "__main__":
  165. download_play = DownloadPlay()
  166. get_feeds("recommend")
  167. download_play.run_download_play_video("dev")