寡人的接口设计是不是很赞呢
@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!") } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述