audio_qiyue.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import time
  2. import requests
  3. from model.DataBaseUtils import MysqlUtils
  4. from model.DateUtils import DateUtils
  5. from queue import Queue
  6. from app.api_data.platform_order.order_util import save_order
  7. class AudioQiyue:
  8. def __init__(self):
  9. self.db_quchen_text = MysqlUtils().quchen_text
  10. self.date_action = DateUtils()
  11. self.page_size = 50 # 一次请求的量级
  12. # 限制一分钟120次请求,设置为本地限制70s 120次请求
  13. self.time_sing_size = 120 # 时间队列长度
  14. self.time_sing_ms = 70 # 时间队列,第一对于最后的时间差值.
  15. # 暂时没有限制
  16. self.time_sing_ms = 0.1
  17. def control_speed(self, time_queue):
  18. if time_queue.full():
  19. time_s = time_queue.get()
  20. differ_time_num = time.time() - time_s
  21. if differ_time_num < self.time_sing_ms:
  22. print('访问速度过快,进行休眠,{}'.format(self.time_sing_ms - differ_time_num))
  23. time.sleep(self.time_sing_ms - differ_time_num)
  24. else:
  25. time_queue.put(time.time())
  26. else:
  27. time_queue.put(time.time())
  28. def get_order(self, start, end, account):
  29. order_list = []
  30. # 参数
  31. order_url = "https://a-o-api.qiyuept.com" + "/v1/orders"
  32. stage = account[0]
  33. token = account[1]
  34. time_sign = Queue(self.time_sing_size)
  35. for date in self.date_action.getDateLists(start, end):
  36. page = 1
  37. while True:
  38. timestamp = int(time.time())
  39. self.control_speed(time_queue=time_sign)
  40. url = order_url + "?" + "token=" + str(token) + "&timestamp=" + str(timestamp) + "&page=" + str(
  41. page) + "&size=" + str(self.page_size) + "&date=" + date
  42. rsp = requests.get(url=url)
  43. response_result_json = rsp.json()
  44. # print(response_result_json)
  45. code = response_result_json['code']
  46. if code != 0:
  47. print(stage, '七悦充值接口异常:', response_result_json)
  48. break
  49. result_data = response_result_json['data']
  50. total = result_data['total']
  51. if total <= 0:
  52. break
  53. order_item_list = result_data['data']
  54. for x in order_item_list:
  55. create_time = DateUtils.stamp_to_str(x['create_time'], '%Y-%m-%d %H:%M:%S')
  56. reg_time = DateUtils.stamp_to_str(x['user_create_time'], '%Y-%m-%d %H:%M:%S')
  57. order_list.append((
  58. create_time[:10],
  59. stage,
  60. '七悦有声',
  61. x['wechat_app_name'], # 公众号名称
  62. x['channel_id'],
  63. x['user_open_id'],
  64. create_time,
  65. reg_time, # 用户注册时间
  66. x['money'],
  67. x['book_name'],
  68. x['transaction_no'] if x['transaction_no'] != '0' else x['trade_no'], # 订单id
  69. x['state']
  70. # , x['user_id']
  71. )
  72. )
  73. next_page_url = result_data['next_page_url']
  74. if next_page_url is None:
  75. break
  76. page += 1
  77. # print(len(order_list))
  78. print(f'{stage} [{start}~{end}] 有订单{order_list.__len__()}')
  79. if order_list.__len__() > 0:
  80. # print(order_list)
  81. save_order(order_list)
  82. if __name__ == "__main__":
  83. account = ['趣程15期',
  84. 'eyJpdiI6Ilc0dmJWTjlHZnpJVVUwM3Q3dlc2aWc9PSIsInZhbHVlIjoiNFFvbXJISzBoTExoa0NJMmtXd0FMUT09IiwibWFjIjoiNTY1YjA3MTVlMzliYzg2MzcxMjZjOTRkYTMyY2FlZmJmNDUyZjYyZGEzM2I4MTMxNDNhMTIwNTIzZWViZjMyMSJ9']
  85. start = '2021-04-01'
  86. end = '2021-04-22'
  87. # AudioQiyue().get_order(start=start, end=end, account=account)
  88. AudioQiyue().run(start=start, end=end)