寡人的接口设计是不是很赞呢
@include lib/assert.awk @include lib/logging.awk ####################################################################################################### # PUBLIC FUNCTIONS # ####################################################################################################### function isMatchURL(url,path,flag,params, __ARGVEND__, item, requireArray) { debug("statck: isMatchURL...") assert(match(flag,/=/)>0, \ "assertion faild: named flag variable is incorrect") debug(parseFullPath(url)) debug(parseDomain(url)) if(path != "" && parseFullPath(url) != path && parseDomain(url) != path) { debug("path is not equal to url") return 0 } parseParam(flag,requireArray) parseParam(url,params) debug("foreach every item") for(item in requireArray) { debug("current item is "item) if(!(item in params)) { debug(item" not in url") delete params return 0 } if(requireArray[item] != params[item]) { debug(item" value "params[item]" is not equal to "requireArray[item]) delete params return 0 } } info("url is bussines url!") return 1 } function parse(url, parseURL, parseParams, __ARGVEND__, tempArray, i, a, s,key,value) { parseURL["domain"] = parseDomain(url) parseURL["path"] = parsePath(url) parseParam(url,parseParams) } ####################################################################################################### # INNER FUNCTIONS # ####################################################################################################### function parsePath(url, __ARGVEND__) { if(match(url,/\/[^\?$]*[\?$]/)>0) { return substr(url,RSTART,RLENGTH-1) } else { return "" } } function parseDomain(url, __ARGVEND__) { if(match(url,/[:\/]/)>0) { return substr(url,1,RSTART-1) } else { return url } } function parseFullPath(url, __ARGVEND__) { if(match(url,/[\?$]/)>0) { return substr(url,1,RSTART-1) } else { return url } } function parseParam(url, params, __ARGVEND__, newUrl, tempArray, i, key, value) { newUrl = url while(1) { if(match(newUrl,/[&?][^&$]+/)>0) { tempArray[substr(newUrl,RSTART+1,RLENGTH-1)] newUrl = substr(newUrl,RSTART+RLENGTH,length(newUrl)-RSTART+RLENGTH) } else { break } } for(i in tempArray) { split(i,a,"=") key = a[1] value = a[2] params[key] = value } }
下面是调用
function statCoverPage(url,__ARGVEND__) { path = "bookshelf.uc.cn/i.php" flag = "ct=def&ac=uc" debug("statck: statCoverPage...") if(isMatchURL(url,path,flag,params)) { for(i in params) { print i" "params[i] } item = params["sn"]" "params["bid"] if(item in COVERS) { info(params["sn"] "access this book "params["bid"]" again") COVERS[item]++ } else { info(params["sn"]" first access book "params["bid"]) COVERS[item] = 1 } } else { debug("the url is not bussines url!") } }