update_xiaoniangao.py 7.2 KB

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