Esempio n. 1
0
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")
Esempio n. 2
0
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")
Esempio n. 3
0
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)
Esempio n. 4
0
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)