get_cost_game.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import threading
  2. import pandas
  3. from io import BytesIO
  4. from model.DateUtils import DateUtils
  5. from logging import handlers
  6. import logging
  7. import json
  8. import random
  9. import requests
  10. import time
  11. du = DateUtils()
  12. def async_tasks_add(ymd, account_id, access_token):
  13. interface = 'async_tasks/add'
  14. url = 'https://api.e.qq.com/v1.3/' + interface
  15. for i in range(5):
  16. try:
  17. common_parameters = {
  18. 'access_token': access_token,
  19. 'timestamp': int(time.time()),
  20. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  21. }
  22. parameters = {
  23. "account_id": account_id,
  24. "task_name": str(time.time()) + str(random.random()),
  25. "task_type": "TASK_TYPE_WECHAT_ADGROUP_DAILY_REPORT",
  26. "task_spec":
  27. {
  28. "task_type_wechat_adgroup_daily_report_spec":
  29. {
  30. "date": ymd
  31. }
  32. }
  33. }
  34. for k in parameters:
  35. if type(parameters[k]) is not str:
  36. parameters[k] = json.dumps(parameters[k])
  37. r = requests.post(url, params=common_parameters, data=parameters)
  38. logging.info(r.text)
  39. task_id = r.json()['data']['task_id']
  40. return task_id
  41. except:
  42. logging.info('time sleep 70 seconds')
  43. time.sleep(70)
  44. return None
  45. # 获取异步任务的文件id
  46. def async_tasks_get(account_id, access_token, task_id):
  47. interface = 'async_tasks/get'
  48. url = 'https://api.e.qq.com/v1.3/' + interface
  49. for i in range(5):
  50. try:
  51. common_parameters = {
  52. 'access_token': access_token,
  53. 'timestamp': int(time.time()),
  54. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  55. }
  56. fields = ("task_id", "result")
  57. parameters = {
  58. "account_id": account_id,
  59. 'fields': fields,
  60. "filtering":
  61. [
  62. {
  63. "field": "task_id",
  64. "operator": "EQUALS",
  65. "values":
  66. [
  67. task_id
  68. ]
  69. }
  70. ],
  71. "page": 1,
  72. "page_size": 10
  73. }
  74. parameters.update(common_parameters)
  75. for k in parameters:
  76. if type(parameters[k]) is not str:
  77. parameters[k] = json.dumps(parameters[k])
  78. r = requests.get(url, params=parameters)
  79. logging.info(r.text)
  80. file_id = r.json()['data']['list'][0]['result']['data']['file_info_list'][0]['file_id']
  81. return file_id
  82. except:
  83. logging.info('sleep {} seconds'.format(60 * i))
  84. time.sleep(60 * i)
  85. return None
  86. # 获取异步任务文件
  87. def async_task_files_get(account_id, access_token, task_id, file_id):
  88. interface = 'async_task_files/get'
  89. url = 'https://dl.e.qq.com/v1.1/' + interface
  90. for i in range(5):
  91. common_parameters = {
  92. 'access_token': access_token,
  93. 'timestamp': int(time.time()),
  94. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  95. }
  96. parameters = {
  97. "account_id": account_id,
  98. "task_id": task_id,
  99. "file_id": file_id
  100. }
  101. parameters.update(common_parameters)
  102. for k in parameters:
  103. if type(parameters[k]) is not str:
  104. parameters[k] = json.dumps(parameters[k])
  105. r = requests.get(url, params=parameters)
  106. if r.status_code == 200:
  107. return r
  108. def get_data(y, li, st, et):
  109. account_id = y[0]
  110. access_token = y[2]
  111. for i in du.getDateLists(st, et):
  112. task_id = async_tasks_add(i, account_id, access_token)
  113. time.sleep(10)
  114. file_id = async_tasks_get(account_id, access_token, task_id)
  115. if file_id:
  116. rsp = async_task_files_get(account_id, access_token, task_id, file_id)
  117. file_z = BytesIO(rsp.content)
  118. file_z.seek(0)
  119. source_data = pandas.read_csv(file_z)
  120. new_data = source_data[['view_pv', 'canvas_view_pv', 'cost', 'click_pv', 'follow_pv']]
  121. res = new_data.apply(lambda x: x.sum())
  122. '''
  123. date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,
  124. order_roi,order_count,order_rate,order_unit_price,web_order_cost,
  125. first_day_order_amount,first_day_order_count,account_id
  126. '''
  127. date = i
  128. cost = res['cost'].item() * 100
  129. view_count = res['view_pv'].item()
  130. valid_click_count = res['click_pv'].item()
  131. ctr = valid_click_count / view_count if view_count else 0
  132. official_account_follow_rate = res['follow_pv'].item() / view_count if view_count else 0
  133. order_amount = 0
  134. order_roi = 0
  135. order_count = 0
  136. order_rate = 0
  137. order_unit_price = 0
  138. web_order_cost = 0
  139. first_day_order_amount = 0
  140. first_day_order_count = 0
  141. account_id = account_id
  142. li.append((date, cost, view_count, valid_click_count, ctr, official_account_follow_rate, order_amount,
  143. order_roi, order_count, order_rate, order_unit_price, web_order_cost,
  144. first_day_order_amount, first_day_order_count, account_id))
  145. print(li)
  146. if __name__ == '__main__':
  147. logging.basicConfig(
  148. handlers=[
  149. logging.handlers.RotatingFileHandler('./test_get_media.log',
  150. maxBytes=10 * 1024 * 1024,
  151. backupCount=5,
  152. encoding='utf-8')
  153. , logging.StreamHandler() # 供输出使用
  154. ],
  155. level=logging.INFO,
  156. format="%(asctime)s - %(levelname)s %(filename)s %(funcName)s %(lineno)s - %(message)s"
  157. )
  158. # async_tasks_add(21768795,'80ddc731c9108817b560273422c8e187')
  159. # async_tasks_get(21768795, '80ddc731c9108817b560273422c8e187', 4183028546)
  160. # async_task_files_get(21768795,'80ddc731c9108817b560273422c8e187',4183028546, 510401785)
  161. # get_data()
  162. thread_list = []
  163. y = [21768795, '', '80ddc731c9108817b560273422c8e187']
  164. li = []
  165. get_data(y, li, '2021-10-07', '2021-10-07')
  166. # for i in range(1):
  167. # pass
  168. # one_tread=threading.Thread(target=get_data)
  169. # one_tread.start()