update_ad_daily.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Fri May 15 16:09:12 2020
  5. @author: chencong
  6. """
  7. #!/usr/bin/env python3
  8. # -*- coding: utf-8 -*-
  9. """
  10. Created on Thu Apr 30 11:18:31 2020
  11. @author: chencong
  12. """
  13. import requests
  14. import urllib.parse
  15. import time
  16. import json
  17. import random
  18. import datetime
  19. import csv
  20. import pymysql
  21. from apscheduler.schedulers.blocking import BlockingScheduler
  22. import token_list as tl
  23. def get_daily_vx():
  24. token_list_v = tl.token_list_vx
  25. t = ()
  26. time1 = time.time()
  27. for y in token_list_v :
  28. 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'))
  29. if 'data' in c.keys():
  30. for d in c['data']['list']:
  31. d['account_id']=y[0]
  32. x = tuple(d.values())
  33. t= t+((x),)
  34. cost_time =round((time.time()-time1)/60,1)
  35. print('get_daily_vx:',len(t),'cost_minutes:',cost_time)
  36. return t
  37. def get_daily_qq():
  38. token_list_q = tl.token_list_qq
  39. t= ()
  40. time1 = time.time()
  41. for x in token_list_q :
  42. 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'))
  43. if 'data' in a.keys():
  44. for b in a['data']['list']:
  45. b['account_id']=x[0]
  46. x = tuple(b.values())
  47. t= t+((x),)
  48. cost_time =round((time.time()-time1)/60,1)
  49. print('get_qq_order:',len(t),'cost_minutes:',cost_time)
  50. return t
  51. def daily_reports_get(access_token,account_id,level,fields) :
  52. interface = 'daily_reports/get'
  53. url = 'https://api.e.qq.com/v1.1/' + interface
  54. common_parameters = {
  55. 'access_token': access_token,
  56. 'timestamp': int(time.time()),
  57. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  58. }
  59. parameters = {
  60. "account_id": account_id,
  61. "level":level,
  62. "date_range":
  63. {
  64. "start_date": str(datetime.date.today()-datetime.timedelta(days=1)),
  65. "end_date": str(datetime.date.today()-datetime.timedelta(days=1))
  66. },
  67. "page":1,
  68. "page_size":1000,
  69. "fields":fields
  70. }
  71. parameters.update(common_parameters)
  72. for k in parameters:
  73. if type(parameters[k]) is not str:
  74. parameters[k] = json.dumps(parameters[k])
  75. r = requests.get(url, params = parameters)
  76. return r.json()
  77. def mysql_insert_daily_vx(data):
  78. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  79. cursor = db.cursor()
  80. time1 = time.time()
  81. sql1 = 'delete from daily_vx where date = %s'
  82. sql2 = 'insert 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);'
  83. try:
  84. cursor.execute(sql1,str(datetime.date.today()-datetime.timedelta(days=1)))
  85. db.commit()
  86. print('clear_daily_vx access')
  87. except :
  88. print('clear_daily_vx defeat')
  89. try:
  90. cursor.executemany(sql2,data)
  91. db.commit()
  92. cost_time =round((time.time()-time1)/60,1)
  93. print('insert_daily_vx access',len(data),'cost_minutes:',cost_time)
  94. except:
  95. db.rollback()
  96. print('insert_daily_vx defeat')
  97. def mysql_insert_daily_qq(data):
  98. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  99. cursor = db.cursor()
  100. time1 = time.time()
  101. sql1 = 'delete from daily_qq where date = %s'
  102. sql2 = 'insert 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);'
  103. try:
  104. cursor.execute(sql1,str(datetime.date.today()-datetime.timedelta(days=1)))
  105. db.commit()
  106. print('clear_daily_qq access')
  107. except :
  108. print('clear_daily_qq defeat')
  109. try:
  110. cursor.executemany(sql2,data)
  111. db.commit()
  112. cost_time =round((time.time()-time1)/60,1)
  113. print('insert_daily_qq access',len(data),'cost_minutes:',cost_time)
  114. except:
  115. db.rollback()
  116. print('insert_daily_qq defeat')
  117. def start_job():
  118. mysql_insert_daily_vx(get_daily_vx())
  119. mysql_insert_daily_qq(get_daily_qq())
  120. start_job_time = '2020-09-24 06:00:00'
  121. if __name__ == '__main__':
  122. scheduler = BlockingScheduler()
  123. scheduler.add_job(start_job, 'interval',hours=12,start_date=start_job_time)
  124. scheduler.start()