微信小程序数据分析接口 Python

本文介绍了微信小程序数据分析接口的功能,包括用户访问数据、趋势分析、页面访问分布等,并提供了Python实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发者通过数据分析接口,可获取到小程序的各项数据指标,便于进行数据存储和整理。数据分析详细功能介绍及指标解释参见数据分析文档。近日完成数据接口的编写。并完成数据入库。

环境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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值