weixinzhishu.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2023/2/10
  4. import os
  5. import sys
  6. import time
  7. from datetime import date, timedelta
  8. import requests
  9. import json
  10. sys.path.append(os.getcwd())
  11. from common.feishu import Feishu
  12. from common.common import Common
  13. class Weixinzhishu:
  14. @classmethod
  15. def search_word(cls):
  16. return ["消息", "彻底", "现在", "真是", "突然", "消失", "太好了", "心声"]
  17. @classmethod
  18. def wechat_key(cls, log_type, crawler):
  19. try:
  20. sheet = Feishu.get_values_batch(log_type, crawler, 'sVL74k')
  21. for i in range(len(sheet)):
  22. search_key = sheet[1][1]
  23. openid = sheet[1][2]
  24. return search_key, openid
  25. except Exception as e:
  26. Common.logger(log_type, crawler).error(f"wechat_key:{e}\n")
  27. @classmethod
  28. def weixinzhishu(cls, log_type, crawler, word_id, word):
  29. try:
  30. wechat_key = cls.wechat_key(log_type, crawler)
  31. search_key = wechat_key[0]
  32. openid = wechat_key[-1]
  33. end_ymd = (date.today() + timedelta(days=0)).strftime("%Y%m%d")
  34. start_ymd = (date.today() + timedelta(days=-7)).strftime("%Y%m%d")
  35. url = "https://search.weixin.qq.com/cgi-bin/wxaweb/wxindex"
  36. payload = json.dumps({
  37. "openid": openid,
  38. "search_key": search_key,
  39. "cgi_name": "GetDefaultIndex",
  40. "start_ymd": start_ymd,
  41. "end_ymd": end_ymd,
  42. "query": word
  43. })
  44. headers = {
  45. 'Host': 'search.weixin.qq.com',
  46. 'content-type': 'application/json',
  47. 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.32(0x1800202a) NetType/WIFI Language/zh_CN',
  48. 'Referer': 'https://servicewechat.com/wxc026e7662ec26a3a/42/page-frame.html'
  49. }
  50. response = requests.request("POST", url, headers=headers, data=payload)
  51. if response.json()['code'] != 0 and response.json()['code'] != -10002:
  52. Common.logger(log_type, crawler).warning(f"response:{response.text}\n")
  53. elif response.json()['code'] == -10002:
  54. # 数据写入飞书
  55. now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time())))
  56. values = [[now, word, "该词暂未收录"]]
  57. Feishu.insert_columns(log_type, crawler, "5011a2", "ROWS", 1, 2)
  58. time.sleep(0.5)
  59. Feishu.update_values(log_type, crawler, "5011a2", "F2:Z2", values)
  60. Common.logger(log_type, crawler).info(f'热词"{word}"微信指数数据写入飞书成功\n')
  61. word_wechat_score_dict = {
  62. "id": word_id,
  63. "word": word,
  64. "wechatScores": [],
  65. }
  66. # print(word_wechat_score_dict)
  67. return word_wechat_score_dict
  68. else:
  69. time_index = response.json()['content']['resp_list'][0]['indexes'][0]['time_indexes']
  70. wechat_score_list = []
  71. for i in range(len(time_index)):
  72. score_time = time_index[i]['time']
  73. score_time_str = f"{str(score_time)[:4]}-{str(score_time)[4:6]}-{str(score_time)[6:]}"
  74. score = time_index[i]['score']
  75. wechat_score_dict = {"score": score, "scoreDate": score_time_str}
  76. wechat_score_list.append(wechat_score_dict)
  77. # 数据写入飞书
  78. now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time())))
  79. values = [[now, word, score_time_str, score]]
  80. Feishu.insert_columns(log_type, crawler, "5011a2", "ROWS", 1, 2)
  81. time.sleep(0.5)
  82. Feishu.update_values(log_type, crawler, "5011a2", "F2:Z2", values)
  83. Common.logger(log_type, crawler).info(f'热词"{word}"微信指数数据写入飞书成功\n')
  84. word_wechat_score_dict = {
  85. "id": word_id,
  86. "word": word,
  87. "wechatScores": wechat_score_list,
  88. }
  89. # print(word_wechat_score_dict)
  90. return word_wechat_score_dict
  91. except Exception as e:
  92. Common.logger(log_type, crawler).error(f"weixinzhishu异常:{e}\n")
  93. @classmethod
  94. def get_weixinzhishu(cls, log_type, crawler):
  95. our_word_list = []
  96. out_word_list = []
  97. our_word_sheet = Feishu.get_values_batch(log_type, 'weixinzhishu_search_word', "nCudsM")
  98. out_word_sheet = Feishu.get_values_batch(log_type, 'weixinzhishu_search_word', "D80uEf")
  99. for x in our_word_sheet:
  100. for y in x:
  101. if y is None:
  102. pass
  103. else:
  104. our_word_list.append(y)
  105. for x in out_word_sheet:
  106. for y in x:
  107. if y is None:
  108. pass
  109. else:
  110. out_word_list.append(y)
  111. word_list = our_word_list+out_word_list
  112. word_score_list = []
  113. # for i in range(len(word_list)):
  114. for i in range(100):
  115. word_score = cls.weixinzhishu(log_type, crawler, int(i+1), word_list[i])
  116. word_score_list.append(word_score)
  117. Common.logger(log_type, crawler).info(f'"{word_list[i]}"微信指数:{word_score}\n')
  118. word_dict = {
  119. "data": word_score_list
  120. }
  121. return word_dict
  122. if __name__ == "__main__":
  123. # word_dict = Weixinzhishu.weixinzhishu('weixin', 'weixinzhishu', 1, "出大")
  124. # print(word_dict)
  125. word_dict_demo = Weixinzhishu.get_weixinzhishu('weixin', 'weixinzhishu')
  126. print(word_dict_demo)
  127. pass