123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- import sys
- import requests
- import hashlib
- import time
- import json
- import pymysql
- import logging
- import random
- from concurrent.futures import ThreadPoolExecutor
- from datetime import datetime
- from model.DateUtils import DateUtils
- from model.DataBaseUtils import MysqlUtils
- db = MysqlUtils()
- logging.getLogger().setLevel(logging.WARNING)
- du = DateUtils()
- def md5value(s):
- md5 = hashlib.md5()
- md5.update(s.encode("utf-8"))
- return md5.hexdigest()
- def daily_reports_get(access_token, account_id, st, et,level, fields):
- interface = 'daily_reports/get'
- url = 'https://api.e.qq.com/v1.1/' + interface
- common_parameters = {
- 'access_token': access_token,
- 'timestamp': int(time.time()),
- 'nonce': str(time.time()) + str(random.randint(0, 999999)),
- }
- parameters = {
- "account_id": account_id,
- "level": level,
- "date_range":
- {
- "start_date": st,
- "end_date": et
- },
- "page": 1,
- "page_size": 1000,
- "fields": fields
- }
- 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).json()
- if r['code'] != 0:
- print(r['code'], r['message'])
- return r
- def get_q_data(y,li,st,et):
- c = daily_reports_get(y[2], y[0],st,et, "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'))
- # print(c)
- if 'data' in c.keys() and len(c["data"]["list"]) > 0:
- for d in c['data']['list']:
- d['account_id'] = y[0]
- print(d['account_id'], d["cost"])
- x = tuple(d.values())
- li.append(x)
- def get_v_data(y,li,st,et):
- c = daily_reports_get(y[2], y[0],st,et, "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'))
- # print(c)
- if 'data' in c.keys() and len(c["data"]["list"])>0:
- for d in c['data']['list']:
- d['account_id'] = y[0]
- print(d['account_id'], d["cost"])
- x = tuple(d.values())
- li.append(x)
- # print(len(li))
- def get_vx_list():
- sql="select account_id,wechat_account_id,access_token,refresh_token,name," \
- "ifnull(stage,''),ifnull(pitcher,''),ifnull(platform,''),ifnull(book,'') from advertiser_vx"
- a= db.quchen_text.getData(sql)
- return a
- def get_qq_list():
- sql = "select account_id,'',access_token,refresh_token,name," \
- "ifnull(stage,''),ifnull(pitcher,''),ifnull(platform,''),ifnull(book,'') from advertiser_qq"
- a = db.quchen_text.getData(sql)
- return a
- def get_daily_vx(st,et):
- token_list_v = get_vx_list()
- print("获取vx账号:",token_list_v.__len__())
- time1 = time.time()
- executor = ThreadPoolExecutor(max_workers=20)
- li=[]
- for y in token_list_v:
- executor.submit(get_v_data,y,li,st,et)
- executor.shutdown()
- print('get_daily_vx:', len(li), 'cost:', int(time.time()-time1))
- mysql_insert_daily_vx(li)
- def get_daily_qq(st,et):
- token_list_q = get_qq_list()
- print("获取qq账号:",token_list_q.__len__())
- time1 = time.time()
- li=[]
- executor = ThreadPoolExecutor(max_workers=5)
- for x in token_list_q:
- executor.submit(get_q_data,x,li,st,et)
- executor.shutdown()
- print('get_qq_order:', len(li), 'cost:', int(time.time()-time1))
- mysql_insert_daily_qq(li)
- def mysql_insert_daily_vx(data):
- b ="""replace 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)"""
- db.quchen_text.executeMany(b, data)
- def mysql_insert_daily_qq(data):
- a = """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)"""
- db.quchen_text.executeMany(a,data)
- def run(st,et):
- get_daily_vx(st,et)
- get_daily_qq(st,et)
- def old_cost_hourly():
- st = et =du.getNow()
- run(st, et)
- def daily():
- st = du.get_n_days(-10)
- et = du.get_n_days(-1)
- run(st, et)
- if __name__ == '__main__':
- run()
|