|
@@ -0,0 +1,201 @@
|
|
|
|
+import time
|
|
|
|
+from model import ComUtils
|
|
|
|
+import requests
|
|
|
|
+import json
|
|
|
|
+from model.DataBaseUtils import MysqlUtils
|
|
|
|
+from model.DateUtils import DateUtils
|
|
|
|
+from model.ComUtils import *
|
|
|
|
+import math
|
|
|
|
+from model.DateUtils import DateUtils
|
|
|
|
+db=MysqlUtils()
|
|
|
|
+du=DateUtils()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_yg_vip_channel(stage, vip_id, client_id, token):
|
|
|
|
+ url = "https://data.yifengaf.cn:443/channeldata/data/account/list"
|
|
|
|
+ nonce = ComUtils.get_random_str()
|
|
|
|
+ timestamp = int(time.time())
|
|
|
|
+ signaure = ComUtils.sha1(str(token) + str(timestamp) + str(client_id) + str(nonce))
|
|
|
|
+ params = {
|
|
|
|
+ "client_id": client_id,
|
|
|
|
+ "token": token,
|
|
|
|
+ "nonce": nonce,
|
|
|
|
+ "timestamp": timestamp,
|
|
|
|
+ "signaure": signaure,
|
|
|
|
+ "vip_id": vip_id,
|
|
|
|
+ }
|
|
|
|
+ headers = {"Content-Type": "application/json"}
|
|
|
|
+ r = requests.post(url=url, data=json.dumps(params), headers=headers)
|
|
|
|
+ print(r.text)
|
|
|
|
+ task_id = json.loads(r.text).get("data").get("task_id")
|
|
|
|
+ db.quchen_text.execute(
|
|
|
|
+ f"replace into yangguang_path(vip_id,task_id,stage,type) values ('{vip_id}','{task_id}','{stage}','channel')")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_yg_data(stage,vip_id,client_id,token,start,end):
|
|
|
|
+ url = "https://data.yifengaf.cn:443/channeldata/data/orders/list"
|
|
|
|
+ nonce=ComUtils.get_random_str()
|
|
|
|
+ timestamp=int(time.time())
|
|
|
|
+ signaure =ComUtils.sha1(str(token) + str(timestamp) + str(client_id) + str(nonce))
|
|
|
|
+ params = {
|
|
|
|
+ "client_id": client_id,
|
|
|
|
+ "token": token,
|
|
|
|
+ "nonce": nonce,
|
|
|
|
+ "timestamp": timestamp,
|
|
|
|
+ "signaure": signaure,
|
|
|
|
+ "vip_id": vip_id,
|
|
|
|
+ "start_time":start, # %Y-%m-%d %H:%i:%s:
|
|
|
|
+ "end_time":end
|
|
|
|
+ }
|
|
|
|
+ headers={"Content-Type":"application/json"}
|
|
|
|
+ r=requests.post(url=url,data=json.dumps(params),headers=headers)
|
|
|
|
+ print(r.text)
|
|
|
|
+ task_id = json.loads(r.text).get("data").get("task_id")
|
|
|
|
+ db.quchen_text.execute(f"replace into yangguang_path(vip_id,task_id,stage,type) values ('{vip_id}','{task_id}','{stage}','order')")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def parse_yg_data(vip_id):
|
|
|
|
+ url = db.quchen_text.getOne(f"select path from yangguang_path where type='channel' and vip_id={vip_id} ")
|
|
|
|
+ r = requests.get(url).text
|
|
|
|
+ channel_di={}
|
|
|
|
+ a = r.split('}')
|
|
|
|
+ for i in a[:-1]:
|
|
|
|
+ if i[-1] != '}':
|
|
|
|
+ b=json.loads(i + "}", strict=False)
|
|
|
|
+
|
|
|
|
+ else:
|
|
|
|
+ b=json.loads(i, strict=False)
|
|
|
|
+ channel_di[b["channel_id"]]=b["wx_nickname"]
|
|
|
|
+ print(channel_di)
|
|
|
|
+
|
|
|
|
+ info=db.quchen_text.getData(f"select stage,path from yangguang_path where type='order' and vip_id={vip_id}")
|
|
|
|
+ stage=info[0][0]
|
|
|
|
+ path=info[0][1]
|
|
|
|
+ text=requests.get(path).text.replace('"referral_url":,','')
|
|
|
|
+
|
|
|
|
+ insert_data=[]
|
|
|
|
+ for j in text.split("}")[:-1]:
|
|
|
|
+ if j[-1] != '}':
|
|
|
|
+ j=j+'}'
|
|
|
|
+ try:
|
|
|
|
+ di=json.loads(j, strict=False)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(j)
|
|
|
|
+ print(e)
|
|
|
|
+
|
|
|
|
+ if di["state"] == "未完成":
|
|
|
|
+ continue
|
|
|
|
+ platform = "阳光"
|
|
|
|
+ channel_id = di["channel_id"]
|
|
|
|
+ channel=channel_di[channel_id]
|
|
|
|
+
|
|
|
|
+ user_id = di["openid"]
|
|
|
|
+ order_time = di["create_time"]
|
|
|
|
+ reg_time = di["user_createtime"]
|
|
|
|
+ from_novel = di["book_name"]
|
|
|
|
+ amount = di["money"]
|
|
|
|
+ order_id = di["transaction_id"]
|
|
|
|
+ date = DateUtils.str_to_stamp(order_time[:10])
|
|
|
|
+ insert_data.append((date,stage,platform,channel,channel_id,user_id,order_time,reg_time,amount,from_novel,order_id))
|
|
|
|
+ # print(insert_data)
|
|
|
|
+ db.quchen_text.executeMany("replace into `order`(date,stage,platform,channel,channel_id,"
|
|
|
|
+ "user_id,order_time,reg_time,amount,from_novel,order_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",tuple(insert_data))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_hs_channel(account):
|
|
|
|
+ url = 'https://vip.rlcps.cn/api/getMerchants'
|
|
|
|
+ apiKey = str(account[0])
|
|
|
|
+ apiSecurity = account[1]
|
|
|
|
+ timestamp = str(int(time.time()))
|
|
|
|
+ sign = md5(apiKey + timestamp + apiSecurity).upper()
|
|
|
|
+ params = {
|
|
|
|
+ 'apiKey': apiKey,
|
|
|
|
+ 'apiSecurity': apiSecurity,
|
|
|
|
+ 'timestamp': timestamp,
|
|
|
|
+ 'sign': sign
|
|
|
|
+ }
|
|
|
|
+ response_result_json = requests.post(url, params).json()
|
|
|
|
+ if 'data' not in response_result_json.keys():
|
|
|
|
+ print('花生账号【{apiKey}】本次请求数据异常,响应报文【{result}】'.format(apiKey=apiKey, result=response_result_json))
|
|
|
|
+ return
|
|
|
|
+ return response_result_json['data']
|
|
|
|
+
|
|
|
|
+def get_huasheng_order_task(start,end, account, merchant,li):
|
|
|
|
+
|
|
|
|
+ apiKey = str(account[0])
|
|
|
|
+ apiSecurity = account[1]
|
|
|
|
+ stage = account[2]
|
|
|
|
+ timestamp = str(int(time.time()))
|
|
|
|
+
|
|
|
|
+ order_url = 'https://vip.rlcps.cn/api/orderList'
|
|
|
|
+ merchant_id = merchant['merchant_id']
|
|
|
|
+ merchant_name = merchant['merchant_name']
|
|
|
|
+ limit = 500
|
|
|
|
+
|
|
|
|
+ for date in du.getDateLists(start,end):
|
|
|
|
+
|
|
|
|
+ page = 1
|
|
|
|
+ while True:
|
|
|
|
+ sign = md5(apiKey + date + str(merchant_id) + timestamp + apiSecurity).upper()
|
|
|
|
+ order_params = {
|
|
|
|
+ 'apiKey': apiKey,
|
|
|
|
+ 'apiSecurity': apiSecurity,
|
|
|
|
+ 'timestamp': timestamp,
|
|
|
|
+ 'date': date,
|
|
|
|
+ 'merchant_id': merchant_id,
|
|
|
|
+ 'sign': sign,
|
|
|
|
+ 'page': page,
|
|
|
|
+ 'limit': limit
|
|
|
|
+ }
|
|
|
|
+ r = requests.post(order_url, order_params)
|
|
|
|
+ # print(r.text)
|
|
|
|
+ response_result_json = r.json()
|
|
|
|
+
|
|
|
|
+ if 'data' not in response_result_json.keys():
|
|
|
|
+ print('花生账号【{key}】, 查询时间【{date}】, 渠道【{merchant_id}:{merchant_name}】本次请求数据异常,响应报文【{result}】'
|
|
|
|
+ .format(key=apiKey, date=date, merchant_id=merchant_id, merchant_name=merchant_name,
|
|
|
|
+ result=response_result_json))
|
|
|
|
+ break
|
|
|
|
+
|
|
|
|
+ if len(response_result_json['data']) == 0:
|
|
|
|
+ break
|
|
|
|
+
|
|
|
|
+ total_count = response_result_json['count']
|
|
|
|
+ order_item_list = response_result_json['data']
|
|
|
|
+
|
|
|
|
+ for order_item in order_item_list:
|
|
|
|
+ if order_item['order_status'] == 1: # 1为已支付
|
|
|
|
+ order = {}
|
|
|
|
+ order['user_id'] = order_item['openid']
|
|
|
|
+ order['order_id'] = order_item['trans_id']
|
|
|
|
+ order['order_time'] = order_item['pay_at']
|
|
|
|
+ order['reg_time'] = order_item['join_at']
|
|
|
|
+ order['channel'] = merchant_name
|
|
|
|
+ order['channel_id'] = merchant_id
|
|
|
|
+ order['platform'] = '花生'
|
|
|
|
+ order['stage'] = stage
|
|
|
|
+ order['from_novel'] = order_item['book_name']
|
|
|
|
+ order['amount'] = order_item['amount']
|
|
|
|
+ order["date"]=int(time.mktime(time.strptime(order_item['pay_at'][:10],"%Y-%m-%d")))
|
|
|
|
+ order = sorted(order.items(), key=lambda item: item[0])
|
|
|
|
+ order = dict(order)
|
|
|
|
+ order = tuple(order.values())
|
|
|
|
+ if order.__len__()>0:
|
|
|
|
+ li.append(order)
|
|
|
|
+
|
|
|
|
+ if int(page) >= math.ceil(total_count / int(limit)):
|
|
|
|
+ break
|
|
|
|
+ page = page + 1
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def save_hs_data(data):
|
|
|
|
+ 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);'
|
|
|
|
+ db.quchen_text.executeMany(sql,data)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == '__main__':
|
|
|
|
+ print(du.str_to_stamp('2021-01-18'))
|
|
|
|
+ a = time.strftime("%Y-%m-%d", time.localtime(1610899200))
|
|
|
|
+ print(a)
|