123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Created on Thu Jun 4 15:06:05 2020
- @author: chencong
- """
- import requests
- import hashlib
- import time
- from urllib import parse
- import datetime
- import json
- import math
- import pymysql
- import random
- from apscheduler.schedulers.blocking import BlockingScheduler
- import account_list as al
- import token_list as tl
- import smtplib
- from email.mime.text import MIMEText
- def md5value(s):
- md5 = hashlib.md5()
- md5.update(s.encode("utf-8"))
- return md5.hexdigest()
- def get_yuewen_order(st, et):
- t = ()
- time1 = time.time()
- url = 'https://open.yuewen.com/cpapi/wxRecharge/querychargelog'
- version = 1
- secert_list = al.yuewen_account_list
- for secert in secert_list:
- start_time = st
- end_time = et
- email = secert[0]
- appsecert = secert[1]
- for i in range((et - st) // 86400 + 1):
- timestamp = int(time.time())
- s = ''
- page = 1
- order_status = 2
- data = {
- 'email': email,
- 'version': version,
- 'timestamp': timestamp,
- 'start_time': start_time,
- 'end_time': end_time,
- 'page': page,
- 'order_status': order_status
- }
- # 'last_min_id':last_min_id,
- # 'last_max_id':last_max_id,
- # 'total_count':total_count,
- # 'last_page':last_page}
- sorted_data = sorted(data.items())
- for k, v in sorted_data:
- s = s + str(k) + str(v)
- sign = md5value(appsecert + s).upper()
- data1 = {
- 'email': email,
- 'version': version,
- 'timestamp': timestamp,
- 'start_time': start_time,
- 'end_time': end_time,
- 'page': page,
- 'order_status': order_status,
- 'sign': sign
- }
- list1 = requests.get(url=url, params=data1)
- total_count = list1.json()['data']['total_count']
- last_min_id = list1.json()['data']['min_id']
- last_max_id = list1.json()['data']['max_id']
- last_page = list1.json()['data']['page']
- if total_count > 0:
- for x in list1.json()['data']['list']:
- y = {}
- dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
- y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
- y['platform'] = '阅文'
- y['channel'] = x['app_name']
- y['from_novel'] = x['book_name']
- y['user_id'] = x['openid']
- y['stage'] = ''
- y['channel_id'] = 0
- y['order_time'] = x['order_time']
- y['amount'] = x['amount']
- y['reg_time'] = x['reg_time']
- y['order_id'] = x['order_id']
- """
- del x['app_name']
- del x['order_status']
- del x['order_type']
- del x['openid']
- del x['user_name']
- del x['sex']
- del x['channel_name']
- del x['book_id']
- del x['book_name']
- del x['report_status']
- if y['order_time'] != time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(et)):
- """
- y = sorted(y.items(), key=lambda item: item[0])
- y = dict(y)
- y = tuple(y.values())
- t = t + ((y),)
- if total_count > 100:
- for page in range(2, math.ceil(total_count / 100) + 1):
- data = {
- 'email': email,
- 'version': version,
- 'timestamp': timestamp,
- 'start_time': start_time,
- 'end_time': end_time,
- 'page': page,
- 'last_min_id': last_min_id,
- 'last_max_id': last_max_id,
- 'total_count': total_count,
- 'last_page': last_page,
- 'order_status': order_status
- }
- sorted_data = sorted(data.items())
- s1 = ''
- for k, v in sorted_data:
- s1 = s1 + str(k) + str(v)
- sign = md5value(appsecert + s1).upper()
- data2 = {
- 'email': email,
- 'version': version,
- 'timestamp': timestamp,
- 'start_time': start_time,
- 'end_time': end_time,
- 'page': page,
- 'last_min_id': last_min_id,
- 'last_max_id': last_max_id,
- 'total_count': total_count,
- 'last_page': last_page,
- 'order_status': order_status,
- 'sign': sign
- }
- list2 = requests.get(url=url, params=data2)
- for x in list2.json()['data']['list']:
- y = {}
- dtime = datetime.datetime.strptime(x['order_time'], "%Y-%m-%d %H:%M:%S")
- y['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
- y['platform'] = '阅文'
- y['channel'] = x['app_name']
- y['from_novel'] = x['book_name']
- y['user_id'] = x['openid']
- y['stage'] = ''
- y['channel_id'] = 0
- y['order_time'] = x['order_time']
- y['amount'] = x['amount']
- y['reg_time'] = x['reg_time']
- y['order_id'] = x['order_id']
- """
- del x['report_status']
- del x['app_name']
- del x['order_status']
- del x['order_type']
- del x['openid']
- del x['user_name']
- del x['sex']
- del x['channel_name']
- del x['book_id']
- del x['book_name']
- if y['order_time'] != time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(et)):
- """
- y = sorted(y.items(), key=lambda item: item[0])
- y = dict(y)
- y = tuple(y.values())
- t = t + ((y),)
- total_count = list2.json()['data']['total_count']
- last_min_id = list2.json()['data']['min_id']
- last_max_id = list2.json()['data']['max_id']
- last_page = list2.json()['data']['page']
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_yuewen_order:', len(t), 'cost_minutes:', cost_time)
- return t
- def get_zhangdu_order(st, et):
- time1 = time.time()
- secert_list = al.zhangdu_account_list
- t = ()
- url = 'https://api.zhangdu520.com/channel/getorder'
- for item in secert_list: # 分渠道
- uid = item[0]
- appsecert = item[1]
- channel = item[2]
- timestamp = int(time.time())
- sign = md5value(str(uid) + '&' + appsecert + '&' + str(timestamp))
- page = 1
- starttime = st
- endtime = et
- for x in range((et - st) // 86400 + 1): # 分时段
- Params = {'uid': uid,
- 'timestamp': timestamp,
- 'sign': sign,
- 'starttime': starttime,
- 'endtime': endtime
- }
- list1 = requests.get(url=url, params=Params)
- pageCount = list1.json()['data']['pageCount']
- if pageCount > 0:
- for a in range(1, pageCount + 1): # 分页
- page = a
- Params = {
- 'uid': uid,
- 'timestamp': timestamp,
- 'sign': sign,
- 'starttime': starttime,
- 'endtime': endtime,
- 'page': page
- }
- list2 = requests.get(url=url, params=Params).json()['data']['list']
- for b in list2:
- c = {}
- c['channel_id'] = uid
- c['order_id'] = str(b['orderno'])
- c['order_time'] = b['ctime']
- c['user_id'] = b['openid']
- c['platform'] = '掌读'
- c['channel'] = channel
- c['stage'] = ''
- c['from_novel'] = ''
- c['reg_time'] = b['regtime']
- c['date'] = ((int(b['ctime']) + 8 * 3600) // 86400) * 86400 - 8 * 3600
- c['amount'] = b['amount']
- """
- del b['openid']
- del b['regtime']
- del b['ip']
- del b['ua']
- del b['id']
- del b['ctime']
- del b['userid']
- del b['orderno']
- del b['source']
- del b['sourceid']
- """
- if b['status'] == '1' and int(c['order_time']) < et:
- del b['status']
- x = sorted(c.items(), key=lambda item: item[0])
- x = dict(x)
- x = tuple(x.values())
- t = t + ((x),)
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_zhangdu_order:', len(t), 'cost_minutes:', cost_time)
- return t
- def get_huasheng_order(st, et):
- time1 = time.time()
- apikey_list = al.huasheng_account_list
- url = 'https://vip.rlcps.cn/api/getMerchants'
- t = ()
- for key in apikey_list: # 获取每个vip账号下的channel_id
- apiKEY = key[0]
- apiSecurity = key[1]
- stage = key[2]
- timestamp = str(int(time.time()))
- sign = md5value(apiKEY + timestamp + apiSecurity).upper()
- data = {'apiKey': apiKEY,
- 'apiSecurity': apiSecurity,
- 'timestamp': timestamp,
- 'sign': sign
- }
- list0 = requests.post(url, data).json()
- for merchant in list0['data']:
- merchant_id = merchant['merchant_id']
- merchant_name = merchant['merchant_name']
- url1 = 'https://vip.rlcps.cn/api/orderList'
- start_time = st
- for i in range((et - st) // 86400 + 1):
- date = time.strftime("%Y-%m-%d", time.localtime(start_time))
- sign = md5value(apiKEY + date + str(merchant_id) + timestamp + apiSecurity).upper()
- page = 1
- data1 = {
- 'apiKey': apiKEY,
- 'apiSecurity': apiSecurity,
- 'timestamp': timestamp,
- 'date': date,
- 'merchant_id': merchant_id,
- 'sign': sign,
- 'page': page
- }
- list1 = requests.post(url1, data1).json()
- if 'data' in list1.keys() and len(list1['data']) > 0:
- for i in range(int(math.ceil(list1['count'] / 500))):
- data2 = {
- 'apiKey': apiKEY,
- 'apiSecurity': apiSecurity,
- 'timestamp': timestamp,
- 'date': date,
- 'merchant_id': merchant_id,
- 'sign': sign,
- 'page': page
- }
- list2 = requests.post(url1, data2).json()
- for x in list2['data']:
- if x['order_status'] == 1:
- t1 = time.strptime(x['pay_at'], "%Y-%m-%d %H:%M:%S")
- ts = int(time.mktime(t1))
- if ts >= st and ts < et:
- y = {}
- # dtime = datetime.datetime.strptime(x['pay_at'],"%Y-%m-%d")
- # y['date']= ((int(time.mktime(dtime.timetuple()))+8*3600)//86400)*86400-8*3600
- y['order_id'] = x['trans_id']
- y['order_time'] = x['pay_at']
- y['reg_time'] = x['join_at']
- y['date'] = (start_time + 8 * 3600) // 86400 * 86400 - 8 * 3600
- y['channel'] = merchant_name
- y['channel_id'] = merchant_id
- y['from_novel'] = x['book_name']
- y['platform'] = '花生'
- y['stage'] = stage
- y['user_id'] = x['openid']
- y['amount'] = x['amount']
- """
- del x['order_num']
- del x['book_name']
- del x['trans_id']
- del x['pay_at']
- del x['join_at']
- del x['subscribe_at']
- del x['openid']
- del x['charge_count']
- del x['book_id']
- del x['order_status']
- del x['user_name']
- del x['spread_name']
- del x['request_at']
- if y['order_time'] != time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(et)):
- """
- y = sorted(y.items(), key=lambda item: item[0])
- y = dict(y)
- y = tuple(y.values())
- t = t + ((y),)
- page = page + 1
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_huasheng_order:', len(t), 'cost_minutes:', cost_time)
- return t
- def get_zzy_order(st, et):
- time1 = time.time()
- API_list = al.zzy_account_list
- r = ()
- for x in API_list:
- my_key = x[0]
- secert = x[1]
- stage = x[2]
- my_sign = md5value(secert + 'key=' + my_key)
- #url = 'https://openapi.818tu.com/partners/channel/channels/list?'
- url = 'https://inovel.818tu.com/partners/channel/channels/list?'
- parameter = 'key=' + my_key + '&sign=' + my_sign
- channel_list = requests.get(url + parameter) # 获取子渠道列表
- if 'data' in channel_list.json().keys():
- items = channel_list.json()['data']['items']
- elif len(x) > 3:
- my_key = x[3]
- secert = x[4]
- my_sign = md5value(secert + 'key=' + my_key)
- #url = 'https://openapi.818tu.com/partners/channel/channels/list?'
- url = 'https://inovel.818tu.com/partners/channel/channels/list?'
- parameter = 'key=' + my_key + '&sign=' + my_sign
- channel_list = requests.get(url + parameter)
- items = channel_list.json()['data']['items']
- else:
- print(channel_list.json())
- items = []
- if items != []:
- for item in items: # 获取channel_id 后逐个拉取历史orders
- channel_id = item['id']
- channel = item['nickname']
- status = str(1)
- per_page = str(1000)
- limit_time = et
- get_time = st
- lt = parse.urlencode({'created_at[lt]': limit_time})
- gt = parse.urlencode({'created_at[gte]': get_time})
- #url_1 = 'https://openapi.818tu.com/partners/channel/orders/list?'
- url_1 = 'https://inovel.818tu.com/partners/channel/orders/list?'
- my_sign_1 = md5value(secert + 'channel_id=' + str(
- channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + my_key + '&per_page=' + per_page + '&status=' + status)
- parameter_1 = 'channel_id=' + str(
- channel_id) + '&' + gt + '&' + lt + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_1
- orders = requests.get(url_1 + parameter_1)
- t = orders.json()['data']['count'] // int(per_page) + 1
- for page in range(1, t + 1):
- my_sign_2 = md5value(secert + 'channel_id=' + str(
- channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + my_key + '&page=' + str(
- page) + '&per_page=' + per_page + '&status=' + status)
- parameter_2 = 'channel_id=' + str(channel_id) + '&' + gt + '&' + lt + '&page=' + str(
- page) + '&per_page=' + per_page + '&status=' + status + '&key=' + my_key + '&sign=' + my_sign_2
- orders_1 = requests.get(url_1 + parameter_2)
- b = orders_1.json()['data']['items']
- for a in b:
- c = {}
- c['user_id'] = str(a['member']['openid'])
- c['channel'] = channel
- c['reg_time'] = a['member']['created_at']
- c['channel_id'] = channel_id
- c['amount'] = round(a['price'] / 100, 2)
- c['order_id'] = str(a['id'])
- c['order_time'] = a['created_at']
- c['platform'] = '掌中云'
- dtime = datetime.datetime.strptime(a['created_at'][0:10], "%Y-%m-%d")
- c['date'] = ((int(time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
- c['stage'] = stage
- if str(a['from_novel_id']) != 'None':
- c['from_novel'] = a['from_novel']['title']
- else:
- c['from_novel'] = 'None'
- """
- del[a['member']]
- del[a['referral_link_id']]
- del[a['id']]
- del[a['created_at']]
- del[a['paid_at']]
- del a['border_id']
- del a['from_novel_id']
- del a['status']
- del a['price']
- del a['agent_uid']
- """
- x = sorted(c.items(), key=lambda item: item[0])
- x = dict(x)
- x = tuple(x.values())
- r = r + ((x),)
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_zzy_order:', len(r), 'cost_minutes:', cost_time)
- return r
- def get_ysg_order(st, et):
- time1 = time.time()
- key_list = al.ysg_account_list
- url = 'https://novel.youshuge.com/v2/open/orders'
- o = ()
- for key in key_list:
- host_name = key[0]
- channel_id = key[1]
- secert_key = key[2]
- channel = key[3]
- stage = key[4]
- timestamp = int(time.time())
- start_date = time.strftime("%Y-%m-%d", time.localtime(st))
- end_date = time.strftime("%Y-%m-%d", time.localtime(et + 86400))
- page = 1
- str1 = 'channel_id=' + str(channel_id) + '&end_date=' + end_date + '&host_name=' + host_name + '&page=' + str(
- page) + '&pay_status=1' + '&start_date=' + start_date + '&time=' + str(timestamp) + '&key=' + secert_key
- sign = md5value(str1).upper()
- data = {
- 'sign': sign,
- 'host_name': host_name,
- 'time': timestamp,
- 'channel_id': channel_id,
- 'page': page,
- 'pay_status': 1,
- 'start_date': start_date,
- 'end_date': end_date
- }
- r = requests.post(url, data).json()
- if 'data' in r.keys():
- if len(r['data']) > 0:
- for i in range((r['data'][0]['count'] - 1) // 100 + 1):
- timestamp = int(time.time())
- str1 = 'channel_id=' + str(
- channel_id) + '&end_date=' + end_date + '&host_name=' + host_name + '&page=' + str(
- page) + '&pay_status=1' + '&start_date=' + start_date + '&time=' + str(
- timestamp) + '&key=' + secert_key
- sign = md5value(str1).upper()
- data2 = {
- 'sign': sign,
- 'host_name': host_name,
- 'time': timestamp,
- 'channel_id': channel_id,
- 'page': page,
- 'pay_status': 1,
- 'start_date': start_date,
- 'end_date': end_date
- }
- r2 = requests.post(url, data2).json()
- if 'data' in r2.keys():
- if len(r2['data']) > 0:
- for x in r2['data']:
- t1 = time.strptime(x['create_time'], "%Y-%m-%d %H:%M:%S")
- ts = int(time.mktime(t1))
- if ts >= st and ts < et:
- y = {}
- y['order_id'] = x['order_num']
- y['amount'] = round(int(x['price']) / 100, 2)
- y['order_time'] = x['create_time']
- y['channel'] = channel
- y['from_novel'] = x['book_name']
- y['stage'] = stage
- y['user_id'] = x['openid']
- y['channel_id'] = channel_id
- dtime = datetime.datetime.strptime(x['create_time'][0:10], "%Y-%m-%d")
- y['date'] = ((int(
- time.mktime(dtime.timetuple())) + 8 * 3600) // 86400) * 86400 - 8 * 3600
- y['platform'] = '悠书阁'
- y['reg_time'] = x['reg_time']
- y = sorted(y.items(), key=lambda item: item[0])
- y = dict(y)
- y = tuple(y.values())
- o = o + ((y),)
- page = page + 1
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_ysg_order:', len(o), 'cost_minutes:', cost_time)
- return o
- def daily_reports_get(access_token, account_id, 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": time.strftime("%Y-%m-%d", time.localtime()),
- "end_date": time.strftime("%Y-%m-%d", time.localtime())
- },
- "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)
- return r.json()
- def get_daily_vx():
- token_list_v = tl.token_list_vx
- t = ()
- time1 = time.time()
- for y in token_list_v:
- 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'))
- if 'data' in c.keys():
- for d in c['data']['list']:
- d['account_id'] = y[0]
- x = tuple(d.values())
- t = t + ((x),)
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_daily_vx:', len(t), 'cost_minutes:', cost_time)
- return t
- def get_daily_qq():
- token_list_q = tl.token_list_qq
- t = ()
- time1 = time.time()
- for x in token_list_q:
- 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'))
- for b in a['data']['list']:
- b['account_id'] = x[0]
- y = tuple(b.values())
- t = t + ((y),)
- cost_time = round((time.time() - time1) / 60, 1)
- print('get_qq_order:', len(t), 'cost_minutes:', cost_time)
- return t
- def mysql_insert_order(data):
- db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com', 'superc', 'Cc719199895', 'quchen_text')
- cursor = db.cursor()
- time1 = time.time()
- # sql = 'insert ignore into quchen_text.order (amount,channel,channel_id,date,from_novel,order_id,order_time,platform,reg_time,stage,user_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
- sql = 'replace into quchen_text.order(amount,channel,channel_id,date,from_novel,order_id,order_time,platform,reg_time,stage,user_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
- try:
- cursor.executemany(sql, data)
- db.commit()
- cost_time = round((time.time() - time1) / 60, 1)
- print('insert_order access', len(data), 'cost_minutes:', cost_time)
- except:
- db.rollback()
- print('insert_order defeat')
- def mysql_insert_daily_vx(data):
- db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com', 'superc', 'Cc719199895', 'quchen_text')
- cursor = db.cursor()
- time1 = time.time()
- sql1 = 'delete from daily_vx where date = %s'
- 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);'
- try:
- cursor.execute(sql1, str(time.strftime("%Y-%m-%d", time.localtime())))
- db.commit()
- print('clear_daily_vx access')
- except:
- print('clear_daily_vx defeat')
- try:
- cursor.executemany(sql2, data)
- db.commit()
- cost_time = round((time.time() - time1) / 60, 1)
- print('insert_daily_vx access', len(data), 'cost_minutes:', cost_time)
- except:
- db.rollback()
- print('insert_daily_vx defeat')
- def mysql_insert_daily_qq(data):
- db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com', 'superc', 'Cc719199895', 'quchen_text')
- cursor = db.cursor()
- time1 = time.time()
- sql1 = 'delete from daily_qq where date = %s'
- sql2 = '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);'
- try:
- cursor.execute(sql1, str(time.strftime("%Y-%m-%d", time.localtime())))
- db.commit()
- print('clear_daily_qq access')
- except:
- print('clear_daily_qq defeat')
- try:
- cursor.executemany(sql2, data)
- db.commit()
- cost_time = round((time.time() - time1) / 60, 1)
- print('insert_daily_qq access', len(data), 'cost_minutes:', cost_time)
- except:
- db.rollback()
- print('insert_daily_qq defeat')
- def send_waring_email():
- msg_Sender = '2091961210@qq.cm' # 发送方邮箱
- msg_code = 'ylltzynbshmufdeh' # 发送方邮箱的授权码
- msg_Receiver = '2091961210@qq.cm' # 收件人邮箱
- subject = "数据库未按时更新" # 主题
- content = "数据库未按时更新" # 正文
- msg = MIMEText(content, _charset="utf-8")
- msg['Subject'] = subject
- msg['From'] = msg_Sender
- msg['To'] = msg_Receiver
- try:
- s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 邮件服务器及端口号
- s.login(msg_Sender, msg_code)
- s.sendmail(msg_Sender, msg_Receiver, msg.as_string())
- print("发送成功")
- except Exception as e:
- print("发送失败", e)
- finally:
- s.quit()
- def update_check():
- st_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
- et_unix = int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600)
- # et_unix = et_unix - 1
- st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
- et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
- db = pymysql.connect('rm-bp1c9cj79872tx3aaro.mysql.rds.aliyuncs.com', 'superc', 'Cc719199895', 'quchen_text')
- cursor = db.cursor()
- sql4 = "select platform,round(max(if(platform='掌读',order_time,unix_timestamp(order_time))),0) from quchen_text.order where date=%s and platform not in ('阳光','悠书阁') group by platform "
- data = (int((time.time() + 8 * 3600) // 86400 * 86400 - 8 * 3600))
- try:
- cursor.execute(sql4, data)
- db.commit()
- x = cursor.fetchall()
- print('access', x)
- except:
- db.rollback()
- print('defeat', x)
- zzy = x[0][1] // 3600 * 3600
- zhangdu = x[1][1] // 3600 * 3600
- huasheng = x[2][1] // 3600 * 3600
- yuewen = x[3][1] // 3600 * 3600
- if zzy < int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600):
- mysql_insert_order(get_zzy_order(st_dt, et_dt))
- if zhangdu < int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600):
- mysql_insert_order(get_zhangdu_order(st_unix, et_unix))
- if huasheng < int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600):
- mysql_insert_order(get_huasheng_order(st_unix, et_unix))
- if yuewen < int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600):
- mysql_insert_order(get_yuewen_order(st_unix, et_unix - 1))
- try:
- cursor.execute(sql4, data)
- db.commit()
- z = cursor.fetchall()
- print('access', z)
- except:
- db.rollback()
- print('defeat', z)
- a = []
- for k in x:
- a.append(k[1])
- y = min(a) // 3600 * 3600
- if y < int((time.time() + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600):
- send_waring_email()
- def start_order_job():
- st_unix_time = time.time()
- st_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
- et_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600)
- # et_unix = et_unix - 1
- st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
- et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
- print(st_dt, et_dt)
- mysql_insert_order(get_yuewen_order(st_unix, et_unix))
- mysql_insert_order(get_zhangdu_order(st_unix, et_unix))
- mysql_insert_order(get_ysg_order(st_unix, et_unix))
- mysql_insert_order(get_huasheng_order(st_unix, et_unix))
- mysql_insert_order(get_zzy_order(st_dt, et_dt))
- update_check()
- def start_cost_job():
- st_unix_time = time.time()
- st_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600 - 3600)
- et_unix = int((st_unix_time + 8 * 3600) // 3600 * 3600 - 8 * 3600)
- # et_unix = et_unix - 1
- st_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(st_unix)) + '+08:00'
- et_dt = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(et_unix)) + '+08:00'
- print(st_dt, et_dt)
- mysql_insert_daily_vx(get_daily_vx())
- mysql_insert_daily_qq(get_daily_qq())
- start_order_time = '2020-10-10 17:10:00'
- start_cost_time = '2020-10-10 16:35:00'
- if __name__ == '__main__':
- scheduler = BlockingScheduler()
- # scheduler.add_job(start_order_job, 'interval', max_instances=10, hours=1, start_date=start_order_time)
- scheduler.add_job(start_cost_job, 'interval', max_instances=10, hours=1, start_date=start_cost_time)
- scheduler.start()
|