a.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. get_data_hourly.py
  5. """
  6. def get_zzy_order(st, et):
  7. time1 = time.time()
  8. API_list = al.zzy_account_list
  9. r = ()
  10. for x in API_list:
  11. my_key = x[0]
  12. secert = x[1]
  13. stage = x[2]
  14. my_sign = md5value(secert + 'key=' + my_key)
  15. url = 'https://openapi.818tu.com/partners/channel/channels/list?'
  16. parameter = 'key=' + my_key + '&sign=' + my_sign
  17. channel_list = requests.get(url + parameter) # 获取子渠道列表
  18. if 'data' in channel_list.json().keys():
  19. items = channel_list.json()['data']['items']
  20. elif len(x) > 3:
  21. my_key = x[3]
  22. secert = x[4]
  23. my_sign = md5value(secert + 'key=' + my_key)
  24. url = 'https://openapi.818tu.com/partners/channel/channels/list?'
  25. parameter = 'key=' + my_key + '&sign=' + my_sign
  26. channel_list = requests.get(url + parameter)
  27. items = channel_list.json()['data']['items']
  28. else:
  29. print(channel_list.json())
  30. items = []
  31. if items != []:
  32. for item in items: # 获取channel_id 后逐个拉取历史orders
  33. channel_id = item['id']
  34. channel = item['nickname']
  35. status = str(1)
  36. per_page = str(1000)
  37. limit_time = et
  38. get_time = st
  39. lt = parse.urlencode({'created_at[lt]': limit_time})
  40. gt = parse.urlencode({'created_at[gte]': get_time})
  41. url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
  42. my_sign_1 = md5value(secert + 'channel_id=' + str(
  43. channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + my_key + '&per_page=' + per_page + '&status=' + status)
  44. parameter_1 = 'channel_id=' + str(
  45. channel_id) + '&' + gt + '&' + lt + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_1
  46. orders = requests.get(url_1 + parameter_1)
  47. t = orders.json()['data']['count'] // int(per_page) + 1
  48. for page in range(1, t + 1):
  49. my_sign_2 = md5value(secert + 'channel_id=' + str(
  50. channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + my_key + '&page=' + str(
  51. page) + '&per_page=' + per_page + '&status=' + status)
  52. parameter_2 = 'channel_id=' + str(channel_id) + '&' + gt + '&' + lt + '&page=' + str(
  53. page) + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_2
  54. orders_1 = requests.get(url_1 + parameter_2)
  55. b = orders_1.json()['data']['items']
  56. for a in b:
  57. c = {}
  58. c['user_id'] = str(a['member']['openid'])
  59. c['channel'] = channel
  60. c['reg_time'] = a['member']['created_at']
  61. c['channel_id'] = channel_id
  62. c['amount'] = round(a['price'] / 100, 2)
  63. c['order_id'] = str(a['id'])
  64. c['order_time'] = a['created_at']
  65. c['platform'] = '掌中云'
  66. dtime = datetime.datetime.strptime(a['created_at'][0:10], "%Y-%m-%d")
  67. c['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
  68. c['stage'] = stage
  69. if str(a['from_novel_id']) != 'None':
  70. c['from_novel'] = a['from_novel']['title']
  71. else:
  72. c['from_novel'] = 'None'
  73. """
  74. del[a['member']]
  75. del[a['referral_link_id']]
  76. del[a['id']]
  77. del[a['created_at']]
  78. del[a['paid_at']]
  79. del a['border_id']
  80. del a['from_novel_id']
  81. del a['status']
  82. del a['price']
  83. del a['agent_uid']
  84. """
  85. x = sorted(c.items(), key=lambda item: item[0])
  86. x = dict(x)
  87. x = tuple(x.values())
  88. r = r + ((x),)
  89. cost_time = round((time.time() - time1) / 60, 1)
  90. print('get_zzy_order:', len(r), 'cost_minutes:', cost_time)
  91. return r