Exemple #1
0
    def handleVid(self, uid, vid):

        uid_stat_t = self.mongoconn["video"]["%s_stat" % (uid)]
        vid_play_t = self.mongoconn["video"]["%s_play" % (vid)]
        uid_vdaily_t = self.mongoconn["video"]["%s_vdaily" % (uid)]
        """设置用户地域的载入次数"""
        """初始化vidinfo类"""
        vidinfObj = VidInfo(self.mysql_conn, self.mongoconn, vid)
        """得到该视频本天统计数据"""
        viddailydata = uid_vdaily_t.find_one({"_id": self.date}, {
            "_id": 0,
            vid: 1
        })

        Load = viddailydata[vid]["Load"]
        Play = viddailydata[vid]["Play"]
        IP = viddailydata[vid]["IP"]
        Engage = viddailydata[vid]["Engage"]
        Geo = viddailydata[vid]["Geo"]
        Click = viddailydata[vid]["Click"]
        Traffic = viddailydata[vid]["Traffic"]
        """计算地域分布数据中完成率"""
        for region in Geo:
            Geo[region]["Engage"] = operator.itruediv(
                float(Geo[region]["EngageSum"]), int(Geo[region]["ClickNum"]))
        """得到该视频实时播放最后100个记录"""
        plays_list = []
        plays_sum = vid_play_t.count()
        MaxSum = 100
        if plays_sum > MaxSum:
            plays_cursor = vid_play_t.find(
                {"_id": {
                    "$gt": (plays_sum - MaxSum)
                }})
        else:
            plays_cursor = vid_play_t.find().limit(MaxSum)

        for play in plays_cursor:
            vid_playtime = play["PlayTime"]
            self.redata.zadd("%s_SD7" % (vid), ujson.encode(play),
                             vid_playtime)
        """得到该视频截至目前统计信息"""
        vidnowstat = vidinfObj.get_vid_info(vid)
        #vidnowstat = uid_stat_t.find_one({"_id":vid},{"_id":0,"EngageSum":0})
        vidnowstat.pop("HeatMapSum")

        nowGeo = vidnowstat["Geo"]
        nowHtmap = json.loads(vidnowstat["Htmap"])
        nowTraffic = vidnowstat["Traffic"]
        nowPlay = vidnowstat["Play"]
        nowClick = vidnowstat["Click"]
        nowPtmap = vidnowstat["Ptmap"]
        data = (nowPlay, nowClick, nowTraffic, vid)

        Htmp_min = min([k for i, j, k in nowHtmap])
        nowHtmap = [[i, j, k / Htmp_min] for i, j, k in nowHtmap]
        """时间序列已存储多少天数据"""
        #days = redata.llen("%s_date"%(vid)) + 1
        """写数据到redis"""
        redpipe = self.redata.pipeline()
        redpipe.rpush("%s_date" % (vid), self.date)
        redpipe.rpush("%s_SD1" % (vid), Load)
        redpipe.rpush("%s_SD2" % (vid), Play)
        redpipe.rpush("%s_SD3" % (vid), IP)
        redpipe.rpush("%s_SD4" % (vid), Engage)
        redpipe.rpush("%s_SD5" % (vid), Click)
        redpipe.rpush("%s_SD6" % (vid), Traffic)
        redpipe.rpush("%s_SDD" % (vid), ujson.encode(Geo))

        redpipe.set("%s_PH" % (vid), ujson.encode(nowPtmap))
        redpipe.set("%s_SH" % (vid), ujson.encode(vidnowstat))
        redpipe.set("%s_SHH" % (vid), ujson.encode(nowGeo))
        redpipe.set("%s_JH" % (vid), ujson.encode(nowHtmap))
        """
        if days > self.daynums:
            redpipe.lpop("%s_date"%(vid))
            redpipe.lpop("%s_SD1"%(vid))
            redpipe.lpop("%s_SD2"%(vid))
            redpipe.lpop("%s_SD3"%(vid))
            redpipe.lpop("%s_SD4"%(vid))
            redpipe.lpop("%s_SD5"%(vid))
            redpipe.lpop("%s_SD6"%(vid))
            redpipe.lpop("%s_SDD"%(vid))
        """

        redpipe.execute()

        sql = '''
            update  vinfo set playcount=%s,click_rate=%s,traffic=%s where vid = %s
        '''

        self.cursor.execute(sql, data)
        self.mysql_conn.commit()

        vidinfObj.update_vsum(vid, vidnowstat)
        vidinfObj.update_vgeo(vid, vidnowstat)
        vidinfObj.update_vhmap(vid, vidnowstat)
Exemple #2
0
    def handleVid(self, uid, vid):

        uid_stat_t = self.mongoconn[self.mongodbName]["%s_stat" % (uid)]
        vid_play_t = self.mongoconn[self.mongodbName]["%s_play" % (vid)]
        uid_vdaily_t = self.mongoconn[self.mongodbName]["%s_vdaily" % (uid)]
        """设置用户地域的载入次数"""
        """初始化vidinfo类"""
        vidinfObj = VidInfo(self.mysql_conn, self.mongoconn, vid)
        """得到该视频本天统计数据"""
        viddailydata = uid_vdaily_t.find_one({"_id": self.date}, {
            "_id": 0,
            vid: 1
        })

        Load = viddailydata[vid]["Load"]
        Play = viddailydata[vid]["Play"]
        IP = viddailydata[vid]["IP"]
        Engage = viddailydata[vid]["Engage"]
        Geo = viddailydata[vid]["Geo"]
        Click = viddailydata[vid]["Click"]
        Traffic = viddailydata[vid]["Traffic"]
        """计算地域分布数据中完成率"""
        for region in Geo:
            Geo[region]["Engage"] = operator.itruediv(
                float(Geo[region]["EngageSum"]), int(Geo[region]["ClickNum"]))
        """得到该视频实时播放最后100个记录"""
        plays_list = []
        plays_sum = vid_play_t.count()
        MaxSum = 100
        if plays_sum > MaxSum:
            plays_cursor = vid_play_t.find(
                {"_id": {
                    "$gt": (plays_sum - MaxSum)
                }})
        else:
            plays_cursor = vid_play_t.find().limit(MaxSum)

        for play in plays_cursor:
            vid_playtime = play["PlayTime"]
            self.redata.zadd("%s_SD7" % (vid), ujson.encode(play),
                             vid_playtime)
        """得到该视频截至目前统计信息"""
        vidnowstat = vidinfObj.get_vid_info(vid)
        vidnowstat.pop("HeatMapSum")

        nowGeo = vidnowstat["Geo"]
        nowHtmap = json.loads(vidnowstat["Htmap"])
        nowTraffic = vidnowstat["Traffic"]
        nowPlay = vidnowstat["Play"]
        nowClick = vidnowstat["Click"]
        nowPtmap = vidnowstat["Ptmap"]
        data = (nowPlay, nowClick, nowTraffic, vid)

        Htmp_min = min([k for i, j, k in nowHtmap])
        nowHtmap = [[i, j, k / Htmp_min] for i, j, k in nowHtmap]
        """时间序列已存储多少天数据"""
        #days = redata.llen("%s_date"%(vid)) + 1
        """写数据到redis"""
        redpipe = self.redata.pipeline()
        redpipe.rpush("%s_date" % (vid), self.date)
        redpipe.rpush("%s_SD1" % (vid), Load)
        redpipe.rpush("%s_SD2" % (vid), Play)
        redpipe.rpush("%s_SD3" % (vid), IP)
        redpipe.rpush("%s_SD4" % (vid), Engage)
        redpipe.rpush("%s_SD5" % (vid), Click)
        redpipe.rpush("%s_SD6" % (vid), Traffic)
        redpipe.rpush("%s_SDD" % (vid), ujson.encode(Geo))

        redpipe.set("%s_PH" % (vid), ujson.encode(nowPtmap))
        redpipe.set("%s_SH" % (vid), ujson.encode(vidnowstat))
        redpipe.set("%s_SHH" % (vid), ujson.encode(nowGeo))
        redpipe.set("%s_JH" % (vid), ujson.encode(nowHtmap))
        """
        if days > self.daynums:
            redpipe.lpop("%s_date"%(vid))
            redpipe.lpop("%s_SD1"%(vid))
            redpipe.lpop("%s_SD2"%(vid))
            redpipe.lpop("%s_SD3"%(vid))
            redpipe.lpop("%s_SD4"%(vid))
            redpipe.lpop("%s_SD5"%(vid))
            redpipe.lpop("%s_SD6"%(vid))
            redpipe.lpop("%s_SDD"%(vid))
        """

        redpipe.execute()

        sql = '''
            update video set playcount=%s,clickrate=%s,traffic=%s where vid = %s
        '''

        self.cursor.execute(sql, data)
        self.mysql_conn.commit()

        vidinfObj.update_vsum(vid, vidnowstat)
        vidinfObj.update_vgeo(vid, vidnowstat)
        vidinfObj.update_vhmap(vid, vidnowstat)

        # --/
        #     FUNCTION MODULE : COLLECT USER BASE INFORMATION
        #     VIEW THE VIDEO OF THE CUSTOMER INFORMATION WRITTEN TO MYSQL
        #     ADD IN 20131210
        # --/
        play_zzuinfo_cursor = vid_play_t.find(
            {
                "Date": self.date,
                "zz_uinfo": {
                    "$exists": True
                }
            }, {
                "PlayTime": 1,
                "Engage": 1,
                "PIP": 1,
                "zz_uinfo": 1
            })

        if play_zzuinfo_cursor.count() != 0:
            i = 0
            batchnum = 10
            values = []
            videoname = vidinfObj.get_video_name(vid)
            for play in play_zzuinfo_cursor:
                if i < batchnum:
                    i = i + 1
                    location = vidinfObj.get_video_play_location_from_api(
                        play["PIP"])
                    playtime = time.strftime(
                        "%Y-%m-%d %H:%M:%S",
                        time.localtime(int(play["PlayTime"])))
                    comprate = "%s" % int(float(play["Engage"]) * 100) + "%"
                    playuinfo = eval(eval(play["zz_uinfo"]))
                    tlist = [
                        uid, vid, videoname, self.date, playtime, location,
                        comprate, playuinfo["name"].decode("unicode_escape"),
                        playuinfo["tel"], playuinfo["email"], playuinfo["qq"]
                    ]
                    values.append(tlist)
                    if i == batchnum:
                        vidinfObj.insert_vid_zzuinfo(values)
                        i = 0
                        values = []
            if i > 0:
                vidinfObj.insert_vid_zzuinfo(values)
Exemple #3
0
    def handleVid(self,uid,vid): 
        
        uid_stat_t =  self.mongoconn["video"]["%s_stat"%(uid)]
        vid_play_t =  self.mongoconn["video"]["%s_play"%(vid)]
        uid_vdaily_t = self.mongoconn["video"]["%s_vdaily"%(uid)]
        
        """设置用户地域的载入次数"""
        
        """初始化vidinfo类"""
        vidinfObj = VidInfo(self.mysql_conn,self.mongoconn,vid)
        
        """得到该视频本天统计数据"""
        viddailydata =  uid_vdaily_t.find_one({"_id":self.date},{"_id":0,vid:1})
        
        Load = viddailydata[vid]["Load"]
        Play = viddailydata[vid]["Play"]
        IP = viddailydata[vid]["IP"]
        Engage = viddailydata[vid]["Engage"]
        Geo = viddailydata[vid]["Geo"]
        Click = viddailydata[vid]["Click"]
        Traffic = viddailydata[vid]["Traffic"]
        
        """计算地域分布数据中完成率"""
        for region in Geo:
            Geo[region]["Engage"] = operator.itruediv(float(Geo[region]["EngageSum"]), int(Geo[region]["ClickNum"]))
            
        """得到该视频实时播放最后100个记录"""
        plays_list = []
        plays_sum = vid_play_t.count()
        MaxSum = 100
        if plays_sum > MaxSum:
            plays_cursor = vid_play_t.find({"_id":{"$gt":(plays_sum-MaxSum)}})
        else:
            plays_cursor = vid_play_t.find().limit(MaxSum)

        for play in plays_cursor:
            vid_playtime = play["PlayTime"]
            self.redata.zadd("%s_SD7"%(vid),ujson.encode(play),vid_playtime)
    
        """得到该视频截至目前统计信息"""
        vidnowstat = vidinfObj.get_vid_info(vid)
        #vidnowstat = uid_stat_t.find_one({"_id":vid},{"_id":0,"EngageSum":0})
        vidnowstat.pop("HeatMapSum")
        
        nowGeo = vidnowstat["Geo"]
        nowHtmap = json.loads(vidnowstat["Htmap"])
        nowTraffic = vidnowstat["Traffic"]
        nowPlay = vidnowstat["Play"]
        nowClick = vidnowstat["Click"]
        nowPtmap = vidnowstat["Ptmap"]
        data = (nowPlay,nowClick,nowTraffic,vid)
        
        Htmp_min = min([k for i,j,k in nowHtmap])
        nowHtmap = [[i,j,k/Htmp_min] for i,j,k in nowHtmap ]

        """时间序列已存储多少天数据"""
        #days = redata.llen("%s_date"%(vid)) + 1
        
        """写数据到redis"""
        redpipe = self.redata.pipeline()
        redpipe.rpush("%s_date"%(vid), self.date)
        redpipe.rpush("%s_SD1"%(vid),Load)
        redpipe.rpush("%s_SD2"%(vid),Play)
        redpipe.rpush("%s_SD3"%(vid),IP)
        redpipe.rpush("%s_SD4"%(vid),Engage)
        redpipe.rpush("%s_SD5"%(vid),Click)
        redpipe.rpush("%s_SD6"%(vid),Traffic)
        redpipe.rpush("%s_SDD"%(vid),ujson.encode(Geo))
                
        redpipe.set("%s_PH"%(vid),ujson.encode(nowPtmap))
        redpipe.set("%s_SH"%(vid),ujson.encode(vidnowstat))
        redpipe.set("%s_SHH"%(vid),ujson.encode(nowGeo))
        redpipe.set("%s_JH"%(vid),ujson.encode(nowHtmap))
        
        """
        if days > self.daynums:
            redpipe.lpop("%s_date"%(vid))
            redpipe.lpop("%s_SD1"%(vid))
            redpipe.lpop("%s_SD2"%(vid))
            redpipe.lpop("%s_SD3"%(vid))
            redpipe.lpop("%s_SD4"%(vid))
            redpipe.lpop("%s_SD5"%(vid))
            redpipe.lpop("%s_SD6"%(vid))
            redpipe.lpop("%s_SDD"%(vid))
        """  
            
        redpipe.execute()
        
        
        sql = '''
            update  vinfo set playcount=%s,click_rate=%s,traffic=%s where vid = %s
        '''
                  
        self.cursor.execute(sql,data)              
        self.mysql_conn.commit()
        
        vidinfObj.update_vsum(vid,vidnowstat)
        vidinfObj.update_vgeo(vid,vidnowstat)
        vidinfObj.update_vhmap(vid,vidnowstat)
Exemple #4
0
    def handleVid(self,uid,vid): 
        
        uid_stat_t =  self.mongoconn[self.mongodbName]["%s_stat"%(uid)]
        vid_play_t =  self.mongoconn[self.mongodbName]["%s_play"%(vid)]
        uid_vdaily_t = self.mongoconn[self.mongodbName]["%s_vdaily"%(uid)]
        
        """设置用户地域的载入次数"""
        
        """初始化vidinfo类"""
        vidinfObj = VidInfo(self.mysql_conn,self.mongoconn,vid)
        
        """得到该视频本天统计数据"""
        viddailydata =  uid_vdaily_t.find_one({"_id":self.date},{"_id":0,vid:1})
        
        Load = viddailydata[vid]["Load"]
        Play = viddailydata[vid]["Play"]
        IP = viddailydata[vid]["IP"]
        Engage = viddailydata[vid]["Engage"]
        Geo = viddailydata[vid]["Geo"]
        Click = viddailydata[vid]["Click"]
        Traffic = viddailydata[vid]["Traffic"]
        
        """计算地域分布数据中完成率"""
        for region in Geo:
            Geo[region]["Engage"] = operator.itruediv(float(Geo[region]["EngageSum"]), int(Geo[region]["ClickNum"]))
            
        """得到该视频实时播放最后100个记录"""
        plays_list = []
        plays_sum = vid_play_t.count()
        MaxSum = 100
        if plays_sum > MaxSum:
            plays_cursor = vid_play_t.find({"_id":{"$gt":(plays_sum-MaxSum)}})
        else:
            plays_cursor = vid_play_t.find().limit(MaxSum)

        for play in plays_cursor:
            vid_playtime = play["PlayTime"]
            self.redata.zadd("%s_SD7"%(vid),ujson.encode(play),vid_playtime)
    
        """得到该视频截至目前统计信息"""
        vidnowstat = vidinfObj.get_vid_info(vid)
        vidnowstat.pop("HeatMapSum")
        
        nowGeo = vidnowstat["Geo"]
        nowHtmap = json.loads(vidnowstat["Htmap"])
        nowTraffic = vidnowstat["Traffic"]
        nowPlay = vidnowstat["Play"]
        nowClick = vidnowstat["Click"]
        nowPtmap = vidnowstat["Ptmap"]
        data = (nowPlay,nowClick,nowTraffic,vid)
        
        Htmp_min = min([k for i,j,k in nowHtmap])
        nowHtmap = [[i,j,k/Htmp_min] for i,j,k in nowHtmap ]

        """时间序列已存储多少天数据"""
        #days = redata.llen("%s_date"%(vid)) + 1
        
        """写数据到redis"""
        redpipe = self.redata.pipeline()
        redpipe.rpush("%s_date"%(vid), self.date)
        redpipe.rpush("%s_SD1"%(vid),Load)
        redpipe.rpush("%s_SD2"%(vid),Play)
        redpipe.rpush("%s_SD3"%(vid),IP)
        redpipe.rpush("%s_SD4"%(vid),Engage)
        redpipe.rpush("%s_SD5"%(vid),Click)
        redpipe.rpush("%s_SD6"%(vid),Traffic)
        redpipe.rpush("%s_SDD"%(vid),ujson.encode(Geo))
                
        redpipe.set("%s_PH"%(vid),ujson.encode(nowPtmap))
        redpipe.set("%s_SH"%(vid),ujson.encode(vidnowstat))
        redpipe.set("%s_SHH"%(vid),ujson.encode(nowGeo))
        redpipe.set("%s_JH"%(vid),ujson.encode(nowHtmap))
        
        """
        if days > self.daynums:
            redpipe.lpop("%s_date"%(vid))
            redpipe.lpop("%s_SD1"%(vid))
            redpipe.lpop("%s_SD2"%(vid))
            redpipe.lpop("%s_SD3"%(vid))
            redpipe.lpop("%s_SD4"%(vid))
            redpipe.lpop("%s_SD5"%(vid))
            redpipe.lpop("%s_SD6"%(vid))
            redpipe.lpop("%s_SDD"%(vid))
        """  
            
        redpipe.execute()
        
        
        sql = '''
            update video set playcount=%s,clickrate=%s,traffic=%s where vid = %s
        '''
                  
        self.cursor.execute(sql,data)              
        self.mysql_conn.commit()
        
        vidinfObj.update_vsum(vid,vidnowstat)
        vidinfObj.update_vgeo(vid,vidnowstat)
        vidinfObj.update_vhmap(vid,vidnowstat)
        
        # --/
        #     FUNCTION MODULE : COLLECT USER BASE INFORMATION
        #     VIEW THE VIDEO OF THE CUSTOMER INFORMATION WRITTEN TO MYSQL
        #     ADD IN 20131210
        # --/
        play_zzuinfo_cursor = vid_play_t.find({"Date":self.date,"zz_uinfo":{"$exists":True}},{"PlayTime":1,"Engage":1,"PIP":1,"zz_uinfo":1})
        
        if play_zzuinfo_cursor.count() != 0:      
            i=0
            batchnum=10
            values=[]
            videoname = vidinfObj.get_video_name(vid)
            for play in play_zzuinfo_cursor:
                if i < batchnum:
                    i = i + 1
                    location = vidinfObj.get_video_play_location_from_api(play["PIP"])
                    playtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(int(play["PlayTime"])))
                    comprate = "%s"%int(float(play["Engage"])*100)+"%"
                    playuinfo = eval(eval(play["zz_uinfo"]))
                    tlist = [uid,vid,videoname,self.date,playtime,location,comprate,playuinfo["name"].decode("unicode_escape"),playuinfo["tel"],playuinfo["email"],playuinfo["qq"]]
                    values.append(tlist)
                    if i == batchnum:
                        vidinfObj.insert_vid_zzuinfo(values)
                        i=0 
                        values=[]
            if i > 0:
                vidinfObj.insert_vid_zzuinfo(values)