get_campaign_daily.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Fri Jun 5 17:00:45 2020
  5. @author: c
  6. """
  7. import json
  8. import random
  9. import requests
  10. import time
  11. from datetime import datetime
  12. import pymysql
  13. import token_list as tl
  14. from concurrent.futures import ThreadPoolExecutor
  15. from util import date_util
  16. def adcreatives_get(access_token,account_id,fields) : #获取创意
  17. interface = 'adcreatives/get'
  18. url = 'https://api.e.qq.com/v1.1/' + interface
  19. page =1
  20. list1 = []
  21. common_parameters = {
  22. 'access_token': access_token,
  23. 'timestamp': int(time.time()),
  24. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  25. 'fields':fields
  26. }
  27. parameters = {
  28. "account_id": account_id,
  29. "page": page,
  30. "page_size": 100,
  31. "is_deleted": False
  32. }
  33. parameters.update(common_parameters)
  34. for k in parameters:
  35. if type(parameters[k]) is not str:
  36. parameters[k] = json.dumps(parameters[k])
  37. while True:
  38. h = requests.get(url, params=parameters)
  39. if h.status_code==200:
  40. r=h.json()
  41. break
  42. else:
  43. time.sleep(1)
  44. print("爬取失败 等待1s")
  45. if 'data' in r.keys():
  46. list1 = list1+r['data']['list']
  47. total_page=r['data']['page_info']['total_page']
  48. if total_page>1:
  49. for page in range(2,total_page+1):
  50. common_parameters = {
  51. 'access_token': access_token,
  52. 'timestamp': int(time.time()),
  53. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  54. 'fields':fields
  55. }
  56. parameters = {
  57. "account_id": account_id,
  58. "page": page,
  59. "page_size": 100,
  60. "is_deleted": False
  61. }
  62. parameters.update(common_parameters)
  63. for k in parameters:
  64. if type(parameters[k]) is not str:
  65. parameters[k] = json.dumps(parameters[k])
  66. r = requests.get(url, params = parameters).json()
  67. if 'data' in r.keys():
  68. list1 = list1+r['data']['list']
  69. return list1
  70. def ads_get(access_token,account_id,fields) : #获取广告
  71. interface = 'ads/get'
  72. url = 'https://api.e.qq.com/v1.1/' + interface
  73. common_parameters = {
  74. 'access_token': access_token,
  75. 'timestamp': int(time.time()),
  76. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  77. 'fields':fields
  78. }
  79. parameters = {
  80. "account_id": account_id,
  81. "page": 1,
  82. "page_size": 10,
  83. "is_deleted": False
  84. }
  85. parameters.update(common_parameters)
  86. for k in parameters:
  87. if type(parameters[k]) is not str:
  88. parameters[k] = json.dumps(parameters[k])
  89. r = requests.get(url, params = parameters)
  90. return r.json()
  91. def wechat_pages_get(access_token,account_id,page_id,fields) : #获取微信原生页
  92. interface = 'wechat_pages/get'
  93. url = 'https://api.e.qq.com/v1.1/' + interface
  94. common_parameters = {
  95. 'access_token': access_token,
  96. 'timestamp': int(time.time()),
  97. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  98. 'fields':fields
  99. }
  100. parameters = {
  101. "account_id": account_id,
  102. "filtering":
  103. [
  104. {
  105. "field": "page_id",
  106. "operator": "EQUALS",
  107. "values":
  108. [
  109. page_id
  110. ]
  111. }
  112. ],
  113. "page": 1,
  114. "page_size": 10
  115. }
  116. parameters.update(common_parameters)
  117. for k in parameters:
  118. if type(parameters[k]) is not str:
  119. parameters[k] = json.dumps(parameters[k])
  120. r = requests.get(url, params = parameters)
  121. return r.json()
  122. #print(wechat_pages_get('2a674bef201314d338be30420369671f',14985162,1900495593,('page_id','page_name','created_time','last_modified_time','page_template_id','preview_url','page_type','source_type')))
  123. def adgroups_get(access_token,account_id,fields) : #获取广告组
  124. interface = 'adgroups/get'
  125. url = 'https://api.e.qq.com/v1.1/' + interface
  126. common_parameters = {
  127. 'access_token': access_token,
  128. 'timestamp': int(time.time()),
  129. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  130. 'fields':fields
  131. }
  132. parameters = {
  133. "account_id": account_id,
  134. "page": 4,
  135. "page_size": 100,
  136. "is_deleted": False
  137. }
  138. parameters.update(common_parameters)
  139. for k in parameters:
  140. if type(parameters[k]) is not str:
  141. parameters[k] = json.dumps(parameters[k])
  142. r = requests.get(url, params = parameters)
  143. return r.json()
  144. #print(adgroups_get('2a674bef201314d338be30420369671f',14985162,('campaign_id','adgroup_id','adgroup_name','optimization_goal','billing_event','bid_amount','daily_budget','targeting','begin_date','end_date','time_series','bid_strategy','cold_start_audience','auto_audience','expand_enabled','expand_targeting','deep_conversion_spec','deep_optimization_action_type','conversion_id','deep_conversion_behavior_bid','deep_conversion_worth_rate','system_status')))
  145. def images_get(access_token,account_id,li) : #获取图片信息
  146. import json
  147. import random
  148. import requests
  149. import time
  150. fields=('image_id','preview_url')
  151. interface = 'images/get'
  152. url = 'https://api.e.qq.com/v1.1/' + interface
  153. page = 1
  154. list1 = []
  155. common_parameters = {
  156. 'access_token': access_token,
  157. 'timestamp': int(time.time()),
  158. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  159. 'fields':fields
  160. }
  161. parameters = {
  162. "account_id": account_id,
  163. "page": page,
  164. "page_size": 100
  165. }
  166. parameters.update(common_parameters)
  167. for k in parameters:
  168. if type(parameters[k]) is not str:
  169. parameters[k] = json.dumps(parameters[k])
  170. while True:
  171. h = requests.get(url, params = parameters)
  172. if h.status_code==200:
  173. r=h.json()
  174. break
  175. else:
  176. time.sleep(1)
  177. print("请求出错 等待1s..")
  178. if 'data' in r.keys():
  179. list1 = list1+r['data']['list']
  180. total_page=r['data']['page_info']['total_page']
  181. if total_page>1:
  182. for page in range(2,total_page+1):
  183. common_parameters = {
  184. 'access_token': access_token,
  185. 'timestamp': int(time.time()),
  186. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  187. 'fields':fields}
  188. parameters = {
  189. "account_id": account_id,
  190. "page": page,
  191. "page_size": 100}
  192. parameters.update(common_parameters)
  193. for k in parameters:
  194. if type(parameters[k]) is not str:
  195. parameters[k] = json.dumps(parameters[k])
  196. r = requests.get(url, params = parameters).json()
  197. if 'data' in r.keys():
  198. list1 = list1+r['data']['list']
  199. for x in list1:
  200. x["account_id"]=account_id
  201. li.append(tuple(x.values()))
  202. def campaigns_get(access_token,account_id,fields) : #获取推广计划
  203. import json
  204. import random
  205. import requests
  206. import time
  207. interface = 'campaigns/get'
  208. url = 'https://api.e.qq.com/v1.1/' + interface
  209. page = 1
  210. list1 = []
  211. common_parameters = {
  212. 'access_token': access_token,
  213. 'timestamp': int(time.time()),
  214. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  215. 'fields':fields
  216. }
  217. parameters = {
  218. "account_id": account_id,
  219. "page": page,
  220. "page_size": 100,
  221. "is_deleted": False
  222. }
  223. parameters.update(common_parameters)
  224. for k in parameters:
  225. if type(parameters[k]) is not str:
  226. parameters[k] = json.dumps(parameters[k])
  227. r = requests.get(url, params = parameters).json()
  228. if 'data' in r.keys():
  229. list1 = list1+r['data']['list']
  230. total_page=r['data']['page_info']['total_page']
  231. if total_page>1:
  232. for page in range(2,total_page+1):
  233. common_parameters = {
  234. 'access_token': access_token,
  235. 'timestamp': int(time.time()),
  236. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  237. 'fields':fields
  238. }
  239. parameters = {
  240. "account_id": account_id,
  241. "page": page,
  242. "page_size": 100,
  243. "is_deleted": False
  244. }
  245. parameters.update(common_parameters)
  246. for k in parameters:
  247. if type(parameters[k]) is not str:
  248. parameters[k] = json.dumps(parameters[k])
  249. r = requests.get(url, params = parameters).json()
  250. if 'data' in r.keys():
  251. list1 = list1+r['data']['list']
  252. return list1
  253. #aa=tl.token_list_vx[-2]
  254. #print(campaigns_get(aa[2],aa[0],('campaign_id','campaign_name','configured_status','campaign_type','promoted_object_type','daily_budget','budget_reach_date','created_time','last_modified_time','speed_mode','is_deleted')))
  255. def daily_reports_get(access_token,account_id,level,start_date,end_date,fields) : #获取wx投放计划日报数据
  256. interface = 'daily_reports/get'
  257. url = 'https://api.e.qq.com/v1.1/' + interface
  258. common_parameters = {
  259. 'access_token': access_token,
  260. 'timestamp': int(time.time()),
  261. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  262. 'fields':fields
  263. }
  264. parameters = {
  265. "account_id": account_id,
  266. "level": level,
  267. "date_range":
  268. {
  269. "start_date": start_date,
  270. "end_date": end_date
  271. },
  272. "page": 1,
  273. "page_size": 1000,
  274. "fields":
  275. [
  276. ]
  277. }
  278. parameters.update(common_parameters)
  279. for k in parameters:
  280. if type(parameters[k]) is not str:
  281. parameters[k] = json.dumps(parameters[k])
  282. while True:
  283. r = requests.get(url, params = parameters)
  284. if r.status_code==200:
  285. break
  286. else:
  287. time.sleep(1)
  288. print("请求出错 等待1s..")
  289. return r.json()
  290. def daily_qq_reports_get(access_token,account_id,compaign_id,level,start_date,end_date,fields) : #获取gdt投放计划日报数据
  291. interface = 'daily_reports/get'
  292. url = 'https://api.e.qq.com/v1.1/' + interface
  293. common_parameters = {
  294. 'access_token': access_token,
  295. 'timestamp': int(time.time()),
  296. 'nonce': str(time.time()) + str(random.randint(0, 999999)),
  297. 'fields':fields
  298. }
  299. parameters = {
  300. "account_id": account_id,
  301. "filtering":
  302. [
  303. {
  304. "field": "campaign_id",
  305. "operator": "EQUALS",
  306. "values":
  307. [
  308. compaign_id
  309. ]
  310. }
  311. ],
  312. "level": level,
  313. "date_range":
  314. {
  315. "start_date": start_date,
  316. "end_date": end_date
  317. },
  318. "page": 1,
  319. "page_size": 1000,
  320. "fields":
  321. [
  322. ]
  323. }
  324. parameters.update(common_parameters)
  325. for k in parameters:
  326. if type(parameters[k]) is not str:
  327. parameters[k] = json.dumps(parameters[k])
  328. r = requests.get(url, params = parameters)
  329. return r.json()
  330. def mysql_insert_daily_vx_campaign(data):
  331. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  332. cursor = db.cursor()
  333. sql = 'replace into daily_vx_campaign (account_id,date,campaign_id,view_count,cost,ctr,cpc,order_roi,thousand_display_price,valid_click_count,official_account_follow_count,conversions_count,official_account_follow_rate,conversions_rate,order_count,order_rate,order_unit_price,first_day_order_amount) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
  334. try:
  335. cursor.executemany(sql,data)
  336. db.commit()
  337. print('insert [daily_vx_campaign]',len(data))
  338. except:
  339. db.rollback()
  340. print('insert [daily_vx_campaign] defeat')
  341. def mysql_insert_campaign_vx(data):
  342. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  343. cursor = db.cursor()
  344. sql = 'replace into campaign_vx (campaign_id,campaign_name,configured_status,campaign_type,promoted_object_type,daily_budget,created_time,last_modified_time,account_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s)'
  345. try:
  346. cursor.executemany(sql,data)
  347. db.commit()
  348. print('insert [campaign_vx] ',len(data))
  349. except:
  350. db.rollback()
  351. print('insert [campaign_vx] defeat')
  352. def mysql_insert_adcreative(data):
  353. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  354. cursor = db.cursor()
  355. sql = 'replace into adcreative (campaign_id,adcreative_id,adcreative_name,image_id,title,promoted_object_type,page_type,page_id,link_page_id,promoted_object_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
  356. try:
  357. cursor.executemany(sql,data)
  358. db.commit()
  359. print('insert [adcreative] ',len(data))
  360. except:
  361. db.rollback()
  362. print('insert [adcreative] defeat')
  363. def mysql_insert_image(data):
  364. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  365. cursor = db.cursor()
  366. sql = 'replace into image (image_id,preview_url,account_id) values (%s,%s,%s)'
  367. try:
  368. cursor.executemany(sql,data)
  369. db.commit()
  370. except:
  371. db.rollback()
  372. print('insert image defeat')
  373. def v_data(x,st,et,q,r,p):
  374. account_id = x[0]
  375. access_token = x[2]
  376. start_date = time.strftime("%Y-%m-%d", time.localtime(st))
  377. end_date = time.strftime("%Y-%m-%d", time.localtime(et))
  378. # 获取推广计划
  379. l = campaigns_get(access_token, account_id, (
  380. 'campaign_id', 'campaign_name', 'configured_status', 'campaign_type', 'promoted_object_type', 'daily_budget',
  381. 'budget_reach_date', 'created_time', 'last_modified_time', 'speed_mode', 'is_deleted'))
  382. if len(l) > 0:
  383. for ll in l:
  384. ll['account_id'] = account_id
  385. if ll['created_time'] > st or ll['last_modified_time'] > st:
  386. q.append(ll['campaign_id'])
  387. lt = tuple(ll.values())
  388. p.append(lt)
  389. data_list = daily_reports_get(access_token, account_id, 'REPORT_LEVEL_CAMPAIGN_WECHAT', start_date, end_date, (
  390. 'account_id', 'date', 'campaign_id', 'view_count', 'cost', 'ctr', 'cpc', 'order_roi', 'thousand_display_price',
  391. 'valid_click_count', 'official_account_follow_count', 'conversions_count', 'official_account_follow_rate',
  392. 'conversions_rate', 'order_count', 'order_rate', 'order_unit_price', 'first_day_order_amount'))
  393. if 'data' in data_list.keys():
  394. for y in data_list['data']['list']:
  395. y['account_id'] = account_id
  396. y = tuple(y.values())
  397. r.append(y)
  398. def get_daily_vx_campaign(st,et): #获取投放计划、日报数据
  399. token_list_v = tl.token_list_vx
  400. r = []
  401. p = []
  402. q=[]
  403. t1=time.time()
  404. executor = ThreadPoolExecutor(max_workers=max_workers)
  405. for x in token_list_v:
  406. executor.submit(v_data,x,st,et,q,r,p)
  407. executor.shutdown()
  408. print("获取投放日报数据 {} 广告推广{} cost:{}s".format(len(r),len(p),int(time.time()-t1)))
  409. mysql_insert_daily_vx_campaign(r)
  410. mysql_insert_campaign_vx(p)
  411. def get_daily_qq_campaign(st,et):
  412. token_list_q = tl.token_list_qq
  413. r=()
  414. for x in token_list_q:
  415. account_id = x[0]
  416. access_token = x[2]
  417. start_date = st
  418. end_date = et
  419. l = campaigns_get(access_token,account_id,('campaign_id','campaign_name','configured_status','campaign_type','promoted_object_type','daily_budget','budget_reach_date','created_time','last_modified_time','speed_mode','is_deleted'))
  420. for ll in l:
  421. campaign_id =ll['campaign_id']
  422. data_list = daily_qq_reports_get(access_token,account_id,campaign_id,'REPORT_LEVEL_CAMPAIGN',start_date,end_date,('account_id','date','campaign_id','view_count','thousand_display_price','valid_click_count','ctr','cpc','cost','order_roi'))
  423. if len(data_list['data']['list'])>0:
  424. print(data_list)
  425. # print(l)
  426. if 'data' in data_list.keys():
  427. for y in data_list['data']['list']:
  428. y = tuple(y.values())
  429. r=r+((y),)
  430. def get_campaign_update_list():
  431. db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com','superc','Cc719199895','quchen_text')
  432. cursor = db.cursor()
  433. sql = 'select distinct advertiser_vx.account_id,access_token,campaign_id from campaign_vx left join advertiser_vx on advertiser_vx.account_id = campaign_vx.account_id where created_time>=%s or last_modified_time>=%s'
  434. data = (int((time.time()+8*3600)//86400*86400-8*3600-86400),int((time.time()+8*3600)//86400*86400-8*3600-86400))
  435. try:
  436. cursor.execute(sql,data)
  437. db.commit()
  438. x=cursor.fetchall()
  439. except:
  440. db.rollback()
  441. # 老的素材信息不删除
  442. # a = []
  443. # if len(x)>0:
  444. # for t in x:
  445. # a.append(int(t[2]))
  446. #
  447. # sql2 = 'delete from adcreative where campaign_id in {}'.format(str(tuple(a)))
  448. # try:
  449. # cursor.executemany(sql2,a)
  450. # db.commit()
  451. # cursor.fetchall()
  452. #
  453. # except:
  454. # db.rollback()
  455. return x
  456. def adcreative_vx_data(x,r):
  457. account_id = x[0]
  458. access_token = x[1]
  459. l = adcreatives_get(access_token, account_id, (
  460. 'campaign_id', 'adcreative_id', 'adcreative_name', 'adcreative_elements', 'promoted_object_type', 'page_type',
  461. 'page_spec', 'link_page_spec', 'universal_link_url', 'promoted_object_id'))
  462. if len(l) > 0:
  463. for ll in l:
  464. if 'image_list' in ll['adcreative_elements'].keys():
  465. for image_id in ll['adcreative_elements']['image_list']:
  466. a = {}
  467. a['campaign_id'] = ll['campaign_id']
  468. a['adcreative_id'] = ll['adcreative_id']
  469. a['adcreative_name'] = ll['adcreative_name']
  470. a['image_id'] = image_id
  471. a['title'] = ll['adcreative_elements']['title']
  472. a['promoted_object_type'] = ll['promoted_object_type']
  473. a['page_type'] = ll['page_type']
  474. if 'page_spec' in ll.keys():
  475. if 'page_id' in ll['page_spec'].keys():
  476. a['page_id'] = ll['page_spec']['page_id']
  477. else:
  478. a['page_id'] = None
  479. else:
  480. a['page_id'] = None
  481. if 'link_page_spec' in ll.keys():
  482. if 'page_id' in ll['link_page_spec'].keys():
  483. a['link_page_id'] = ll['link_page_spec']['page_id']
  484. else:
  485. a['link_page_id'] = None
  486. else:
  487. a['link_page_id'] = None
  488. a['promoted_object_id'] = ll['promoted_object_id']
  489. y = tuple(a.values())
  490. r = r + ((y),)
  491. elif 'image' in ll['adcreative_elements'].keys():
  492. a = {}
  493. a['campaign_id'] = ll['campaign_id']
  494. a['adcreative_id'] = ll['adcreative_id']
  495. a['adcreative_name'] = ll['adcreative_name']
  496. a['image_id'] = ll['adcreative_elements']['image']
  497. if 'title' in ll['adcreative_elements']:
  498. a['title'] = ll['adcreative_elements']['title']
  499. else:
  500. a['title'] = ''
  501. a['promoted_object_type'] = ll['promoted_object_type']
  502. a['page_type'] = ll['page_type']
  503. if 'page_spec' in ll.keys():
  504. if 'page_id' in ll['page_spec'].keys():
  505. a['page_id'] = ll['page_spec']['page_id']
  506. else:
  507. a['page_id'] = None
  508. else:
  509. a['page_id'] = None
  510. if 'link_page_spec' in ll.keys():
  511. if 'page_id' in ll['link_page_spec'].keys():
  512. a['link_page_id'] = ll['link_page_spec']['page_id']
  513. else:
  514. a['link_page_id'] = None
  515. else:
  516. a['link_page_id'] = None
  517. a['promoted_object_id'] = ll['promoted_object_id']
  518. y = tuple(a.values())
  519. r.append(y)
  520. def get_adcreative_vx():
  521. token_list_vx=get_campaign_update_list()
  522. r = []
  523. t1 = time.time()
  524. executor = ThreadPoolExecutor(max_workers=max_workers)
  525. for x in token_list_vx:
  526. executor.submit(adcreative_vx_data,x,r)
  527. executor.shutdown()
  528. print("获取广告创意{}cost:{}s".format(len(r),int(time.time()-t1)))
  529. mysql_insert_adcreative(r)
  530. def get_image_imformation():
  531. token_list_vx = tl.token_list_vx
  532. li = []
  533. t1=time.time()
  534. executor = ThreadPoolExecutor(max_workers=max_workers)
  535. for x in token_list_vx:
  536. account_id = x[0]
  537. access_token = x[2]
  538. executor.submit(images_get,access_token,account_id,li)
  539. executor.shutdown()
  540. print("获取图片信息{}条 cost:{}s".format(len(li),int(time.time()-t1)))
  541. mysql_insert_image(li)
  542. def start_all_job():
  543. start_time = date_util.get_n_day(n=-1,is_timestamp=1)
  544. end_time = date_util.get_n_day(n=-1,is_timestamp=1)
  545. #
  546. print("run[{0}] data".format(date_util.stamp_to_str(start_time)[:10]))
  547. print("线程数:",max_workers)
  548. print("开始获取计划日报----------")
  549. get_daily_vx_campaign(start_time,end_time)
  550. print("开始获取广告创意信息--------------")
  551. get_adcreative_vx()
  552. print("开始获取图片信息 ")
  553. get_image_imformation()
  554. print("success")
  555. if __name__ == '__main__':
  556. print("============start at " + str(datetime.today())[:19] + "===================")
  557. max_workers = 100
  558. start_all_job()