123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import threading
- import pandas
- from io import BytesIO
- from model.DateUtils import DateUtils
- from logging import handlers
- import logging
- import json
- import random
- import requests
- import time
- du = DateUtils()
- def async_tasks_add(ymd, account_id, access_token):
- interface = 'async_tasks/add'
- url = 'https://api.e.qq.com/v1.3/' + interface
- for i in range(5):
- try:
- common_parameters = {
- 'access_token': access_token,
- 'timestamp': int(time.time()),
- 'nonce': str(time.time()) + str(random.randint(0, 999999)),
- }
- parameters = {
- "account_id": account_id,
- "task_name": str(time.time()) + str(random.random()),
- "task_type": "TASK_TYPE_WECHAT_ADGROUP_DAILY_REPORT",
- "task_spec":
- {
- "task_type_wechat_adgroup_daily_report_spec":
- {
- "date": ymd
- }
- }
- }
- for k in parameters:
- if type(parameters[k]) is not str:
- parameters[k] = json.dumps(parameters[k])
- r = requests.post(url, params=common_parameters, data=parameters)
- logging.info(r.text)
- task_id = r.json()['data']['task_id']
- return task_id
- except:
- logging.info('time sleep 70 seconds')
- time.sleep(70)
- return None
- # 获取异步任务的文件id
- def async_tasks_get(account_id, access_token, task_id):
- interface = 'async_tasks/get'
- url = 'https://api.e.qq.com/v1.3/' + interface
- for i in range(5):
- try:
- common_parameters = {
- 'access_token': access_token,
- 'timestamp': int(time.time()),
- 'nonce': str(time.time()) + str(random.randint(0, 999999)),
- }
- fields = ("task_id", "result")
- parameters = {
- "account_id": account_id,
- 'fields': fields,
- "filtering":
- [
- {
- "field": "task_id",
- "operator": "EQUALS",
- "values":
- [
- task_id
- ]
- }
- ],
- "page": 1,
- "page_size": 10
- }
- parameters.update(common_parameters)
- for k in parameters:
- if type(parameters[k]) is not str:
- parameters[k] = json.dumps(parameters[k])
- r = requests.get(url, params=parameters)
- logging.info(r.text)
- file_id = r.json()['data']['list'][0]['result']['data']['file_info_list'][0]['file_id']
- return file_id
- except:
- logging.info('sleep {} seconds'.format(60 * i))
- time.sleep(60 * i)
- return None
- # 获取异步任务文件
- def async_task_files_get(account_id, access_token, task_id, file_id):
- interface = 'async_task_files/get'
- url = 'https://dl.e.qq.com/v1.1/' + interface
- for i in range(5):
- common_parameters = {
- 'access_token': access_token,
- 'timestamp': int(time.time()),
- 'nonce': str(time.time()) + str(random.randint(0, 999999)),
- }
- parameters = {
- "account_id": account_id,
- "task_id": task_id,
- "file_id": file_id
- }
- parameters.update(common_parameters)
- for k in parameters:
- if type(parameters[k]) is not str:
- parameters[k] = json.dumps(parameters[k])
- r = requests.get(url, params=parameters)
- if r.status_code == 200:
- return r
- def get_data(y, li, st, et):
- account_id = y[0]
- access_token = y[2]
- for i in du.getDateLists(st, et):
- task_id = async_tasks_add(i, account_id, access_token)
- time.sleep(10)
- file_id = async_tasks_get(account_id, access_token, task_id)
- if file_id:
- rsp = async_task_files_get(account_id, access_token, task_id, file_id)
- file_z = BytesIO(rsp.content)
- file_z.seek(0)
- source_data = pandas.read_csv(file_z)
- new_data = source_data[['view_pv', 'canvas_view_pv', 'cost', 'click_pv', 'follow_pv']]
- res = new_data.apply(lambda x: x.sum())
- '''
- 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
- '''
- date = i
- cost = res['cost'].item() * 100
- view_count = res['view_pv'].item()
- valid_click_count = res['click_pv'].item()
- ctr = valid_click_count / view_count if view_count else 0
- official_account_follow_rate = res['follow_pv'].item() / view_count if view_count else 0
- order_amount = 0
- order_roi = 0
- order_count = 0
- order_rate = 0
- order_unit_price = 0
- web_order_cost = 0
- first_day_order_amount = 0
- first_day_order_count = 0
- account_id = account_id
- li.append((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))
- print(li)
- if __name__ == '__main__':
- logging.basicConfig(
- handlers=[
- logging.handlers.RotatingFileHandler('./test_get_media.log',
- maxBytes=10 * 1024 * 1024,
- backupCount=5,
- encoding='utf-8')
- , logging.StreamHandler() # 供输出使用
- ],
- level=logging.INFO,
- format="%(asctime)s - %(levelname)s %(filename)s %(funcName)s %(lineno)s - %(message)s"
- )
- # async_tasks_add(21768795,'80ddc731c9108817b560273422c8e187')
- # async_tasks_get(21768795, '80ddc731c9108817b560273422c8e187', 4183028546)
- # async_task_files_get(21768795,'80ddc731c9108817b560273422c8e187',4183028546, 510401785)
- # get_data()
- thread_list = []
- y = [21768795, '', '80ddc731c9108817b560273422c8e187']
- li = []
- get_data(y, li, '2021-10-07', '2021-10-07')
- # for i in range(1):
- # pass
- # one_tread=threading.Thread(target=get_data)
- # one_tread.start()
|