发明内容
有鉴于此,本发明的主要目的在于提供一种广告投放频次控制方法及装置,用于解决现有广告投放技术无法实现复杂的多子周期频次控制要求,广告投放效率低,对浏览器cookie资源占用过多的技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种广告投放频次控制方法,该方法包括:
广告服务器接收到广告请求后,获取符合投放条件的频次控制广告即N+广告;
若所述广告请求携带所述N+广告的历史浏览cookie,则将所述历史浏览cookie反序列化为历史频次控制数据对象CampCookie,并依据当前时间对CampCookie中的各频次限制条件进行预处理;
若所述广告请求未携带所述N+广告的历史浏览cookie,则为用户新建CampCookie,并依据基准频次控制数据对象CampInfo对所述CampCookie数据对象进行初始化;
广告服务器基于所述CampInfo和CampCookie判断本次广告请求是否符合所述N+广告的频次控制条件,当符合时,更新CampCookie内的观看次数,将CampCookie序列化为历史浏览cookie后反馈给用户,并向用户投放所述N+广告。
进一步地,所述CampCookie用于以结构化的方式描述用户对所述N+广告的浏览历史,其中至少包含已观看总次数showTotalTimes和一个或多个子周期记录结构,子周期记录结构至少包含:频次控制子周期字段period、子周期内已观看次数字段showTimes、子周期截止时间字段expireTime。
进一步地,所述CampInfo用于描述广告商的广告频次控制要求,广告服务器会为每一个要求作N+控制的广告建立一个唯一的CampInfo,CampInfo至少包含对象标识campID、总次数限制值numLimit、一个或多个子周期控制结构及投放截止日期endDate,子周期控制结构至少包含:子周期字段period、子周期限制值times。
进一步地,所述依据当前时间对CampCookie中的各频次限制条件进行预处理具体为:
将当前时间与CampCookie中各子周期截止时间相比较,如果当前时间已超过对应子周期截止时间,则将对应的子周期已观看次数showTimes置0并根据当前时间重新设置对应子周期的截止时间expireTime。
进一步地,所述依据CampInfo对所述CampCookie数据对象进行初始化的步骤具体为:
将showTotalTimes置0;
根据CampInfo中的子周期CampInfo.period 1~CampInfo.periodn设置CampCookie中的子周期CampCookie.period 1~CampCookie.periodn,其中n为频次控制子周期的个数;
将CampCookie.showTimes 1~CampCookie.showTimesn置为0;
以当前日期为基准,计算各子周期对应的结束时间,并将计算值赋给CampCookie.expireTime 1~CampCookie.expireTimen。
进一步地,所述基于CampInfo和CampCookie判断本次广告请求是否符合所述N+广告的频次控制条件的方法具体为:
判断所述N+广告对应的CampCookie中用户已观看总次数showTotalTimes是否大于等于所述N+广告对应的CampInfo中的numLimit,若是则拒绝向用户再次投放所述N+广告,否则依次判断每个频次控制子周期内,用户已观看次数showTimes是否大于等于CampInfo中设定的对应子周期内允许用户观看次数的上限值times,只有在所有的子周期内用户已观看次数showTimes都小于CampInfo中对应子周期内允许用户观看次数的上限值times时,才允许向用户投放所述N+广告,否则拒绝向用户再次投放所述N+广告。
本发明还提供一种广告投放频次控制装置,该装置包括:
获取模块,用于在接收到广告请求后,获取符合投放条件的频次控制广告即N+广告;
第一判断模块,用于判断所述广告请求是否携带所述N+广告的历史浏览cookie;
序列化处理模块,用于将历史浏览cookie反序列化为历史频次控制数据对象CampCookie;以及将CampCookie序列化为历史浏览cookie;
预处理模块,用于在所述广告请求携带所述N+广告的历史浏览cookie的情况下,依据当前时间对CampCookie中的各频次限制条件进行预处理;
初始化模块,用于在所述广告请求未携带所述N+广告的历史浏览cookie的情况下,为用户新建CampCookie,并依据基准频次控制数据对象CampInfo对所述CampCookie数据对象进行初始化;
第二判断模块,用于基于所述CampInfo和CampCookie判断本次广告请求是否符合所述N+广告的频次控制条件;
投放模块,用于在本次广告请求符合所述N+广告的频次控制条件时,更新所述N+广告的CampCookie,向用户反馈CampCookie序列化后所得的历史浏览cookie,并向用户投放所述N+广告。
进一步地,所述CampCookie用于以结构化的方式描述用户对所述N+广告的浏览历史,其中至少包含已观看总次数showTotalTimes和一个或多个子周期记录结构,子周期记录结构至少包含:频次控制子周期字段period、子周期内已观看次数字段showTimes、子周期截止时间字段expireTime;
所述CampInfo用于描述广告商的广告频次控制要求,广告服务器会为每一个要求作N+控制的广告建立一个唯一的CampInfo,CampInfo至少包含对象标识campID、总次数限制值numLimit、一个或多个子周期控制结构及投放截止日期endDate,子周期控制结构至少包含:子周期字段period、子周期限制值times。
进一步地,所述预处理模块包括:
截止时间判断模块,用于将当前时间与CampCookie中各子周期截止时间相比较,判断当前时间已超过对应子周期截止时间;
预处理子模块,用于在当前时间已超过对应子周期截止时间的情况下,将对应的子周期已观看次数showTimes置0并根据当前时间重新设置对应子周期的截止时间expireTime。
进一步地,所述第二判断模块包括:
总次数校验模块,用于判断所述N+广告对应的CampCookie中用户已观看总次数showTotalTimes是否大于等于所述N+广告对应的CampInfo中的numLimit,若是则拒绝向用户再次投放所述N+广告,否则指示子周期频次校验模块执行;
子周期频次校验模块,用于依次判断每个频次控制子周期内,用户已观看次数showTimes是否大于等于CampInfo中设定的对应子周期内允许用户观看次数的上限值times,在所有的子周期内用户已观看次数showTimes都小于CampInfo中对应子周期内允许用户观看次数的上限值times时,向用户投放所述N+广告,否则拒绝向用户再次投放所述N+广告。
本发明通过CampCookie数据结构和CampInfo数据结构的比较实现了对N+广告的多个子周期频次控制的要求,从而使得广告能够在整个周期内间隔均匀地投放给用户,充分满足了广告商需求和保证了广告商的利益,同时提升了用户体验。本发明还利用数据对象的序列化和反序列化技术,提高了广告服务器对用户浏览历史数据的处理效率以及进行多个子周期频次控制条件匹配的效率,且节约了有限的浏览器cookie资源。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
图1为本发明提供的一种广告投放频次控制方法流程图,具体步骤如下:
步骤101、用户浏览器向广告服务器发送广告请求,所述广告请求中包含请求参数。
所述请求参数包含但不限于用户观看的视频id、视频所属的一级分类、二级分类、用户IP、关键字等。
若所述广告为视频广告,则所述广告请求由浏览器中嵌入的视频播放器来发送。
步骤102、判断是否有广告库存,如果有则执行步骤103,否则结束流程;
步骤103、根据请求参数取得一个符合投放条件的广告;
步骤104、判断所取得的广告是否为需要进行频次控制的N+广告,如果是则执行步骤105,否则执行步骤112;
步骤105、判断所述广告请求是否携带所取得的N+广告的浏览历史cookie,若是则执行步骤106,否则执行步骤108;
在浏览器保存有N+广告浏览历史cookie的情况下,所述广告请求还会携带N+广告浏览历史cookie,通过广告浏览历史cookie使广告服务器能够获知用户观看过N+广告的历史情况。
步骤106、将广告请求携带的N+广告的广告浏览历史cookie反序列化为历史频次控制数据对象CampCookie;
本发明定义的历史频次控制数据对象CampCookie,该数据对象用于以结构化的方式描述用户对N+广告的浏览历史,在广告服务器更新CampCookie后会将其序列化后反馈给用户浏览器,用户浏览器将其保存为广告浏览历史cookie,在用户再次发送广告请求时,用户浏览器将广告浏览历史cookie再次发送给广告服务器,广告服务器再次将广告浏览历史cookie反序列化为CampCookie,通过CampCookie广告服务器可方便的获知用户之前的广告浏览历史,并通过CampCookie实现对N+广告的广告频次控制。
序列化(Serialize)和反序列化(Deserialize)是运行时环境用来支持用户定义类型的流化的机制。序列化的目的是以某种存储形式使自定义对象持久化,反序列化是序列化的逆过程,通过二者的结合可实现对象的跨网络传输,从而使程序更具维护性。
CampCookie数据对象结构如附图2所示,用户观看每个N+广告的历史信息都可以用CampCookie数据结构来描述,其中至少包含如下组成元素:
已观看总次数showTotalTimes:用于记录N+广告被用户观看的总次数;
频次控制子周期periodi(i=1,2,...n):用于记录在N+广告频次控制大周期中的第i个子周期值,优选地以天为单位;
子周期i内已观看次数showTimesi(i=1,2,...,n):用于记录在子周期periodi内,某用户观看当前广告的次数;
子周期i截止时间expireTimei(i=1,2,...,n):用于记录子周期periodi的截止时间。
步骤107、依据当前时间对CampCookie中的子周期观看次数和截止时间进行预处理,然后执行步骤109;
该步骤将当前时间与CampCookie中各子周期截止时间相比较,如果当前时间已超过子周期截止时间,则对子周期已观看次数showTimesi和子周期截止时间expireTimei重新进行初始化,即将showTimesi置0,根据当前时间重新设置对应子周期的截止时间expireTimei。
步骤108、广告服务器为用户创建所述N+广告的CampCookie数据对象,并进行初始化,然后执行步骤109;
如果广告请求不包含所述N+广告的广告浏览历史cookie,则说明用户之前未曾观看该N+广告,系统会自动为用户创建一个CampCookie并对其进行初始化。
对CampCookie的初始化需要依据广告服务器为N+广告创建的基准频次控制数据对象CampInfo中的信息,CampInfo数据对象用于描述广告商的广告频次控制要求,广告服务器会为每一个要求作N+控制的广告建立一个唯一的CampInfo来描述其具体的N+控制要求。
CampInfo的结构如附图3所示,其中至少包含如下组成元素:
对象标识campId:CampInfo对象的唯一标识,每个广告实体中包含一个campId属性,用于关联对应的CampInfo;
总次数限制值numLimit:广告在以N+控制的方式进行投放的整个周期内,一个用户总共能够看到该广告的最多次数;
子周期periodi:在整个投放周期之下的子投放周期,以天为单位;
子周期限制值timesi(i=1,2,...,n):广告在子周期periodi内最多能被一个用户观看的次数,具体实现时,每个periodi和timesi可以key-value对的形式存放在HashMap<Integer,Integer>结构中;
截止日期endDate:广告的N+控制投放的截止日期,超过该日期后,广告可不必再遵守N+控制要求。
依据CampInfo对CampCookie进行初始化的过程为:
(1)将showTotalTimes置0;
(2)根据CampInfo中的子周期CampInfo.period 1~CampInfo.periodn设置CampCookie中的子周期CampCookie.period 1~CampCookie.periodn;
(3)将CampCookie.showTimes 1~CampCookie.showTimesn置为0;
(4)以当前日期为基准,计算各子周期对应的结束时间,并将计算值赋给CampCookie.expireTime 1~CampCookie.expireTimen,例如,当日为12月1日,子周期period 1为5日,则对应的CampCookie.expireTime 1为12月6日00点00分00秒。
在系统运行期间,CampInfo数据对象将被加载于广告服务器的缓存中,以提高响应速度。
步骤109、根据所述N+广告的CampInfo数据对象和CampCookie数据对象来判断用户是否可以观看这个广告,若判断结果为是,则执行步骤110,否则执行步骤102;
步骤110、更新CampCookie,将CampCookie中已观看总次数及各子周期观看次数均加1,;
步骤111、将更新后的CampCookie序列化后反馈给用户浏览器存储为用户广告浏览历史cookie;
步骤112、向用户投放广告。
图4为广告服务器根据N+广告的CampInfo和CampCookie判断是否向用户投放所述N+广告的流程,具体步骤如下:
步骤401、根据campId获取对应的CampInfo数据对象;
步骤402、判断CampCookie中用户已观看总次数showTotalTimes是否大于等于CampInfo中的numLimit,若大于等于则说明在广告的总投放周期内用户的观看次数已经超过或达到了广告商要求的总观看次数的上限值,因此拒绝向该用户再次投放该N+广告,因此返回false;若小于则执行步骤403;
步骤403、为循环控制参数i赋初值0;
步骤404、判断CampCookie的子周期i内用户已观看次数showTimesi是否小于CampInfo中设定的子周期i内允许用户观看次数的上限值timesi,若小于则说明该用户满足子周期i的频次控制要求,可继续进行下一子周期的判断,执行步骤405;若大于等于则说明该用户已不满足子周期i的频次控制要求,因此拒绝向该用户再次投放该N+广告,返回false;
步骤405、循环控制参数i做自增操作,即i=i+1;
步骤406、判断是否已处理完所有子周期的频次控制判断,若是则说明该用户满足所有子周期的频次控制条件,可以向该用户投放该N+广告,返回true;若否,则执行步骤404。
图5为本发明实施例还提供一种广告投放频次控制装置,该装置500包括:
获取模块510,用于在接收到广告请求后,获取符合投放条件的频次控制广告即N+广告;
第一判断模块520,用于判断所述广告请求是否携带所述N+广告的历史浏览cookie;
序列化处理模块530,用于将历史浏览cookie反序列化为历史频次控制数据对象CampCookie;以及将CampCookie序列化为历史浏览cookie;
预处理模块540,用于在所述广告请求携带所述N+广告的历史浏览cookie的情况下,依据当前时间对CampCookie中的各频次限制条件进行预处理;
初始化模块550,用于在所述广告请求未携带所述N+广告的历史浏览cookie的情况下,为用户新建CampCookie,并依据基准频次控制数据对象CampInfo对所述CampCookie数据对象进行初始化;
第二判断模块560,用于基于所述CampInfo和CampCookie判断本次广告请求是否符合所述N+广告的频次控制条件;
投放模块570,用于在本次广告请求符合所述N+广告的频次控制条件时,更新所述N+广告的CampCookie,向用户反馈CampCookie序列化后所得的历史浏览cookie,并向用户投放所述N+广告。
优选地,所述CampCookie用于以结构化的方式描述用户对所述N+广告的浏览历史,其中至少包含已观看总次数showTotalTimes和一个或多个子周期记录结构,子周期记录结构至少包含:频次控制子周期字段period、子周期内已观看次数字段showTimes、子周期截止时间字段expireTime;
优选地,所述CampInfo用于描述广告商的广告频次控制要求,广告服务器会为每一个要求作N+控制的广告建立一个唯一的CampInfo,CampInfo至少包含对象标识campID、总次数限制值numLimit、一个或多个子周期控制结构及投放截止日期endDate,子周期控制结构至少包含:子周期字段period、子周期限制值times。
优选地,所述预处理模块540包括:
截止时间判断模块541,用于将当前时间与CampCookie中各子周期截止时间相比较,判断当前时间已超过对应子周期截止时间;
预处理子模块542,用于在当前时间已超过对应子周期截止时间的情况下,将对应的子周期已观看次数showTimes置0并根据当前时间重新设置对应子周期的截止时间expireTime。
优选地,所述第二判断模块560包括:
总次数校验模块561,用于判断所述N+广告对应的CampCookie中用户已观看总次数showTotalTimes是否大于等于所述N+广告对应的CampInfo中的numLimit,若是则拒绝向用户再次投放所述N+广告,否则指示子周期频次校验模块562执行;
子周期频次校验模块562,用于依次判断每个频次控制子周期内,用户已观看次数showTimes是否大于等于CampInfo中设定的对应子周期内允许用户观看次数的上限值times,在所有的子周期内用户已观看次数showTimes都小于CampInfo中对应子周期内允许用户观看次数的上限值times时,向用户投放所述N+广告,否则拒绝向用户再次投放所述N+广告。
本发明所提出的广告投放频次控制方法及装置不仅对整个投放周期的用户观看次数进行了限制,还能够在投放周期内划分多个大小不一的子周期,对每个子周期的用户观看频次作更详细的限制,从而使得广告能够在整个周期内间隔均匀地投放给用户,满足广告商提出的多个限制条件的频次控制要求,比起传统的N+频次控制方法来说,既有更好的用户体验,又更大程度地保证了广告商的利益。
本发明通过定义CampCookie数据结构来对用户的广告浏览历史信息进行结构化描述,并利用数据对象的序列化和反序列化技术,提高了广告服务器对用户浏览历史数据的处理效率以及进行多个子周期频次控制条件匹配的效率,而且仅使用一个cookie便完成了复杂的用户信息的存储和访问,节约了有限的浏览器cookie资源(目前主流浏览器在一个域名下能保存的cookie数量基本都仅有50个左右)。
实例1
某广告商需要投放广告A1,要求广告投放周期是:2011-09-25~2011-10-25,要求在整个投放周期内每个用户最多只能看到该广告6次,并且要求每个用户每天最多只能看到该广告2次,每10天最多只能看到4次。下面是具体实施步骤:
(1)首先在广告系统的广告数据库相关表中创建该广告A1的记录,并设置该广告对应的各项属性,以及N+限制信息。
(2)实际投放时,所有当前待投的N+广告的频次限制信息都会被从数据库中提取出来,并分别为它们创建一个CampInfo实例。如广告A1对应的CampInfo信息结构如下表1:
表1
(3)当广告系统找到可匹配当前请求的广告A1,发现A1是N+广告,然后会提取用户浏览器端传来的广告A1相关的cookie信息,如果找到则将其还原为一个CampCookie对象,如果未找到,则新初始化一个CampCookie对象。
例如,广告系统接收到某次广告请求时所得到的浏览器cookie的值为“4_1:1:1317484800000_10:2:1317830400000”,将其还原为某个CampCookie对象后,其结构如下表2所示:
表2
表2的含义为:广告A1已经被某个用户总共观看了4次,其中,当天已经观看1次,最近10天之内已经观看2次,其中长整数1317484800000、1317830400000分别为1天和10天这两个子周期的截止时间点2011-10-0200:00:00和2011-10-06 00:00:00,根据前者可推断出当天是2011-10-01日,根据后者可推断出从5天前的2011-09-26日到2011-10-01当天,用户总共看了这个广告2次,并将于5天后的2011-10-06日零点结束该子周期,该子周期内浏览次数会被清零,然后重新开始下一个10天的频次统计。
根据图4的校验流程,可以发现该用户:总观看次数4次小于允许观看的最大次数6次,当天观看次数1次小于1天内允许观看的次数上限2次,10天内观看次数2次也小于10天内最多允许观看的次数4次,所以本次广告请求校验结果是:TRUE,即广告A1可以投给该用户。
当该用户过几分钟后,再次向广告系统请求广告,且广告系统再次命中广告A1时,发现此时取得的CampCookie已经变成如下表3所示:
表3
此时该用户已经无法满足每天最多观看2次的限制条件,所以本次广告请求校验结果是:FALSE,即用户当天不能再看到此广告。
此后的第2天,当用户重复访问相关页面,再次发送广告请求时,如果广告系统再次命中广告A1时,发现此时取得的CampCookie变成下表4:
表4
可以发现周期为1天的浏览次数已经重新由2变成了0,周期截止时间也由1317484800000变为1317571200000,这是因为,已经进入第二天,每天的观看次数需要清零,截止时间也自动后延一天到2011-10-03 00:00:00。对该CampCookie再进行校验,则返回结果为TRUE,即用户又可以看到广告A1了。同理,等到2011-12-06 00:00:00之后,前一个10天的子周期也将结束,前面10天观看的总次数也被清零,10天子周期截止时间则延后到2011-12-1600:00:00。
实例2
某广告商要投放广告A2,要求广告投放周期是:2011-09-01~2011-09-31,在整个投放周期内每个用户最多只能看到该广告8次,并且要求每用户每天最多只能看到该广告2次,每周最多只能看到3次,每10天最多只能看4次。广告A2对应的CampInfo信息结构如下表5所示:
表5
当广告系统找到可匹配当前请求的广告A2,然后会提取用户浏览器端传来的广告A2相关的cookie信息,例如,从某用户浏览器端提取到的浏览器cookie信息结构为“51:1:1315152000000_7:2:1315584000000_10:3:1318435200000”,将其还原为某个CampCookie对象后,其结构如下表6所示:
表6
对上述CampInfo和CampCookie进行校验,可以发现该用户:总观看次数、1天内观看次数、7天内观看次数,和10天内观看次数均未达到各周期上限,所以本次广告请求校验结果是:TRUE,即广告A2可以投给当前用户。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。