campaign_cost_daily.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. """
  2. 计划维度日报"""
  3. import time
  4. from model.DataBaseUtils import MysqlUtils
  5. from concurrent.futures import ThreadPoolExecutor
  6. from .TxCostUtils import get_accounts
  7. import random
  8. import json
  9. import requests
  10. def run(st, et):
  11. executor = ThreadPoolExecutor(max_workers=10)
  12. for account in get_accounts():
  13. executor.submit(get_campaign_cost_daily, account[0], account[1], account[3], st, et)
  14. executor.shutdown()
  15. def get_campaign_cost_daily(account_id, token, flag,st, et):
  16. """1,获取计划维度日报,把有消耗的计划入库
  17. 2,根据有消耗的计划,拉取计划的基础信息入库
  18. """
  19. if flag == 'MP':
  20. get_mp_data()
  21. else:
  22. get_qq_data()
  23. def mp_campaign_daily_report(account_id,access_token, start_date, end_date):
  24. level = "REPORT_LEVEL_CAMPAIGN_WECHAT"
  25. interface = 'daily_reports/get'
  26. url = 'https://api.e.qq.com/v1.1/' + interface
  27. fields = ('account_id', 'date', 'campaign_id', 'view_count', 'cost', 'ctr', 'cpc', 'order_roi', 'thousand_display_price',
  28. 'valid_click_count', 'official_account_follow_count', 'conversions_count', 'official_account_follow_rate',
  29. 'conversions_rate', 'order_count', 'order_rate', 'order_unit_price', 'first_day_order_amount')
  30. page = 1
  31. li = []
  32. while True:
  33. parameters = {
  34. 'access_token': access_token,
  35. 'timestamp': int(time.time()),
  36. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  37. 'fields': fields,
  38. "account_id": account_id,
  39. "level": level,
  40. "date_range":
  41. {"start_date": start_date,
  42. "end_date": end_date},
  43. "page": page,
  44. "page_size": 1000,
  45. # "filtering": [],
  46. # "group_by": ["campaign_id",'date']
  47. }
  48. for k in parameters:
  49. if type(parameters[k]) is not str:
  50. parameters[k] = json.dumps(parameters[k])
  51. r = requests.get(url, params=parameters).json()
  52. data = r['data']['list']
  53. li.extend(data)
  54. total_page = r['data']['page_info']['total_page']
  55. if page == total_page:
  56. break
  57. else:
  58. page +=1
  59. return li
  60. def gdt_campaign_daily_report(account_id,access_token, start_date, end_date):
  61. level = "REPORT_LEVEL_CAMPAIGN_WECHAT"
  62. interface = 'daily_reports/get'
  63. url = 'https://api.e.qq.com/v1.1/' + interface
  64. fields = ('account_id', 'date', 'campaign_id', 'view_count', 'cost', 'ctr', 'cpc', 'order_roi', 'thousand_display_price',
  65. 'valid_click_count', 'official_account_follow_count', 'conversions_count', 'official_account_follow_rate',
  66. 'conversions_rate', 'order_count', 'order_rate', 'order_unit_price', 'first_day_order_amount')
  67. page = 1
  68. li = []
  69. while True:
  70. parameters = {
  71. 'access_token': access_token,
  72. 'timestamp': int(time.time()),
  73. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  74. 'fields': fields,
  75. "account_id": account_id,
  76. "level": level,
  77. "date_range":
  78. {"start_date": start_date,
  79. "end_date": end_date},
  80. "page": page,
  81. "page_size": 1000,
  82. # "filtering": [],
  83. # "group_by": ["campaign_id",'date']
  84. }
  85. for k in parameters:
  86. if type(parameters[k]) is not str:
  87. parameters[k] = json.dumps(parameters[k])
  88. r = requests.get(url, params=parameters).json()
  89. data = r['data']['list']
  90. li.extend(data)
  91. total_page = r['data']['page_info']['total_page']
  92. if page == total_page:
  93. break
  94. else:
  95. page +=1
  96. return li
  97. def get_qq_data():
  98. pass