update_kanyikan.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/6/27
  4. import datetime
  5. import os
  6. import sys
  7. import time
  8. import requests
  9. import urllib3
  10. sys.path.append(os.getcwd())
  11. from crawler_monitor.main.common import Common
  12. from crawler_monitor.main.feishu_lib import Feishu
  13. proxies = {"http": None, "https": None}
  14. class UpdateKanYiKan:
  15. # 待更新数据列表
  16. update_list = []
  17. # 检查是否有今日的上升榜日期
  18. @classmethod
  19. def check_data(cls, date):
  20. # 判断J1单元格的日期是否为今天
  21. time.sleep(1)
  22. if Feishu.get_range_value("kanyikan", "monitor", "6fed97", "M1:M1")[0] != str(date):
  23. Common.logger("kanyikan").info("今天日期不存在")
  24. # 插入列 I1:J1,并写入日期
  25. values = [[str(date)]]
  26. time.sleep(1)
  27. Feishu.insert_columns("kanyikan", "monitor", "6fed97", "COLUMNS", 12, 13)
  28. time.sleep(1)
  29. Feishu.update_values("kanyikan", "monitor", "6fed97", "M1:M1", values)
  30. Common.logger("kanyikan").info("插入今天日期成功\n")
  31. else:
  32. Common.logger("kanyikan").info("今天日期已存在\n")
  33. # 更新看一看播放量
  34. @classmethod
  35. def update_play_cnt(cls):
  36. try:
  37. kanyikan_sheet = Feishu.get_values_batch("kanyikan", "monitor", "6fed97")
  38. for i in range(1, len(kanyikan_sheet)):
  39. Common.logger("kanyikan").info("正在更新第{}行", i + 1)
  40. video_id = kanyikan_sheet[i][6]
  41. if video_id is None or video_id == "":
  42. Common.logger("kanyikan").info("空行")
  43. cls.update_list.append("0")
  44. else:
  45. url = "https://search.weixin.qq.com/cgi-bin/recwxa/recwxagetonevideoinfo?"
  46. param = {
  47. "session": Common.get_session(),
  48. "vid": video_id,
  49. "wxaVersion": "3.9.2",
  50. "channelid": "208201",
  51. "scene": "32",
  52. "subscene": "1089",
  53. "model": "iPhone 11<iPhone12,1>14.7.1",
  54. "clientVersion": "8.0.18",
  55. "sharesearchid": "447665862521758270",
  56. "sharesource": "-1"
  57. }
  58. urllib3.disable_warnings()
  59. r = requests.get(url=url, params=param, proxies=proxies, verify=False)
  60. v_play_cnt = r.json()["data"]["played_cnt"]
  61. # 更新单个视频
  62. # Feishu.update_values(
  63. # "kanyikan", "monitor", "6fed97", "G" + str(i + 1) + ":" + "G" + str(i + 1), [[v_play_cnt]])
  64. # Common.logger("kanyikan").info("video_id:{}, play_cnt:{}, 更新成功\n", video_id, v_play_cnt)
  65. # 待更新数据列表
  66. cls.update_list.append(v_play_cnt)
  67. Common.logger("kanyikan").info("video_id:{}, 播放量:{},已添加至待更新数据列表", video_id, v_play_cnt)
  68. Common.logger("kanyikan").info("待更新列表数量:{}\n", len(cls.update_list))
  69. if len(cls.update_list) >= 200:
  70. Common.logger("kanyikan").info("M{}:M{}", str(i-198), str(i+1))
  71. Common.logger("kanyikan").info("{}\n", cls.update_list)
  72. time.sleep(1)
  73. Feishu.update_values("kanyikan", "monitor", "6fed97",
  74. "M"+str(i-198) + ":" + "M"+str(i+1), [[x] for x in cls.update_list])
  75. Common.logger("kanyikan").info("更新{}条播放量成功\n", len(cls.update_list))
  76. cls.update_list = []
  77. elif i+1 == len(kanyikan_sheet):
  78. Common.logger("kanyikan").info("M{}:M{}", str(i + 1 - len(cls.update_list) + 1), str(i + 1))
  79. Common.logger("kanyikan").info("{}\n", cls.update_list)
  80. time.sleep(1)
  81. Feishu.update_values("kanyikan", "monitor", "6fed97",
  82. "M"+str(i+1-len(cls.update_list)+1) + ":" + "M" + str(i+1),
  83. [[x] for x in cls.update_list])
  84. Common.logger("kanyikan").info("更新{}条播放量成功\n", len(cls.update_list))
  85. cls.update_list = []
  86. return
  87. except Exception as e:
  88. Common.logger("kanyikan").error("更新看一看播放量异常:{}", e)
  89. if __name__ == "__main__":
  90. kanyikan = UpdateKanYiKan()
  91. start_time = time.time()
  92. today = datetime.datetime.now().strftime("%Y-%m-%d")
  93. kanyikan.check_data(today)
  94. kanyikan.update_play_cnt()
  95. end_time = time.time()
  96. Common.logger("kanyikan").info("全部更新完成,共耗时:{}秒\n", int(end_time - start_time))