update_xiaoniangao.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/6/23
  4. import time
  5. import requests
  6. import urllib3
  7. from crawler_monitor.main.common import Common
  8. from crawler_monitor.main.feishu_lib import Feishu
  9. proxies = {"http": None, "https": None}
  10. class UpdateXiaoNianGao:
  11. # 待更新数据列表
  12. update_list = []
  13. # 检查是否有今日的上升榜日期
  14. @classmethod
  15. def check_data(cls, date):
  16. # 判断J1单元格的日期是否为今天
  17. time.sleep(1)
  18. if Feishu.get_range_value("xiaoniangao", "monitor", "N7e2yI", "P1:P1")[0] != str(date):
  19. Common.logger("xiaoniangao").info("今天日期不存在")
  20. # 插入列 I1:J1,并写入日期
  21. values = [[str(date)]]
  22. time.sleep(1)
  23. Feishu.insert_columns("xiaoniangao", "monitor", "N7e2yI", "COLUMNS", 15, 16)
  24. time.sleep(1)
  25. Feishu.update_values("xiaoniangao", "monitor", "N7e2yI", "P1:P1", values)
  26. Common.logger("xiaoniangao").info("插入今天日期成功\n")
  27. else:
  28. Common.logger("xiaoniangao").info("今天日期已存在\n")
  29. # 更新小年糕播放量
  30. @classmethod
  31. def update_play_cnt(cls):
  32. try:
  33. xiaoniangao_sheet = Feishu.get_values_batch("xiaoniangao", "monitor", "N7e2yI")
  34. for i in range(1, len(xiaoniangao_sheet)):
  35. Common.logger("xiaoniangao").info("正在更新第{}行", i+1)
  36. video_id = xiaoniangao_sheet[i][6]
  37. user_id = xiaoniangao_sheet[i][9]
  38. user_mid = xiaoniangao_sheet[i][10]
  39. if video_id is None or video_id == "" \
  40. or user_id is None or user_id == "" \
  41. or user_mid is None or user_mid == "":
  42. Common.logger("xiaoniangao").info("空行")
  43. cls.update_list.append("0")
  44. else:
  45. url = "https://kapi.xiaoniangao.cn/profile/get_profile_by_id"
  46. headers = {
  47. "x-b3-traceid": "96376ab5ed525",
  48. "X-Token-Id": "35f5e036e103500b6b51f11adf1b345d-1145266232",
  49. "uid": "250e6514-fd83-446c-a880-e274c7f17bce",
  50. "content-type": "application/json",
  51. "Accept-Encoding": "gzip,compress,br,deflate",
  52. "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X)'
  53. ' AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 '
  54. 'MicroMessenger/8.0.20(0x18001432) NetType/WIFI Language/zh_CN',
  55. "Referer": "https://servicewechat.com/wxd7911e4c177690e4/623/page-frame.html"
  56. }
  57. data = {
  58. "play_src": "1",
  59. "profile_id": int(user_id),
  60. "profile_mid": int(user_mid),
  61. "qs": "imageMogr2/gravity/center/rotate/$/thumbnail/"
  62. "!400x400r/crop/400x400/interlace/1/format/jpg",
  63. "h_qs": "imageMogr2/gravity/center/rotate/$/thumbnail"
  64. "/!80x80r/crop/80x80/interlace/1/format/jpg",
  65. "share_width": 625,
  66. "share_height": 500,
  67. "no_comments": True,
  68. "no_follow": True,
  69. "vid": str(video_id),
  70. "hot_l1_comment": True,
  71. "token": "a7a4cb67d17ceb2e02a6d8bb6854beaa",
  72. "uid": "250e6514-fd83-446c-a880-e274c7f17bce",
  73. "proj": "ma",
  74. "wx_ver": "8.0.23",
  75. "code_ver": "3.67.0",
  76. "log_common_params": {
  77. "e": [{
  78. "data": {
  79. "page": "dynamicSharePage"
  80. }
  81. }],
  82. "ext": {
  83. "brand": "iPhone",
  84. "device": "iPhone 11",
  85. "os": "iOS 14.7.1",
  86. "weixinver": "8.0.23",
  87. "srcver": "2.24.6",
  88. "net": "wifi",
  89. "scene": "1089"
  90. },
  91. "pj": "1",
  92. "pf": "2",
  93. "session_id": "d0c5c363-d571-4c8a-ab55-91a7ad284ee4"
  94. }
  95. }
  96. urllib3.disable_warnings()
  97. r = requests.post(headers=headers, url=url, json=data, proxies=proxies, verify=False)
  98. video_play_cnt = r.json()["data"]["play_pv"]
  99. # 单条更新
  100. # Feishu.update_values(
  101. # "xiaoniangao", "monitor", "N7e2yI", "J" + str(i+1) + ":" + "J" + str(i+1), [[video_play_cnt]])
  102. # Common.logger("xiaoniangao").info("video_id:{}, play_cnt:{}, 更新成功\n", video_id, video_play_cnt)
  103. # 待更新数据列表
  104. cls.update_list.append(video_play_cnt)
  105. Common.logger("xiaoniangao").info("video_id:{}, 播放量:{},已添加至待更新数据列表", video_id, video_play_cnt)
  106. Common.logger("xiaoniangao").info("待更新列表数量:{}\n", len(cls.update_list))
  107. if len(cls.update_list) >= 200:
  108. Common.logger("xiaoniangao").info("P{}:P{}", str(i-198), str(i+1))
  109. Common.logger("xiaoniangao").info("{}\n", cls.update_list)
  110. time.sleep(1)
  111. Feishu.update_values(
  112. "xiaoniangao", "monitor", "N7e2yI",
  113. "P"+str(i-198) + ":" + "P"+str(i+1), [[x] for x in cls.update_list])
  114. Common.logger("xiaoniangao").info("更新{}条播放量成功\n", len(cls.update_list))
  115. cls.update_list = []
  116. elif i+1 == len(xiaoniangao_sheet):
  117. Common.logger("xiaoniangao").info("P{}:P{}", str(i+1-len(cls.update_list)+1), str(i+1))
  118. Common.logger("xiaoniangao").info("{}\n", cls.update_list)
  119. time.sleep(1)
  120. Feishu.update_values(
  121. "xiaoniangao", "monitor", "N7e2yI",
  122. "P" + str(i+1-len(cls.update_list)+1) + ":" + "P" + str(i+1), [[x] for x in cls.update_list])
  123. Common.logger("xiaoniangao").info("更新{}条播放量成功\n", len(cls.update_list))
  124. cls.update_list = []
  125. return
  126. except Exception as e:
  127. Common.logger("xiaoniangao").error("更新小年糕播放量异常:{}", e)
  128. if __name__ == "__main__":
  129. xng = UpdateXiaoNianGao()
  130. xng.check_data("2022/06/29")
  131. xng.update_play_cnt()