开发者通过数据分析接口,可获取到小程序的各项数据指标,便于进行数据存储和整理。数据分析详细功能介绍及指标解释参见数据分析文档。近日完成数据接口的编写。并完成数据入库。
环境Python 3 ,数据库 oracle
'''
接口说明
获取用户访问小程序日留存
analysis.getDailyRetain
getweanalysisappiddailyretaininfo
https://api.weixin.qq.com/datacube/getweanalysisappiddailyretaininfo?access_token=ACCESS_TOKEN
获取用户访问小程序月留存 月度数据
analysis.getMonthlyRetain
getweanalysisappidmonthlyretaininfo
获取用户访问小程序周留存 周度数据
analysis.getWeeklyRetain
getweanalysisappidweeklyretaininfo
获取用户访问小程序数据概况
analysis.getDailySummary
getweanalysisappiddailysummarytrend
获取用户访问小程序数据日趋势
analysis.getDailyVisitTrend
getweanalysisappiddailyvisittrend
获取用户访问小程序数据月趋势(能查询到的最新数据为上一个自然月的数据)
analysis.getMonthlyVisitTrend 月度数据
getweanalysisappidmonthlyvisittrend
获取用户访问小程序数据周趋势
analysis.getWeeklyVisitTrend 周度数据
getweanalysisappidweeklyvisittrend
获取用户小程序访问分布数据
analysis.getVisitDistribution
https://api.weixin.qq.com/datacube/getweanalysisappidvisitdistribution?access_token=ACCESS_TOKEN
访问页面。目前只提供按 page_visit_pv 排序的 top200。
analysis.getVisitPage
https://api.weixin.qq.com/datacube/getweanalysisappidvisitpage?access_token=ACCESS_TOKEN
#============
获取小程序启动性能,运行性能等数据。
analysis.getPerformanceData
https://api.weixin.qq.com/wxa/business/performance/boot?access_token=ACCESS_TOKEN
# 用户画像
获取小程序新增或活跃用户的画像分布数据。时间范围支持昨天、最近7天、最近30天。其中,新增用户数为时间范围内首次访问小程序的去重用户数,活跃用户数为时间范围内访问过小程序的去重用户数。
analysis.getUserPortrait
https://api.weixin.qq.com/datacube/getweanalysisappiduserportrait?access_token=ACCESS_TOKEN
'''
接口调用:
# 内部有getToken 的公用共享接口,直接调用即可。
for apk in application_key:
token_url='http://wx-cms-xmt-push.xxxyyyzzz.com/WXmsg_miniProgram_getToken.php?vlan={0}'.format(apk)
weixin_token=json.loads(requests.get(token_url).content)['AccessToken']
users_token={'access_token':"%s" % weixin_token}
for offset_days in range(daydiffst,daydiff):
get_date=(datetime.now()-timedelta(days=offset_days)).strftime('%Y%m%d')
daily_users_date={'begin_date':'%s' %(get_date),'end_date':'%s' %(get_date)}
print('获取数据区间:',daily_users_date,apk)
for i in daily_api:
api_url='https://api.weixin.qq.com/datacube/{:s}'. format(i)
ans=requests.post(api_url,params=users_token,json=daily_users_date)
json_ans=json.loads(ans.text)
names=locals()
names['%s' % i] = json_ans
print('##',i,daily_users_date)
# print(json_ans)
if 'errcode' in json_ans:
print('errcode',json_ans)
pass
else:
out_list,out_table,out_keys,constraint=parse_data(json_ans,i,apk)
if len(out_list)>0:
# print(out_list)
importDB(conn, out_table, out_keys, out_list, constraint)
delay_time(1)
这个麻烦的就是解析数据和入库的处理。其他调用接口没有特别地方:
def parse_data(raw,table,ref_source):
'''
输入 raw table, 来源[支持多个小程序]
输出 解析后的数据,目标数据表格名称 ,去重处理,目标数据表格字段,
'''
if table=='getweanalysisappiddailyretaininfo':
out_table='FACT_WE_APPIDDAILYRETAININFO'
out_list=[]
create_time=get_current_date('%Y%m%d')
ref_date=raw['ref_date']
visit_uv_new=raw['visit_uv_new']
visit_uv=raw['visit_uv']
print('ref_date',ref_date)
for i in visit_uv_new:
v_uv_new=locals()
# print(i['key'],i['value'])
v_uv_new['visit_uv_new_'+str(i['key'])]=i['value']
# print('visit_uv_new_'+str(i['key'])+':',i['value'])
for i in visit_uv:
v_uv=locals()
# print(i['key'],i['value'])
v_uv['visit_uv_'+'%s' % i['key']]=i['value']
# print('visit_uv_'+str(i['key'])+':',i['value'])
# visit_uv=raw['visit_uv']
out_keys="ref_date,ref_source,create_time,visit_uv_new_0,visit_uv_new_1,visit_uv_new_2,visit_uv_new_3,visit_uv_new_4,visit_uv_new_5,visit_uv_new_6,visit_uv_new_7,visit_uv_new_14,visit_uv_new_30,visit_uv_0,visit_uv_1,visit_uv_2,visit_uv_3,visit_uv_4,visit_uv_5,visit_uv_6,visit_uv_7,visit_uv_14,visit_uv_30"
out_list.append([[ref_date,ref_source,create_time,v_uv_new['visit_uv_new_0'],v_uv_new['visit_uv_new_1'],v_uv_new['visit_uv_new_2'],v_uv_new['visit_uv_new_3'],v_uv_new['visit_uv_new_4'],v_uv_new['visit_uv_new_5'],v_uv_new['visit_uv_new_6'],v_uv_new['visit_uv_new_7'],v_uv_new['visit_uv_new_14'],v_uv_new['visit_uv_new_30'],v_uv['visit_uv_0'],v_uv['visit_uv_1'],v_uv['visit_uv_2'],v_uv['visit_uv_3'],v_uv['visit_uv_4'],v_uv['visit_uv_5'],v_uv['visit_uv_6'],v_uv['visit_uv_7'],v_uv['visit_uv_14'],v_uv['visit_uv_30']]])
constraint={'ref_date':1,'ref_source':2}
if table=='getweanalysisappiddailysummarytrend':
out_table='FACT_WE_APPIDDAILYSUMMARYTREND'
out_list=[]
create_time=get_current_date('%Y%m%d')
ref_date=raw['list'][0]['ref_date']
visit_total=raw['list'][0]['visit_total']
share_pv=raw['list'][0]['share_pv']
share_uv=raw['list'][0]['share_uv']
# print('ref_date',ref_date,visit_total,share_pv,share_uv,ref_source,create_time)
out_keys="ref_date,ref_source,create_time,visit_total,share_pv,share_uv"
out_list.append([[ref_date,ref_source,create_time,visit_total,share_pv,share_uv]])
constraint={'ref_date':1,'ref_source':2}
if table=='getweanalysisappiddailyvisittrend':
out_table='FACT_WE_APPIDDAILYVISITTREND'
out_list=[]
create_time=get_current_date('%Y%m%d')
ref_date=raw['list'][0]['ref_date']
session_cnt=raw['list'][0]['session_cnt']
visit_pv=raw['list'][0]['visit_pv']
visit_uv=raw['list'][0]['visit_uv']
visit_uv_new=raw['list'][0]['visit_uv_new']
stay_time_uv=raw['list'][0]['stay_time_uv']
stay_time_session=raw['list'][0]['stay_time_session']
visit_depth=raw['list'][0]['visit_depth']
out_keys="ref_date,ref_source,create_time,session_cnt,visit_pv,visit_uv,visit_uv_new,stay_time_uv,stay_time_session,visit_depth"
# print('ref_date:',ref_date,session_cnt,visit_pv,visit_uv,visit_uv_new,stay_time_uv,stay_time_session,visit_depth)
out_list.append([[ref_date,ref_source,create_time,session_cnt,visit_pv,visit_uv,visit_uv_new,stay_time_uv,stay_time_session,visit_depth]])
constraint={'ref_date':1,'ref_source':2}
if table=='getweanalysisappidvisitdistribution':
out_table='FACT_WE_APPIDVISITDISTRIBUTION'
out_list=[]
create_time=get_current_date('%Y%m%d')
ref_date=raw['ref_date']
indexlist=raw['list']
out_keys="ref_date,ref_source,create_time,indexname,indexkey,indexvalue"
for i in indexlist:
indexname=i['index']
for idx in i['item_list']:
indexkey=idx['key']
indexvalue=idx['value']
# print(ref_date,indexname,idx['key'],idx['value'])
out_list.append([[ref_date,ref_source,create_time,indexname,indexkey,indexvalue]])
# print('ref_date',ref_date)
constraint={'ref_date':1,'ref_source':2,'indexname':4,'indexkey':5}
if table=='getweanalysisappidvisitpage':
out_table='FACT_WE_APPIDVISITPAGE'
out_list=[]
create_time=get_current_date('%Y%m%d')
ref_date=raw['ref_date']
indexlist=raw['list']
out_keys="ref_date,ref_source,create_time,page_path,page_visit_pv,page_visit_uv,page_staytime_pv,entrypage_pv,exitpage_pv,page_share_pv,page_share_uv"
for i in indexlist:
# print(ref_date,i['page_path'],i['page_visit_pv'],i['page_visit_uv'],i['page_staytime_pv'],i['entrypage_pv'],i['exitpage_pv'],i['page_share_pv'],i['page_share_uv'])
page_path=i['page_path']
page_visit_pv=i['page_visit_pv']
page_visit_uv=i['page_visit_uv']
page_staytime_pv=i['page_staytime_pv']
entrypage_pv=i['entrypage_pv']
exitpage_pv=i['exitpage_pv']
page_share_pv=i['page_share_pv']
page_share_uv=i['page_share_uv']
out_list.append([[ref_date,ref_source,create_time,page_path,page_visit_pv,page_visit_uv,page_staytime_pv,entrypage_pv,exitpage_pv,page_share_pv,page_share_uv]])
# print('ref_date',ref_date)
constraint={'ref_date':1,'ref_source':2,'page_path':4}
if table=='getweanalysisappiduserportrait':
out_list=[]
create_time=get_current_date('%Y%m%d')
out_table='FACT_WE_APPIDUSERPORTRAIT'
# 表名
# 只有最近3天的数据。如果数据为空会报错
out_keys="ref_date,ref_source,create_time,portrait,indexname,v_id,v_name,v_value"
constraint={'ref_date':1,'ref_source':2,'portrait':4,'indexname':5,'v_id':6}
try:
ref_date=raw['ref_date']
Portrait_list=['visit_uv_new','visit_uv']
for p in Portrait_list:
for k in raw[p]:
for d in raw[p][k]:
indexname=k
if 'id' in d.keys():
id=d['id']
else:
id='0'
name=d['name']
value=d['value']
# print(p,indexname,id,name,value)
out_list.append([[ref_date,ref_source,create_time,p,indexname,id,name,value]])
except Exception as e:
print('error:',e)
pass
return out_list,out_table,out_keys,constraint