2015-09-24 3 views
2

У меня возникли некоторые странные проблемы с подкачкой в ​​API 3600 REST Office.Проблемы с подкачкой с Office 365 Calendar API

При получении всех событий пользователя в пакетах со следующей просьбой (конечно, обновлением параметров пропуска при каждом вызове):

https://outlook.office365.com/api/v1.0/users%[email protected]/Events/?$orderby=Start&$select=ID&$top=50&$skip=100 

Пользователя имеет более 1000 событий в календаре и на в какой-то момент я все время получаю одни и те же события. В этом случае, по иронии судьбы, после 666 событий. Odata.nextLink возвращается каждый раз, а параметр пропуска обновляется, но возвращаемые события I те же, что и на последней странице. Процедура заканчивается бесконечным циклом, получающим больше событий одного и того же события.

Кроме того, по какой-то причине я иногда получаю большую партию, чем запрашивал. Например, по следующему запросу я получаю 470 событий, а 250 ожидалось.

https://outlook.office365.com/api/v1.0/users%[email protected]/Events/?$orderby=Start&$select=ID&$top=250 

Неужели кто-нибудь испытал эти проблемы и если да, то как вы решили проблему?

Другие примеры следов запроса/ответа, демонстрирующие проблему can be found here.

+0

Вы пытались вытащить меньшие партии, например 10 или 20 записей за партию. – Mostafa

+0

Да, даже с 10. – P44T

+0

проверьте ниже мой ответ на вопрос, который у вас есть. – Mostafa

ответ

0

Вот полный код, который возвращает точно количество записей для запрошенных событий.

// The code sample below demonstrates how to get events using the Office 365 unified API (Preview). 
$.ajax('https://graph.microsoft.com/beta/me/Events/?$top=1', { 
     headers: { 
      Authorization: 'Bearer {token:https://graph.microsoft.com/}', 
      Accept: 'application/json;odata.metadata=none', 
    } 
}).then(function (response) { 
     for (var i = 0; i < response.value.length; i++) { 
      console.log('Event "' + response.value[i].Subject + '"'); 
     } 
     console.log('\n' + 'Full JSON response:') 
     console.log(response); 
    }).fail(function (error) { 
     console.log(error); 
    }); 

Кроме того, если вы хотите, чтобы проверить это:

1) Перейти к ниже URL (o365 песочница апи) -> Примеры кода -> Получить события -> и выберите язык либо C# или JS:

https://apisandbox.msdn.microsoft.com/

2) Вход с o365 кредитки.

3) Измените запрос, добавив? Top = 1 для записей, которые вы запрашиваете.

4) вы увидите, что api возвращает точно запрошенное количество записей.

Надеюсь, это поможет.

+0

Проблема, с которой я сталкиваюсь, происходит не просто с каждым пользователем, поэтому я не думаю, что что-то не так с запросами, которые я делаю (см. Выше). Скорее всего, это является ошибкой с параметром skip в API, при некоторых условиях. Некоторое объяснение того, когда это происходит, или предложения об обходном пути были бы замечательными. – P44T

+0

Избегайте использования $ skip и вместо этого используйте $ filter и получать события в день, это должно быть минимально в день, а затем вы можете извлекать данные в день. сообщите мне, если это сработает с вами. – Mostafa

+0

Хотя это может сработать, это не очень эффективно, поскольку мне нужно отправить один запрос в день для каждого пользователя. Это будет 365 звонков на одного пользователя для получения календаря в течение одного года. Не очень масштабируемый. И даже тогда у меня нет гарантии, что все события были возвращены. – P44T

Смежные вопросы