get_cost_daily.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ## Subject of obligation
  2. #!/usr/bin/env python3
  3. # -*- coding: utf-8 -*-
  4. import requests
  5. import urllib.parse
  6. import time
  7. import json
  8. import random
  9. import datetime
  10. import csv
  11. import pymysql
  12. ## import token_list as ts
  13. from apscheduler.schedulers.blocking import BlockingScheduler
  14. import token_list as tl
  15. #import importlib importlib.reload(tl)
  16. from imp import reload
  17. reload(tl)
  18. def getSelfDateStr(times=time.time(),date_format='%Y%m%d'):
  19. timestamps = str(time.strftime(date_format,time.localtime(times)))
  20. return timestamps
  21. def daily_reports_get(access_token,account_id,level,fields) :
  22. interface = 'daily_reports/get'
  23. url = 'https://api.e.qq.com/v1.1/' + interface
  24. common_parameters = {
  25. 'access_token': access_token,
  26. 'timestamp': int(time.time()),
  27. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  28. }
  29. time_stamp = int(time.time())
  30. st_date = getSelfDateStr((time_stamp-(3600*24*1)),date_format='%Y-%m-%d')
  31. ed_date = getSelfDateStr(time_stamp,date_format='%Y-%m-%d')
  32. #print("统计时间:",st_date, ed_date)
  33. parameters = {
  34. "account_id": account_id,
  35. "level":level,
  36. "date_range": {
  37. ##"start_date": '2020-11-12', ## 补数据,需求的时间段
  38. ##"end_date": '2020-11-16'
  39. "start_date":st_date,
  40. "end_date":st_date
  41. },
  42. "page":1,
  43. "page_size":1000,
  44. "fields":fields
  45. }
  46. parameters.update(common_parameters)
  47. for k in parameters:
  48. if type(parameters[k]) is not str:
  49. parameters[k] = json.dumps(parameters[k])
  50. r = requests.get(url, params = parameters)
  51. return r.json()
  52. def mysql_insert_daily_vx(data):
  53. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  54. cursor = db.cursor()
  55. time1 = time.time()
  56. sql2 = 'insert ignore into daily_vx (date,cost,view_count,valid_click_count,ctr,official_account_follow_rate,order_amount,order_roi,order_count,order_rate,order_unit_price,web_order_cost,first_day_order_amount,first_day_order_count,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
  57. try:
  58. cursor.executemany(sql2,data)
  59. db.commit()
  60. cost_time =round((time.time()-time1)/60,1)
  61. print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
  62. except:
  63. db.rollback()
  64. print('insert_daily_vx defeat')
  65. def mysql_insert_daily_qq(data):
  66. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  67. cursor = db.cursor()
  68. time1 = time.time()
  69. sql1 = 'insert ignore into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
  70. #sql2 = 'replace into daily_qq (date,view_count,valid_click_count,ctr,cpc,cost,web_order_count,web_order_rate,web_order_cost,follow_count,order_amount,order_roi,platform_page_view_count,web_commodity_page_view_count,from_follow_uv,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
  71. try:
  72. cursor.executemany(sql1,data)
  73. db.commit()
  74. cost_time =round((time.time()-time1)/60,1)
  75. print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
  76. except:
  77. db.rollback()
  78. print('insert_daily_qq defeat')
  79. def get_qq_cost(token_list_q):
  80. t=()
  81. for x in token_list_q :
  82. a = daily_reports_get(x[2],x[0],"REPORT_LEVEL_ADVERTISER",('date','view_count','valid_click_count','ctr','cpc','cost','web_order_count','web_order_rate','web_order_cost','follow_count','order_amount','order_roi','platform_page_view_count','web_commodity_page_view_count','from_follow_uv'))
  83. try :
  84. for b in a['data']['list']:
  85. b['account_id']=x[0]
  86. z = tuple(b.values())
  87. t= t+((z),)
  88. except Exception as e:
  89. print(a)
  90. continue
  91. mysql_insert_daily_qq(t)
  92. print(len(t),x[0])
  93. def get_wx_cost(token_list_v):
  94. t=()
  95. for y in token_list_v :
  96. c = daily_reports_get(y[2],y[0],"REPORT_LEVEL_ADVERTISER_WECHAT",('date','cost','view_count','valid_click_count','ctr','official_account_follow_rate','order_amount','order_roi','order_count','order_rate','order_unit_price','web_order_cost','first_day_order_amount','first_day_order_count'))
  97. #print(y[0],c['data']['list'])
  98. try :
  99. for d in c['data']['list']:
  100. d['account_id']=y[0]
  101. x = tuple(d.values())
  102. t= t+((x),)
  103. except Exception as e:
  104. print(c)
  105. continue
  106. mysql_insert_daily_vx(t)
  107. print(len(t),y[0])
  108. ## print(t)
  109. def get_cost():
  110. '''
  111. token_list_q = [
  112. ['18353744','','2d1c965ff2a7608aec1ad7baa6455ce0','b09e877adba47f9827e3d087ecb3d18d','乾城文海','趣程15期','董平','文鼎','仕途天骄'],
  113. ['18353743','','7c27bff5464266c81929e024bb120b36','1366f89a0e55de466ed625841037c431','乾城文海','趣程15期','董平','文鼎','仕途天骄']
  114. ]
  115. token_list_v =[
  116. ['14490987','wxd2e3b7b0c2f0ad9c','bad09cccc78b32d60ed68973bd4e62ad','71b38d5b9cf43cf0af4cd19a33331c3a','风吟书楼','清勇10月','蒋瑜','掌中云','风无痕深爱无言']
  117. ]
  118. '''
  119. token_list_v = tl.token_list_vx
  120. token_list_q = tl.token_list_qq
  121. get_wx_cost(token_list_v)
  122. get_qq_cost(token_list_q)
  123. #if __name__ == '__main__':
  124. # get_cost()
  125. start_job_time = '2020-11-25 04:17:00'
  126. if __name__ == '__main__':
  127. scheduler = BlockingScheduler()
  128. scheduler.add_job(get_cost, 'interval',days=1,start_date=start_job_time)
  129. scheduler.start()