为了网络抓取目的,我需要动态更改各种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语句的原因。
可以用更简单的方式完成吗?
这是一个自定义函数,它将以简化的方式完成您要查找的内容,而不会全部拆分。
用法
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
结果
功能定义
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)"
}