demo.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/5/16
  4. import os
  5. import sys
  6. import time
  7. import requests
  8. import urllib3
  9. sys.path.append(os.getcwd())
  10. from main.common import Common
  11. from main.feishu_lib import Feishu
  12. from main.xiaoniangao_publish import Publish
  13. proxies = {"http": None, "https": None}
  14. class Demo:
  15. # 查询视频详情的各项数据
  16. @classmethod
  17. def video_detail_info(cls, user_id, user_mid, video_id):
  18. url = "https://kapi.xiaoniangao.cn/profile/get_profile_by_id"
  19. headers = {
  20. "x-b3-traceid": "bd267349bf41b",
  21. "X-Token-Id": "86f6d7cc2b2b6870004df5d16c82aaf3-1185665701",
  22. "uid": "8fde3c6c-c070-4379-bfc4-15c7e85139c9",
  23. "content-type": "application/json",
  24. "Accept-Encoding": "gzip,compress,br,deflate",
  25. "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X)'
  26. ' AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 '
  27. 'MicroMessenger/8.0.20(0x18001432) NetType/WIFI Language/zh_CN',
  28. "Referer": "https://servicewechat.com/wxd7911e4c177690e4/617/page-frame.html"
  29. }
  30. data = {
  31. "play_src": "1",
  32. "profile_id": int(user_id),
  33. "profile_mid": int(user_mid),
  34. "qs": "imageMogr2/gravity/center/rotate/$/thumbnail/"
  35. "!400x400r/crop/400x400/interlace/1/format/jpg",
  36. "h_qs": "imageMogr2/gravity/center/rotate/$/thumbnail"
  37. "/!80x80r/crop/80x80/interlace/1/format/jpg",
  38. "share_width": 625,
  39. "share_height": 500,
  40. "no_comments": True,
  41. "no_follow": True,
  42. "vid": video_id,
  43. "hot_l1_comment": True,
  44. "token": "90747742180aeb22c0fe3a3c6a38f3d9",
  45. "uid": "8fde3c6c-c070-4379-bfc4-15c7e85139c9",
  46. "proj": "ma",
  47. "wx_ver": "8.0.20",
  48. "code_ver": "3.62.0",
  49. "log_common_params": {
  50. "e": [{
  51. "data": {
  52. "page": "dynamicSharePage"
  53. }
  54. }],
  55. "ext": {
  56. "brand": "iPhone",
  57. "device": "iPhone 11",
  58. "os": "iOS 14.7.1",
  59. "weixinver": "8.0.20",
  60. "srcver": "2.24.3",
  61. "net": "wifi",
  62. "scene": "1089"
  63. },
  64. "pj": "1",
  65. "pf": "2",
  66. "session_id": "7bcce313-b57d-4305-8d14-6ebd9a1bad29"
  67. }
  68. }
  69. try:
  70. urllib3.disable_warnings()
  71. r = requests.post(headers=headers, url=url, json=data, proxies=proxies, verify=False)
  72. print(r.text)
  73. video_title = r.json()["data"]["title"]
  74. video_id = r.json()["data"]["vid"]
  75. video_play_cnt = r.json()["data"]["play_pv"]
  76. video_duration = int(r.json()["data"]["du"]) / 1000
  77. video_url = r.json()["data"]["v_url"]
  78. video_send_time = r.json()["data"]["t"]
  79. print(f"video_title:{video_title}")
  80. print(f"video_id:{video_id}")
  81. print(f"video_play_cnt:{video_play_cnt}")
  82. print(f"video_duration:{video_duration}")
  83. print(f'video_send_time:{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(video_send_time) / 1000))}')
  84. print(f"video_url:{video_url}")
  85. except Exception as e:
  86. print(e)
  87. @classmethod
  88. def download_publish(cls, log_type, env):
  89. # try:
  90. play_feeds_sheet = Feishu.get_values_batch(log_type, 'xiaoniangao', 'CtXmf8')
  91. for i in range(1, len(play_feeds_sheet)):
  92. download_video_title = play_feeds_sheet[i][5]
  93. download_video_play_cnt = play_feeds_sheet[i][7]
  94. download_video_resolution = play_feeds_sheet[i][8]
  95. download_user_name = play_feeds_sheet[i][9]
  96. download_user_id = play_feeds_sheet[i][10]
  97. download_user_mid = play_feeds_sheet[i][11]
  98. download_head_url = play_feeds_sheet[i][12]
  99. download_cover_url = play_feeds_sheet[i][12]
  100. download_video_url = play_feeds_sheet[i][13]
  101. Common.logger(log_type).info("正在判断第{}行,视频:{}", i + 1, download_video_title)
  102. # 过滤空行及空标题视频
  103. if download_video_title is None or download_video_title == "":
  104. # 删除行或列,可选 ROWS、COLUMNS
  105. Feishu.dimension_range(log_type, "xiaoniangao", "CtXmf8", "ROWS", i + 1, i + 1)
  106. Common.logger(log_type).warning("标题为空或空行,删除成功\n")
  107. return
  108. else:
  109. # 下载封面
  110. Common.download_method(log_type=log_type, text="cover",
  111. d_name=str(download_video_title), d_url=str(download_cover_url))
  112. # 下载视频
  113. Common.download_method(log_type=log_type, text="video",
  114. d_name=str(download_video_title), d_url=str(download_video_url))
  115. # 保存视频信息至 "./videos/{download_video_title}/info.txt"
  116. with open("./videos/" + download_video_title + "/" + "info.txt",
  117. "a", encoding="UTF-8") as f_a:
  118. f_a.write(str(int(time.time())) + "\n" +
  119. str(download_video_title) + "\n" +
  120. '120' + "\n" +
  121. str(download_video_play_cnt) + "\n" +
  122. '0' + "\n" +
  123. '120' + "\n" +
  124. '120' + "\n" +
  125. str(download_video_resolution) + "\n" +
  126. str(int(time.time())) + "\n" +
  127. str(download_user_name) + "\n" +
  128. str(download_head_url) + "\n" +
  129. str(download_video_url) + "\n" +
  130. str(download_cover_url) + "\n" +
  131. "xiaoniangao"+str(int(time.time())))
  132. Common.logger(log_type).info("==========视频信息已保存至info.txt==========")
  133. # 上传视频
  134. Common.logger(log_type).info("开始上传视频:{}".format(download_video_title))
  135. our_video_id = Publish.upload_and_publish(log_type, env, "play")
  136. our_video_link = "https://testadmin.piaoquantv.com/cms/post-detail/" + str(our_video_id) + "/info"
  137. Common.logger(log_type).info("视频上传完成:{}", download_video_title)
  138. # 保存视频: 播放量_已下载表
  139. Common.logger(log_type).info("保存视频ID至云文档:{}", download_video_title)
  140. # 视频ID工作表,插入首行
  141. Feishu.insert_columns(log_type, "xiaoniangao", "67U1WF", "ROWS", 1, 2)
  142. # 视频ID工作表,首行写入数据
  143. upload_time = int(time.time())
  144. values = [[
  145. str(download_video_title),
  146. our_video_link,
  147. download_video_play_cnt,
  148. str(download_video_resolution),
  149. str(download_user_name),
  150. str(download_user_id),
  151. str(download_user_mid),
  152. str(download_cover_url),
  153. str(download_video_url)]]
  154. time.sleep(1)
  155. Feishu.update_values(log_type, "xiaoniangao", "67U1WF", "F2:Z2", values)
  156. # 删除行或列,可选 ROWS、COLUMNS
  157. Feishu.dimension_range(log_type, "xiaoniangao", "CtXmf8", "ROWS", i + 1, i + 1)
  158. Common.logger(log_type).info("视频:{},下载/上传成功\n", download_video_title)
  159. return
  160. # except Exception as e:
  161. # Common.logger(log_type).error('download_publish异常:{}', e)
  162. @classmethod
  163. def run_download_publish(cls, log_type, env):
  164. # try:
  165. while True:
  166. if len(Feishu.get_values_batch(log_type, 'xiaoniangao', 'CtXmf8')) == 1:
  167. Common.logger(log_type).info('上传/下载完成\n')
  168. break
  169. else:
  170. cls.download_publish(log_type, env)
  171. # except Exception as e:
  172. # Common.logger(log_type).error('run_download_publish异常:{}', e)
  173. @classmethod
  174. def test_sheet(cls):
  175. sheet = Feishu.get_values_batch("test", "xiaoniangao", "InCA1I")
  176. print(sheet)
  177. if __name__ == "__main__":
  178. # Demo.run_download_publish('test', 'dev')
  179. Demo.test_sheet()
  180. pass