PowerShell Invoke-RestMethod для API Календаря Google возвращает только 1 событие - PullRequest
0 голосов
/ 19 июня 2019

Я звоню в API Календаря Google и запрашиваю список всех событий в моем календаре. Тем не менее, я получаю только одно возвращенное событие. В календаре более 40 событий.

$CalURL="https://www.googleapis.com/calendar/v3/calendars/primary/events"

$header=@{
    Authorization = "Bearer $($tokens.access_token)"
    maxResults='2500'        
}


Invoke-RestMethod -Headers $header -Uri $CalURL -Method Get -ContentType 'application/json'

1 Ответ

0 голосов
/ 19 июня 2019

При получении событий с помощью API Календаря Google важно знать, что все результаты разбиты на страницы, и Google не требуется возвращать все события на одной странице, даже если все ваши события поместятся на одной.

Это определение параметра maxResults согласно Справочнику по календарному API :

Максимальное количество событий, возвращаемых на одной странице результатов. Количество событий на получающейся странице может быть меньше, чем это значение, или вообще не иметь значения , даже если имеется больше событий, соответствующих запросу . Неполные страницы могут быть обнаружены непустым полем nextPageToken в ответе. По умолчанию значение равно 250 событиям. Размер страницы никогда не может превышать 2500 событий. Дополнительно.

Чтобы исправить это, вы должны реализовать цикл для получения всех событий и использовать nextPageToken:

$CalURL="https://www.googleapis.com/calendar/v3/calendars/primary/events"

$header=@{
    Authorization = "Bearer $($tokens.access_token)"
    maxResults='2500'        
}


$result = Invoke-RestMethod -Headers $header -Uri $CalURL -Method Get -ContentType 'application/json'

$FullResults = @()
$result.items | ForEach-Object { $FullResults += $_ }

# Check if the results have a value for nextPageToken
while($null -ne $result.nextPageToken) {
    $header=@{
        Authorization = "Bearer $($tokens.access_token)"
        maxResults='2500'
        nextPageToken="$($result.nextPageToken)"        
    }

    $result = Invoke-RestMethod -Headers $header -Uri $CalURL -Method Get -ContentType 'application/json'

    $result.items | ForEach-Object { $FullResults += $_ }
}

$FullResults

Вышеприведенное должно повторяться до тех пор, пока не будут получены все страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...