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)
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)
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)
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)