Powershell:将可变日期插入到URL字符串中

问题描述 投票:0回答:1

为了网络抓取目的,我需要动态更改各种url中的日期部分。日期和格式都需要可变。

例如,今天我可能要请求:

www.website.com/?startdate=2020-01-01&enddate=2020-01-02

明天我可能要:

www.website.com/?startdate=2020-01-02&enddate=2020-01-03

我当前的解决方案是将以下格式作为参数传递给我的脚本:

www.website.com/?startdate = &enddate = <0,yyyy-MM-dd>

逗号的左边是我需要的日子,右边的部分是其格式。

我正在使用以下脚本来获取结果:

$url = "www.website.com/?startdate=<-1,yyyy-MM-dd>&enddate=<0,yyyy-MM-dd>"

$urlsplit = $url.Split("<>") | Where-Object {$_}

Switch ($urlsplit.Length)
{
1 { 
    $result = $url 
}
2 { 
    $dayone = $urlsplit[1].Split(",")[0]
    $formatone =  $urlsplit[1].Split(",")[1] 
    $result = $urlsplit[0] + ((Get-Date).AddDays($dayone).ToString($formatone)) 
}
4 {
    $dayone = $urlsplit[1].Split(",")[0]
    $daytwo = $urlsplit[3].Split(",")[0]
    $formatone = $urlsplit[1].Split(",")[1]
    $formattwo = $urlsplit[3].Split(",")[1]
    $result = $urlsplit[0] + ((Get-Date).AddDays($dayone).ToString($formatone)) + $urlsplit[2] + ((Get-Date).AddDays($daytwo).ToString($formattwo))
}
}
Write-Output $result

URL不能包含日期,一个日期或两个日期(如上所述)。这就是为什么我目前需要switch语句的原因。

可以用更简单的方式完成吗?

regex powershell parsing url wildcard
1个回答
0
投票

这是一个自定义函数,它将以简化的方式完成您要查找的内容,而不会全部拆分。

用法

Write-Host 'Start date only' -ForegroundColor Cyan
Get-Url -StartDate (get-date).AddDays(-1)
Write-Host 'Start date + End date' -ForegroundColor Cyan
Get-Url -StartDate (get-date).AddDays(-1) -EndDate (Get-Date)
Write-Host 'End date only' -ForegroundColor Cyan
Get-Url -EndDate (get-date).AddDays(10)
Write-Host 'No params' -ForegroundColor Cyan
Get-Url 

结果

result

功能定义

Function Get-Url {
    [cmdletbinding()]
    Param (
        [datetime]$StartDate,  
        [datetime]$EndDate ,  
        $Format = 'yyyy-MM-dd'  
    )

    $Start, $End = ''
    $EndSymbol = '?'
    if ($StartDate -ne $null) {
        $Start = "?startdate=$($StartDate.ToString($Format))"
        $EndSymbol = '&'
    }

    if ($EndDate -ne $null) {
        $End = "($EndSymbol)EndDate=$($EndDate.ToString($Format))"
    }

    return "www.website.com/$Start$($End)"

}
© www.soinside.com 2019 - 2024. All rights reserved.