users.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2023/2/2
  4. """
  5. 创建虚拟站内 UID
  6. https://w42nne6hzg.feishu.cn/docx/PhbhdXScYo9CxpxTT3gcOle4nIs
  7. """
  8. import os
  9. import sys
  10. import requests
  11. sys.path.append(os.getcwd())
  12. from common.common import Common
  13. from common.feishu import Feishu
  14. class Users:
  15. @classmethod
  16. def create_uid(cls, log_type, crawler, user_dict, env):
  17. """
  18. 创建站内虚拟 UID
  19. :param log_type: 日志
  20. :param crawler: 哪款爬虫
  21. :param user_dict: 字典{'nickName': 用户名, 'avatarUrl': 头像, 'tagName': 站内用户标签}
  22. :param env: 环境
  23. :return: 站内 UID
  24. """
  25. try:
  26. if env == 'dev':
  27. # 外网
  28. url = 'https://videotest.yishihui.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  29. # 内网
  30. # url = 'http://videotest-internal.yishihui.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  31. elif env == 'prod':
  32. # 外网
  33. url = 'https://longvideoapi.piaoquantv.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  34. # 内网
  35. # url = 'http://longvideoapi-internal.piaoquantv.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  36. else:
  37. # 外网
  38. url = 'https://longvideoapi.piaoquantv.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  39. # 内网
  40. # url = 'http://longvideoapi-internal.piaoquantv.com/longvideoapi/user/virtual/crawler/registerVirtualUser'
  41. params = {
  42. # 'count': 1, # (必须)账号个数:传1
  43. # 'accountType': 4, # (必须)账号类型 :传 4 app虚拟账号
  44. 'pwd': '', # 密码 默认 12346
  45. 'nickName': user_dict['nickName'], # 昵称 默认 vuser......
  46. 'avatarUrl': user_dict['avatarUrl'], # 头像Url 默认 http://weapppiccdn.yishihui.com/resources/images/pic_normal.png
  47. 'tagName': user_dict['tagName'], # 多条数据用英文逗号分割
  48. }
  49. response = requests.post(url=url, params=params)
  50. # print(response.text)
  51. user_id = response.json()['data']
  52. return user_id
  53. except Exception as e:
  54. Common.logger(log_type, crawler).error(f"create_user异常:{e}\n")
  55. @classmethod
  56. def create_user(cls, log_type, crawler, sheetid, out_user_dict, env, machine):
  57. """
  58. 补全飞书用户表信息,并返回
  59. :param log_type: 日志
  60. :param crawler: 哪款爬虫
  61. :param sheetid: 飞书表
  62. :param out_user_dict: 站外用户信息字典
  63. :param env: 正式环境:prod,测试环境:dev
  64. :param machine: 部署机器,阿里云填写 aliyun,aliyun_hk ,线下分别填写 macpro,macair,local
  65. :return: user_list
  66. """
  67. try:
  68. # 获取站外账号信息
  69. out_avatar_url = out_user_dict['out_avatar_url'] # 站外头像
  70. out_create_time = out_user_dict['out_create_time'] # 站外注册时间,格式: YYYY-MM-DD HH:MM:SS
  71. out_tag = out_user_dict['out_tag'] # 站外标签,例如:搞笑博主
  72. out_play_cnt = out_user_dict['out_play_cnt'] # 站外总播放量
  73. out_fans = out_user_dict['out_fans'] # 站外粉丝数量
  74. out_follow = out_user_dict['out_follow'] # 站外关注量
  75. out_friend = out_user_dict['out_friend'] # 站外好友量
  76. out_like = out_user_dict['out_like'] # 站外点赞量
  77. platform = out_user_dict['platform'] # 抓取平台,例如:小年糕、西瓜视频
  78. tag = out_user_dict['tag'] # 站内身份标签,例如:小年糕爬虫,小时榜爬虫策略;好看爬虫,频道榜爬虫策略;youtube爬虫,定向爬虫策略
  79. user_sheet = Feishu.get_values_batch(log_type, crawler, sheetid)
  80. user_list = []
  81. for i in range(1, len(user_sheet)):
  82. out_uid = user_sheet[i][2]
  83. user_name = user_sheet[i][3]
  84. our_uid = user_sheet[i][6]
  85. Common.logger(log_type, crawler).info(f"正在更新 {user_name} 用户信息\n")
  86. # 站内 UID 为空,且数据库中(youtube+out_user_id)返回数量 == 0,则创建新的站内账号
  87. if our_uid is None:
  88. sql = f""" select * from crawler_user where platform="{platform}" and out_user_id="{out_uid}" """
  89. our_user_info = MysqlHelper.get_values(log_type, crawler, sql, env, machine)
  90. # 数据库中(youtube + out_user_id)返回数量 == 0,则创建站内账号UID,并写入定向账号飞书表。并结合站外用户信息,一并写入爬虫账号数据库
  91. if our_user_info is None or len(our_user_info) == 0:
  92. # 创建站内账号
  93. create_user_dict = {
  94. 'nickName': user_name,
  95. 'avatarUrl': out_avatar_url,
  96. 'tagName': tag, # 例如 'youtube爬虫,定向爬虫策略'
  97. }
  98. our_uid = cls.create_uid(log_type, crawler, create_user_dict, env)
  99. Common.logger(log_type, crawler).info(f'新创建的站内UID:{our_uid}')
  100. if env == 'prod':
  101. our_user_link = f'https://admin.piaoquantv.com/ums/user/{our_uid}/post'
  102. else:
  103. our_user_link = f'https://testadmin.piaoquantv.com/ums/user/{our_uid}/post'
  104. Common.logger(log_type, crawler).info(f'站内用户主页链接:{our_user_link}')
  105. Feishu.update_values(log_type, crawler, sheetid, f'G{i + 1}:H{i + 1}',
  106. [[our_uid, our_user_link]])
  107. Common.logger(log_type, crawler).info(f'站内用户信息写入飞书成功!')
  108. # 用户信息写入数据库
  109. sql = f""" insert into crawler_user(user_id,
  110. out_user_id,
  111. out_user_name,
  112. out_avatar_url,
  113. out_create_time,
  114. out_tag,
  115. out_play_cnt,
  116. out_fans,
  117. out_follow,
  118. out_friend,
  119. out_like,
  120. platform,
  121. tag)
  122. values({our_uid},
  123. "{out_uid}",
  124. "{user_name}",
  125. "{out_avatar_url}",
  126. "{out_create_time}",
  127. "{out_tag}",
  128. {out_play_cnt},
  129. {out_fans},
  130. {out_follow},
  131. {out_friend},
  132. {out_like},
  133. "{platform}",
  134. "{tag}") """
  135. Common.logger(log_type, crawler).info(f'sql:{sql}')
  136. MysqlHelper.update_values(log_type, crawler, sql, env, machine)
  137. Common.logger(log_type, crawler).info('用户信息插入数据库成功!\n')
  138. # 数据库中(youtube + out_user_id)返回数量 != 0,则直接把数据库中的站内 UID 写入飞书
  139. else:
  140. our_uid = our_user_info[0][1]
  141. if 'env' == 'prod':
  142. our_user_link = f'https://admin.piaoquantv.com/ums/user/{our_uid}/post'
  143. else:
  144. our_user_link = f'https://testadmin.piaoquantv.com/ums/user/{our_uid}/post'
  145. Common.logger(log_type, crawler).info(f'站内用户主页链接:{our_user_link}')
  146. Feishu.update_values(log_type, crawler, sheetid, f'G{i + 1}:H{i + 1}',
  147. [[our_uid, our_user_link]])
  148. Common.logger(log_type, crawler).info(f'站内用户信息写入飞书成功!\n')
  149. user_dict = {
  150. 'out_user_id': out_uid,
  151. 'out_user_name': user_name,
  152. 'our_user_id': our_uid,
  153. }
  154. user_list.append(user_dict)
  155. return user_list
  156. except Exception as e:
  157. Common.logger(log_type, crawler).error(f"create_user:{e}\n")
  158. if __name__ == "__main__":
  159. uid = Users.create_uid('log', 'kanyikan', 'youtube爬虫,定向爬虫策略', 'dev')
  160. print(uid)