get_cost_older.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import sys
  2. import requests
  3. import hashlib
  4. import time
  5. import json
  6. import pymysql
  7. import logging
  8. import random
  9. from concurrent.futures import ThreadPoolExecutor
  10. from datetime import datetime
  11. from model.DateUtils import DateUtils
  12. from model.DataBaseUtils import MysqlUtils
  13. db = MysqlUtils()
  14. logging.getLogger().setLevel(logging.WARNING)
  15. du = DateUtils()
  16. def md5value(s):
  17. md5 = hashlib.md5()
  18. md5.update(s.encode("utf-8"))
  19. return md5.hexdigest()
  20. def daily_reports_get(access_token, account_id, st, et,level, fields):
  21. interface = 'daily_reports/get'
  22. url = 'https://api.e.qq.com/v1.1/' + interface
  23. common_parameters = {
  24. 'access_token': access_token,
  25. 'timestamp': int(time.time()),
  26. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  27. }
  28. parameters = {
  29. "account_id": account_id,
  30. "level": level,
  31. "date_range":
  32. {
  33. "start_date": st,
  34. "end_date": et
  35. },
  36. "page": 1,
  37. "page_size": 1000,
  38. "fields": fields
  39. }
  40. parameters.update(common_parameters)
  41. for k in parameters:
  42. if type(parameters[k]) is not str:
  43. parameters[k] = json.dumps(parameters[k])
  44. r = requests.get(url, params=parameters).json()
  45. if r['code'] != 0:
  46. print(r['code'], r['message'])
  47. return r
  48. def get_q_data(y,li,st,et):
  49. c = daily_reports_get(y[2], y[0],st,et, "REPORT_LEVEL_ADVERTISER", (
  50. 'date', 'view_count', 'valid_click_count', 'ctr', 'cpc', 'cost', 'web_order_count', 'web_order_rate',
  51. 'web_order_cost', 'follow_count', 'order_amount', 'order_roi', 'platform_page_view_count',
  52. 'web_commodity_page_view_count', 'from_follow_uv'))
  53. # print(c)
  54. if 'data' in c.keys() and len(c["data"]["list"]) > 0:
  55. for d in c['data']['list']:
  56. d['account_id'] = y[0]
  57. print(d['account_id'], d["cost"])
  58. x = tuple(d.values())
  59. li.append(x)
  60. def get_v_data(y,li,st,et):
  61. c = daily_reports_get(y[2], y[0],st,et, "REPORT_LEVEL_ADVERTISER_WECHAT", (
  62. 'date', 'cost', 'view_count', 'valid_click_count', 'ctr', 'official_account_follow_rate', 'order_amount',
  63. 'order_roi', 'order_count', 'order_rate', 'order_unit_price', 'web_order_cost', 'first_day_order_amount',
  64. 'first_day_order_count'))
  65. # print(c)
  66. if 'data' in c.keys() and len(c["data"]["list"])>0:
  67. for d in c['data']['list']:
  68. d['account_id'] = y[0]
  69. print(d['account_id'], d["cost"])
  70. x = tuple(d.values())
  71. li.append(x)
  72. # print(len(li))
  73. def get_vx_list():
  74. sql="select account_id,wechat_account_id,access_token,refresh_token,name," \
  75. "ifnull(stage,''),ifnull(pitcher,''),ifnull(platform,''),ifnull(book,'') from advertiser_vx"
  76. a= db.quchen_text.getData(sql)
  77. return a
  78. def get_qq_list():
  79. sql = "select account_id,'',access_token,refresh_token,name," \
  80. "ifnull(stage,''),ifnull(pitcher,''),ifnull(platform,''),ifnull(book,'') from advertiser_qq"
  81. a = db.quchen_text.getData(sql)
  82. return a
  83. def get_daily_vx(st,et):
  84. token_list_v = get_vx_list()
  85. print("获取vx账号:",token_list_v.__len__())
  86. time1 = time.time()
  87. executor = ThreadPoolExecutor(max_workers=20)
  88. li=[]
  89. for y in token_list_v:
  90. executor.submit(get_v_data,y,li,st,et)
  91. executor.shutdown()
  92. print('get_daily_vx:', len(li), 'cost:', int(time.time()-time1))
  93. mysql_insert_daily_vx(li)
  94. def get_daily_qq(st,et):
  95. token_list_q = get_qq_list()
  96. print("获取qq账号:",token_list_q.__len__())
  97. time1 = time.time()
  98. li=[]
  99. executor = ThreadPoolExecutor(max_workers=5)
  100. for x in token_list_q:
  101. executor.submit(get_q_data,x,li,st,et)
  102. executor.shutdown()
  103. print('get_qq_order:', len(li), 'cost:', int(time.time()-time1))
  104. mysql_insert_daily_qq(li)
  105. def mysql_insert_daily_vx(data):
  106. b ="""replace into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,
  107. order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id)
  108. values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
  109. db.quchen_text.executeMany(b, data)
  110. def mysql_insert_daily_qq(data):
  111. a = """replace into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,
  112. web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,
  113. from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
  114. db.quchen_text.executeMany(a,data)
  115. def run(st,et):
  116. get_daily_vx(st,et)
  117. get_daily_qq(st,et)
  118. def old_cost_hourly():
  119. st = et =du.getNow()
  120. run(st, et)
  121. def daily():
  122. st = du.get_n_days(-10)
  123. et = du.get_n_days(-1)
  124. run(st, et)
  125. if __name__ == '__main__':
  126. run()