调用Office365 API来同步事件,限制

时间:2017-11-03 09:23:41

标签: php office365 office365api outlook-api

我正在尝试将一些事件从Outlook同步到我的本地数据库,我将API调用如下:

$url = 'https://outlook.office365.com/api/v2.0/users/' . $this->user . '/CalendarView/'
    . '?startDateTime=' . $start_datetime
    . '&endDateTime=' . $end_datetime

这为我提供了两个特定日期之间Outlook的所有事件。

然后我使用下面的代码保存所有这些事件。它的问题是它一次只返回10个事件。

$http = new \Http_Curl();
        $http->set_headers( $this->get_headers() );
        $response = $http->get( $url );

        $data = array();

        $continue = true;
        while ( $continue ) {
            if ( isset($response->value) ) {
                $arr = array();

                foreach ( $response->value as $event ) {
                    $arr[] = $event;
                }

                $data = array_merge( $data, $arr );
            }

            $property = '@odata.nextLink';
            if ( isset( $response->$property ) ) {
                $url = $response->$property;
                $response = $http->get( $url );
            } else {
                $continue = false;
            }
        }

        unset( $http );

        return $data;

然后我尝试调用下面的API,将top参数设置为10,但我最终得到了许多空事件。

$url = 'https://outlook.office365.com/api/v2.0/users/' . $this->user . '/CalendarView/'
    . '?startDateTime=' . $start_datetime
    . '&endDateTime=' . $end_datetime
     .'&top=100'

我试图避免每分钟拨打60多个电话。有没有办法首先获取两个日期之间的事件数,然后检索所有事件,因此top参数实际上应该是事件的总数。

1 个答案:

答案 0 :(得分:1)

正确的查询参数是$top而不是top。请注意$

http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752362

  

5.1.5系统查询选项$ top和$ skip   $ top系统查询选项请求查询的集合中的项目数包含在结果中。 $ skip查询选项请求查询集合中要跳过但未包含在结果中的项目数。客户可以通过组合$ top和$ skip来请求特定的项目页面。   $ top和$ skip的语义包含在[OData-Protocol]文档中。 [OData-ABNF] top和skip语法规则分别定义了$ top和$ skip查询选项的形式语法。