def page_view_des3(request): """ 流量统计接口(3DES加密版) {"url" : "xxx", "urlref" : "yyy", "send_image" : 1, "uid" : "zzz", "name" : "web-title-or-name", "ent" : 101} --->>> -DtqOw-P9VbHWhAFPtKeKSx1weZ0F11tZ-M0tKBoAC0lHraI0MsdFshsFilPptdqtkrJBZXUWmWS-p4Ullg356k3qPiyGgmj0S06pKEK6g8TjIiiPrxpslgKUIlbwrNRUkb83Ay6C94= --->>> http://xxx.xxx.xxx.xxx/pv/v1/pv?data=-DtqOw-P9VbHWhAFPtKeKSx1weZ0F11tZ-M0tKBoAC0lHraI0MsdFshsFilPptdqtkrJBZXUWmWS-p4Ullg356k3qPiyGgmj0S06pKEK6g8TjIiiPrxpslgKUIlbwrNRUkb83Ay6C94= uid: 用户账号 visitid: 用户该次访问的唯一标识 url: 被访问的地址 name: 被访问的页面的名称或标题 urlref: 从哪个地址访问的此页面 nameref: 从页面访问的此页面 send_image: 1 - 返回图片数据 ent: 访问事件编号 """ d = request.GET["data"] data = Utils.des3_decrypt_base64(des3_key, d) GET = json.loads(data.decode()).get send_image = GET("send_image", 0) == 1 visitid = GET("visitid", 0) if visitid == 0: logger.error(f"page_view_des3(), visitid is zero - {d}") if send_image: return HttpResponse(gif11, content_type="image/gif") else: # 如果直接返回空字符串——"",在某些浏览器上(如360浏览器)会对同一地址执行2次请求 return HttpResponse("1", content_type="text/html") url = GET("url") urlRef = GET("urlref") userid = GET("uid") action_name = GET("name") ent = GET("ent", 0) nameRef = GET("nameref") assert userid, "userid can't be '%s'" % userid assert url, "url can't be '%s'" % url # 不传递poh参数,以方便在后台中发现问题 api.add_pv( request, remote_ip=request.META.get("REMOTE_ADDR"), userid=userid, visitid=visitid, event=ent, url=url, urlName=action_name, urlRef=urlRef, refName=nameRef, ) if send_image: return HttpResponse(gif11, content_type="image/gif") else: # 如果直接返回空字符串——"",在某些浏览器上(如360浏览器)会对同一地址执行2次请求 return HttpResponse("1", content_type="text/html")
def user_info(request): """ 用户信息收集 http://xxx.xxx.xxx.xxx/pv/v1/pv2 ValueError: Invalid data length, data must be a multiple of 8 bytes 注:如果发生类似于上述的错误,请检查传入的base64字符串中是否存在“\n”。 uid: 用户唯一标识 product: 应用产品包名 version: 应用产品版本 systemInfo: 系统信息 deviceInfo: 硬件(设备)信息 ua: 系统浏览器user agent install: 系统安装的应用列表 """ if request.method != "POST": return HttpResponse("0", content_type="text/html") d = request.POST["data"] data = Utils.des3_decrypt_base64(des3_key, d) data = json.loads(data.decode()) m = UserInfo.objects.create( userid=data["uid"], product=data.get("product", ""), version=data.get("version", ""), sys_info=data.get("systemInfo"), sys_apps=data.get("install"), device_info=data.get("deviceInfo"), ie_info=data.get("ua"), ) return HttpResponse("1", content_type="text/html")
def pv_start_des3(request): """ http://xxx.xxx.xxx.xxx/pv/v1/pvstart uid: 用户账号 ent: 访问事件编号 product: 应用产品包名 version: 应用产品版本 systemInfo: 系统信息 deviceInfo: 硬件(设备)信息 ua: 系统浏览器user agent install: 系统安装的应用列表 {"uid" : "phw001", "ent" : 0, "product" : "com.uboxtech.phw", "version" : "0.1.2"} 8yB4FtPophMRGveNNAw7aNoet4OXyTJuDtQQT4aNQMnOC0j9DWT-e59ZKr1A086N-JXYul-JH8_-90L99kM4baAMPVAKyZBhDGJQ0rH-V-w= """ if request.method != "POST": return JsonResponse({ "return_code": RETURN_CODE.FAIL, "return_msg": "", "datas": {}, }) d = request.POST["data"] data = Utils.des3_decrypt_base64(des3_key, d) data = json.loads(data.decode()) data["poh"] = POH_TYPE.OTT return pv_start_json(request, data)
def video_play_record_des3(request): """ 视频播放日志(for ott client)3DES加密版 {"uid" : "zzz", "vid" : 12345, "bt" : 1513316552, "et" : 1513316570, "f" : 1} ---> http://127.0.0.1/pv/vdo?data=8yB4FtPophP917CuWjyKJsCbJ5uY1sP63u49itHGfY//yo8AfScWOqsvTJPJyKzgrrr7eFq3uiG4hDxucsHquRIhFSY06aFgonB7HpV9Avc= ValueError: Invalid data length, data must be a multiple of 8 bytes 注:如果发生类似于上述的错误,请检查传入的base64字符串中是否存在“\n”。 uid: 用户账号 ubid: Platform.Production.ubid(原则上,让外部传递产品编号是不正确的行为) vid: Video.id,视频编号,用16进制表示。例如:视频编号为“123456”,则此参数值应该为“1e240” bt: 时间戳;播放开始时间 et: 时间戳;播放结束时间 s: Video.score,视频质量评级得分(原则上,让外部评价视频得分是不正确的行为) send_image: 1 - 返回图片数据 f: 视频是否从头到尾完整播放完毕(1 = 是;0 = 否(默认)) """ data = Utils.des3_decrypt_base64(des3_key, request.GET["data"]) data = json.loads(data.decode()) return _video_play_record(request, data)