社内SEの話

日々起きたことの記録用

【Powershell】URLのクエリを生成する方法【urllib】

URLのクエリを生成する方法

URLはドメインやパスの後ろはクエリと呼ばれるURLになっています。

APIなどは特にこのURLが多数かつ複雑に設定されているケースが多々あり、URLを文字列の挿入などの手動でコード設計するとバグが発生しやすくなります。

Pythonで言うところのurllibに相当する部分です。

クエリ部分をハッシュテーブルに格納してコードでURLを生成できればバグが防げます。

完成したコード

$url = "[[https://example.com/]{.underline}](https://example.com/)"
$queryParams = @{
'param1' = 'value1'
'param2' = 'value2'
}

$newurl = $url +"&" + $($queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"}) -join "?")

$newurl

https://example.com/&param1=value1?param2=value2

Powershell urllib

これである程度自由度の持ったURLを生成できるようになりました。

やっていること

ハッシュテーブル作成

$queryParams = @{}
$param1 = 'value1'
$param2 = 'value2'
$queryParams['param1'] = $param1
$queryParams['param2'] = $param2
$queryParams

Powershell urllib

ループ処理

$queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"})

Powershell urllib

ワンライナーの処理は戻り値が配列で返されます。

{ }内での処理はハッシュテーブルをURL用の文字列の形にします

learn.microsoft.com

配列を結合

$($queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"}) -join "?")

ワンライナーで渡された配列をjoinで結合します。その際に区切り文字?で区切ります。

learn.microsoft.com

URLにする

url&パラメータ?パラメータの形にする

$url +"&" + $($queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"})  -join "?")

url部から最初のパラメータの区切り文字は&なので、&を埋め込み以降は生成したコードにします。