技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

寡人的接口设计是不是很赞呢

@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!")
        }
}

 

posted on 2013-06-08 22:29  codestyle  阅读(466)  评论(0)    收藏  举报