shipinhao_scheduling.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import requests
  2. from common.aliyun_log import AliyunLogger
  3. from common.db import MysqlHelper
  4. def find_target_user(name, user_list):
  5. for obj in user_list:
  6. if obj['nickname'] == name:
  7. return obj
  8. else:
  9. continue
  10. return False
  11. class ShiPinHaoAccount:
  12. def __init__(self, token, cookie, account_name, platform, mode, rule_dict, env):
  13. self.token = token
  14. self.cookie = cookie
  15. self.account_name = account_name
  16. self.platform = platform
  17. self.mode = mode
  18. self.rule_dict = rule_dict
  19. self.env = env
  20. def get_history_id(self):
  21. """
  22. 从数据库表中读取 id
  23. """
  24. select_user_sql = f"""select name_id from accounts where name = "{self.account_name}" and platform = "{self.platform}" and useful = 1 limit 1"""
  25. name_id = MysqlHelper.get_values(log_type=self.mode, crawler=self.platform, sql=select_user_sql, env=self.env, machine="")
  26. if name_id:
  27. return name_id[0]
  28. else:
  29. return False
  30. def get_account_id(self):
  31. # 读历史数据,如果存在 id,则直接返回 id
  32. history_id = self.get_history_id()
  33. if history_id:
  34. return history_id
  35. else:
  36. url = "https://mp.weixin.qq.com/cgi-bin/videosnap"
  37. params = {
  38. "action": "search",
  39. "scene": "1",
  40. "buffer": "",
  41. "query": self.account_name,
  42. "count": "21",
  43. "token": self.token,
  44. "lang": "zh_CN",
  45. "f": "json",
  46. "ajax": "1"
  47. }
  48. headers = {
  49. 'authority': 'mp.weixin.qq.com',
  50. 'accept': '*/*',
  51. 'accept-language': 'en,zh-CN;q=0.9,zh;q=0.8',
  52. 'cookie': self.cookie,
  53. 'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=0&token={}&lang=zh_CN'.format(
  54. self.token),
  55. 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
  56. 'x-requested-with': 'XMLHttpRequest'
  57. }
  58. response = requests.request("GET", url, headers=headers, params=params)
  59. user_list = response.json()['acct_list']
  60. target_user = find_target_user(name=self.account_name, user_list=user_list)
  61. # 写入 MySql 数据库
  62. if target_user:
  63. update_sql = f"""INSERT INTO accounts (name, name_id, platform) values ("{self.account_name}", "{target_user['username']}", "{self.platform}")"""
  64. print(update_sql)
  65. MysqlHelper.update_values(log_type=self.mode, crawler=self.platform, sql=update_sql, env=self.env, machine="")
  66. return target_user['username']
  67. else:
  68. return False
  69. def get_account_videos(self):
  70. user_id = self.get_account_id()
  71. buffer = ""
  72. if user_id:
  73. url = "https://mp.weixin.qq.com/cgi-bin/videosnap"
  74. headers = {
  75. 'authority': 'mp.weixin.qq.com',
  76. 'accept': '*/*',
  77. 'accept-language': 'en,zh-CN;q=0.9,zh;q=0.8',
  78. 'cookie': self.cookie,
  79. 'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=0&token={}&lang=zh_CN'.format(
  80. self.token),
  81. 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
  82. 'x-requested-with': 'XMLHttpRequest'
  83. }
  84. while True:
  85. params = {
  86. "action": "get_feed_list",
  87. "username": user_id,
  88. "buffer": buffer,
  89. "count": "15",
  90. "scene": "1",
  91. "token": self.token,
  92. "lang": "zh_CN",
  93. "f": "json",
  94. "ajax": "1"
  95. }
  96. response = requests.request("GET", url, headers=headers, params=params)
  97. video_list = response.json()
  98. buffer = video_list['last_buff']
  99. # print(json.dumps(video_list, ensure_ascii=False, indent=4))
  100. # print(len(video_list['list']))
  101. for obj in video_list['list']:
  102. print(obj['desc'])
  103. else:
  104. print("Did not find any user info")
  105. def process_video_obj(self, video_obj):
  106. video_dict = {
  107. "video_id": video_obj['nonce_id'],
  108. "video_title": video_obj['desc'],
  109. "cover_url": video_obj['media']["cover_url"],
  110. "video_url": video_obj['media']['video_url'],
  111. "avatar_url": video_obj['head_url'],
  112. "width": video_obj['media']['width'],
  113. "height": video_obj['media']['height']
  114. }
  115. print(self.platform)
  116. if __name__ == "__main__":
  117. temp_token = "2080949641"
  118. temp_cookie = "ua_id=bw4VuFJr6fAuSkwdAAAAAClaW0m9Aua-6IfHaXU_zpo=; wxuin=95302180931488; mm_lang=zh_CN; RK=kreEMgtMMJ; ptcz=8fd1b267c98a1185bbe6455a081f1264048ee388363ca305d9ef4812892c7900; qq_domain_video_guid_verify=2ba78a5010233582; poc_sid=HOinP2Wj322Ex737kV651Zqy6y8fSprOUUvaegBg; _qimei_q36=; _qimei_h38=9eea33ea92afe8a922333fce03000001317916; pgv_pvid=9056371236; _clck=3930572231|1|fgk|0; uuid=6562bbd8859230ce4120dfa063c76997; rand_info=CAESIGAatjSIjvxVJVDxRDN7F/CNFWMifvAVqje98rd++8UY; slave_bizuin=3236647229; data_bizuin=3236647229; bizuin=3236647229; data_ticket=qm3i6jRhObs1yKHttGh0gVI02Mz7FTPfatn0RMLdaWyD7Ukcokm5Dc3mmYLQUZPg; slave_sid=UWxjZnhBREZRRTNKZ3dYZTlYRE9Db2lxQUhOM3lZUlRoMkV0MG1wdVVudGpQTWxnVkxzYW5pV2c3NjB3bnAyQ2lPaXBBVVRPazEybWtKSVEzTnUyazZ6WEJsdnFaWWVDaUFrM3pTTXRkeUNJS3RNVTc2NFRBWkZiVGQzYllacEFRalBBZ2tXZlltblJYS2VS; slave_user=gh_d284c09295eb; xid=cb96e6ba4b4960d74a22869b1bb21406; _clsk=z77guf|1699532621466|4|1|mp.weixin.qq.com/weheat-agent/payload/record"
  119. SP = ShiPinHaoAccount(
  120. token=temp_token,
  121. cookie=temp_cookie,
  122. account_name="心煤",
  123. platform="shipinhao",
  124. mode="author",
  125. rule_dict={},
  126. env="prod"
  127. )
  128. SP.get_account_videos()