好友
阅读权限10
听众
最后登录1970-1-1
|
uniapp统计自己所需要的数据并发送到企业微信。
进行简单的uniapp对应的账号信息即可完成统计,格式、数据内容,随意调整。
如果需要做定时发送的话自行百度Python定时运行的配置,这个比较简单。
代码以学习交流为主:handshake
如有疑问,随时交流。
全部完整代码如下:
get_data.py:需配置企业微信key,如果发送到其他平台自行接入对应机器人。
[Python] 纯文本查看 复制代码 import base64
import hashlib
import random
import time
import requests
import xlwt
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
from matplotlib.ticker import MultipleLocator
import req_uni
qywx_key = '' #企业微信机器人key
ra = random.randint(0, 63)
def tongji():
total_list = list()
a = req_uni.login()
total_list.append(a)
aps = req_uni.apps_overview()
total_list.append(aps)
ov = req_uni.overview()
total_list.append(ov)
de = req_uni.detail()
total_list.append(de)
pl = req_uni.platform_pie_d_new()
total_list.append(pl)
pd = req_uni.platform_pie_d()
total_list.append(pd)
pmn = req_uni.platform_pie_m_new()
total_list.append(pmn)
pm = req_uni.platform_pie_m()
total_list.append(pm)
pt = req_uni.platform_pie_total()
total_list.append(pt)
re = req_uni.changjingzhi()
total_list.append(re)
fx = req_uni.shijianfenxi()
total_list.append(fx)
save_excel(total_list)
def save_excel(res: [any]):
xlsx = xlwt.Workbook()
sheet = xlsx.add_sheet('uniapp')
style = xlwt.XFStyle()
al = xlwt.Alignment()
al.horz = 0x02 # 设置水平居中
al.vert = 0x01 # 设置垂直居中
al.wrap = 1 # 设置自动换行
style.alignment = al
total = 0
for m in range(len(res)):
results = res[m]
if results is None:
continue
for i in range(len(results)):
sec_res = results[i]
if isinstance(sec_res, list):
for t in range(len(sec_res)):
set_style(total, style, sheet, t, sec_res)
total += 1
else:
set_style(total, style, sheet, i, results)
total += 1
cur_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
xlsx.save('tem_file/uniapp统计' + cur_time + '.xlsx')
print('报表生成')
def set_style(total, style, sheet, t, sec_res):
# pattern = xlwt.Pattern()
# pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# pattern.pattern_fore_colour = ra
# style.pattern = pattern
# font = xlwt.Font()
# font.colour_index = 2 if ra == 63 or ra == 62 else (ra + 2)
# style.font = font
sheet.write(total, t, sec_res[t], style)
sheet.col(t).width = 256 * 20
sheet.row(total).height_mismatch = True
sheet.row(total).height = 20 * 50
def upload_excel():
cur_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
name = 'uniapp统计' + cur_time + '.xlsx'
fl = open('tem_file/'+name, 'rb')
files = {'files': (name, fl, 'application/octet-stream', {'Expires': '0'})}
request_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key='+qywx_key+'&type=file'
req = requests.post(request_url, files=files)
assert req.json()['media_id'] is not None
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='+qywx_key
send_json = {
"msgtype": "file",
"file": {
"media_id": req.json()['media_id']
}
}
tixing = {
"msgtype": "text",
"text": {
'content': '运营牛逼',
"mentioned_list": ["@all"]
}
}
requests.post(send_url, json=tixing)
requests.post(send_url, json=send_json)
def imp_chart():
new_user = req_uni.imp_data_tongji('num_new_visitor')
creat_plot(new_user, '新增用户', 'r')
new_user = req_uni.imp_data_tongji('num_visitor')
creat_plot(new_user, '活跃用户', 'cyan')
new_user = req_uni.imp_data_tongji('num_total_visitor')
creat_plot(new_user, '总用户', 'lime', True)
def creat_plot(data, name, color, last=False):
plt.figure()
x = data['xAxis']
y = data['series'][0]['data']
plt.plot(x, y, marker='o', color=color)
ax = plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(7))
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
for a, b in zip(x, y):
if (a == st_time) or (last is False):
plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=6)
myfont = FontProperties(fname='Arial Unicode.ttf',
size=15)
plt.title('30日'+name, fontproperties=myfont)
plt.savefig('tem_file/30日'+name)
a_name = 'tem_file/30日'+name+'.png'
with open(a_name, "rb") as f:
md = hashlib.md5(f.read())
res1 = md.hexdigest()
with open(a_name, "rb") as f:
base64_data = base64.b64encode(f.read())
im_json = {
"msgtype": "image",
"image": {
"base64": str(base64_data, 'utf-8'),
"md5": res1
}
}
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + qywx_key
requests.post(send_url, json=im_json)
print('30日'+name+'图表生成完成')
tongji()
upload_excel()
imp_chart()
req_uni.py:需配置uniapp平台的账号和密码
[Python] 纯文本查看 复制代码 import datetime
import time
import requests
import gb
req_url = 'https://tongji-api.dcloud.net.cn/uni/stat/api/'
req_header = {'token': ''}
def req_judge(data, mod):
print(mod, data)
assert data['ret'] == 0, mod + '失败:' + data['desc']
#uniapp账户登录。自行填入邮箱和密码
def login(email='', password=''):
login_data = requests.post(url=req_url + 'user/login', data={'email': email, 'password': password}).json()
req_judge(login_data, '登录')
gb.gb.token = login_data['token']
req_header['token'] = login_data['token']
def apps_overview():
over = requests.get(url=req_url + 'visit/apps-overview?p=0', headers=req_header).json()
req_judge(over, '首页')
yes_data = over['data']['yesterday']
tit = '昨日'
over_list = [tit + '新增用户:' + yes_data['num_new_visitor'],
tit + '活跃用户:' + yes_data['num_page_views'],
tit + '访问次数:' + yes_data['num_total_visitor'],
tit + '总用户数:' + yes_data['num_visitor']]
return over_list
def overview():
over = requests.get(url=req_url + 'visit/overview?id_app='+gb.gb.id_app+'&p=0', headers=req_header).json()
req_judge(over, '概况-今日概况')
yes_data = over['data']['yesterday']
tit = '昨日'
over_list = [tit + '新增用户:' + yes_data['num_new_visitor'],
tit + '活跃用户:' + yes_data['num_page_views'],
tit + '访问次数:' + yes_data['num_total_visitor'],
tit + '总用户数:' + yes_data['num_visitor'],
tit + '跳出率:' + yes_data['bounce_rate'],
tit + '启动次数:' + yes_data['num_visits'],
tit + '次均停留时长:' + yes_data['visit_avg_time'],
tit + '人均停留时长:' + yes_data['visitor_avg_time']]
return over_list
def detail():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'activity/detail?id_app='+gb.gb.id_app+'&p=0&ch=0&v=0&start='+st_time+'&end='+st_time+'&page=1&page_size=1', headers=req_header).json()
req_judge(over, '概况-用户活跃度')
yes_data = over['data']['item'][0]
tit = ''
over_list = [tit + '日活:' + str(yes_data['dau']),
tit + '周活:' + yes_data['wau'],
tit + '月活:' + yes_data['mau'],
tit + '日活/周活:' + yes_data['dau_wau_rate'],
tit + '日活/月活:' + yes_data['dau_mau_rate']]
return over_list
def platform_pie_d_new():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'visit/platform-pie?id_app='+gb.gb.id_app+'&start='+st_time+'&end='+st_time+'&period=1&item=num_new_visitor', headers=req_header).json()
tit = '日新增-'
req_judge(over, '概况-平台对比'+tit)
yes_data = over['data']
over_list = []
for t in yes_data:
if t['name'] == '微信小程序' or t['name'] == '支付宝小程序':
over_list.append(tit + t['name'] + ':' + str(t['value']))
return over_list
def platform_pie_d():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'visit/platform-pie?id_app='+gb.gb.id_app+'&start='+st_time+'&end='+st_time+'&period=1&item=num_visitor', headers=req_header).json()
tit = '日活-'
req_judge(over, '概况-平台对比'+tit)
yes_data = over['data']
over_list = []
for t in yes_data:
if t['name'] == '微信小程序' or t['name'] == '支付宝小程序':
over_list.append(tit+t['name']+':'+str(t['value']))
return over_list
def platform_pie_m_new():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'visit/platform-pie?id_app='+gb.gb.id_app+'&start='+st_time+'&end='+st_time+'&period=3&item=num_new_visitor', headers=req_header).json()
tit = '月新增-'
req_judge(over, '概况-平台对比'+tit)
yes_data = over['data']
over_list = []
for t in yes_data:
if t['name'] == '微信小程序' or t['name'] == '支付宝小程序':
over_list.append(tit + t['name'] + ':' + str(t['value']))
return over_list
def platform_pie_m():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'visit/platform-pie?id_app='+gb.gb.id_app+'&start='+st_time+'&end='+st_time+'&period=3&item=num_visitor', headers=req_header).json()
tit = '月活-'
req_judge(over, '概况-平台对比'+tit)
yes_data = over['data']
over_list = []
for t in yes_data:
if t['name'] == '微信小程序' or t['name'] == '支付宝小程序':
over_list.append(tit + t['name'] + ':' + str(t['value']))
return over_list
def platform_pie_total():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'visit/platform-pie?id_app='+gb.gb.id_app+'&start='+st_time+'&end='+st_time+'&period=1&item=num_total_visitor', headers=req_header).json()
tit = '总用户数-'
req_judge(over, '概况-平台对比'+tit)
yes_data = over['data']
over_list = []
for t in yes_data:
if t['name'] == '微信小程序' or t['name'] == '支付宝小程序':
over_list.append(tit + t['name'] + ':' + str(t['value']))
return over_list
def changjingzhi():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'scene/detail?id_app='+gb.gb.id_app+'&p=0&start='+st_time+'&end='+st_time+'&page=1&page_size=60', headers=req_header).json()
req_judge(over, '渠道/场景分享-场景值')
yes_data = over['data']['item']
over_list = []
for t in yes_data:
over_list.append([t['channel_name'], '新增:'+t['num_new_visitor'], '访问次数:'+t['num_page_views'], '总用户:'+t['num_total_visitor'], '活跃用户:'+t['num_visitor'], '启动次数:'+t['num_visits'], '次均停留时长:'+t['visit_avg_time'], '人均停留时长:'+t['visitor_avg_time'], '跳出率:'+t['bounce_rate']])
return over_list
def shijianfenxi():
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
over = requests.get(url=req_url + 'event/list?id_app='+gb.gb.id_app+'&p=0&ch=0&v=0&start='+st_time+'&end='+st_time+'&page=1&page_size=100', headers=req_header).json()
req_judge(over, '事件和转化-事件分析管理')
yes_data = over['data']['item']
over_list = []
for t in yes_data:
over_list.append(t['event_name']+'\n触发用户数:'+t['num_visitor']+'\n触发次数:'+t['num_visits']+'\n人均次数:'+t['visitor_avg_hits'])
return over_list
def imp_data_tongji(item):
st_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
start_time_t = datetime.datetime.today() - datetime.timedelta(30)
start_time = start_time_t.strftime("%Y-%m-%d")
over = requests.get(
url=req_url + 'visit/trend?id_app=' + gb.gb.id_app + '&p=0&start=' + start_time + '&end=' + st_time + '&compare=0&item='+item,
headers=req_header).json()
req_judge(over, '新增用户列表')
return over['data']
gb.py: 除了token外,其余三个参数可在uniapp平台获取。
[Python] 纯文本查看 复制代码 class gb:
token = ''
id_app = ''
appid = ''
name = '' |
免费评分
-
| 参与人数 2 | 吾爱币 +14 |
热心值 +2 |
收起
理由
|
苏紫方璇
| + 7 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
hrh123
| + 7 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
查看全部评分
|