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/¶m1=value1?param2=value2
これである程度自由度の持ったURLを生成できるようになりました。
やっていること
ハッシュテーブル作成
$queryParams = @{} $param1 = 'value1' $param2 = 'value2' $queryParams['param1'] = $param1 $queryParams['param2'] = $param2 $queryParams
ループ処理
$queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"})
ワンライナーの処理は戻り値が配列で返されます。
{ }内での処理はハッシュテーブルをURL用の文字列の形にします
配列を結合
$($queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"}) -join "?")
ワンライナーで渡された配列をjoinで結合します。その際に区切り文字?で区切ります。
URLにする
url&パラメータ?パラメータの形にする
$url +"&" + $($queryParams.GetEnumerator().ForEach({"$($_.Key)=$($_.Value)"}) -join "?")
url部から最初のパラメータの区切り文字は&なので、&を埋め込み以降は生成したコードにします。