このトピックに関する例が見つからないようです。その方法を知りたいです。Invoke web-request を使用して powershell でページネーションを行う方法について、誰かに例を示したり、リンクを教えてもらえますか? 私が直面している課題は、一度に 100 行しか返さないサーバーに対して API 呼び出しを行っていることです。さらに行を取得するには、サーバーに対して 2 回目の呼び出しを行う必要があります。どうすればいいのかわかりません。それが役立つ場合は、Canvas LMS によって提供されるリンクと、これまでに持っている私のコードを次に示します。
ページネーション
複数のアイテムを返すリクエストは、デフォルトで 10 アイテムにページ分割されます。?per_page パラメータを使用して、カスタムのページあたりの量を設定できます。per_page に設定できるサイズには不特定の制限があるため、常に Link ヘッダーを確認してください。
追加のページを取得するには、返された Link ヘッダーを使用する必要があります。これらのリンクは不透明として扱う必要があります。それらは、目的の現在、次、前、最初、または最後のページを取得するために必要なすべてのパラメーターを含む絶対 URL になります。1 つの例外は、認証のために access_token パラメータが送信された場合、返されるリンクに含まれないため、再度追加する必要があることです。
ページネーション情報は、Link ヘッダーで提供されます。
Link: <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueA>; rel="current", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueB>;> rel="next", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueC>;> rel="first", <https://<canvas>/api/v1/courses/:id/discussion_topics.json?opaqueD>;> rel="last"
可能な rel 値は次のとおりです。
current - 結果の現在のページへのリンク。next - 結果の次のページへのリンク。prev - 結果の前のページへのリンク。first - 結果の最初のページへのリンク。last - 結果の最後のページへのリンク。これらは、関連する場合にのみ含まれます。たとえば、結果の最初のページには rel="prev" リンクは含まれません。rel="last" は、合計カウントが各リクエストで計算するにはコストが高すぎる場合にも除外されることがあります。
はじまりの商品
$curlly=""
$url_main="https://[instance].instructure.com/api/v1/accounts/1/courses?per_page=1"
$security_token="imhungry"
$header = @{"Authorization"="Bearer "+ $security_token; "rel"="last"}
$curlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly = ConvertFrom-Json $curlly.Content
foreach($course in $curlly)
{
$course.name
}
$curlly.Count
最終製品
##This is an example on how to use pagination in powershell
$url_main="https://[instance].instructure.com/api/v1/accounts/1/courses?per_page=100"
$security_token="boyimhungry"
$header = @{"Authorization"="Bearer "+ $security_token}
$purlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly = ConvertFrom-Json $purlly.Content
$url_main = $purlly.Headers.Link.Split(",")[1].Replace("<","").Replace(">","") ## you can get away with just doing one replace("<","") but it looks neater this way
while( !$url_main.Contains("prev"))
{
$purlly=Invoke-WebRequest -Headers $header -Method Get -Uri $url_main
$curlly += ConvertFrom-Json $purlly.Content
$url_main = $purlly.Headers.Link.Split(",")[1].Replace("<","").Replace(">","")
cls
$curlly.Count
$url_main
}
foreach($course in $curlly)
{
$course.name
}
$curlly.Count