0

我正在尝试将一些事件从 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参数其实应该是事件的总数。

4

1 回答 1

1

正确的查询参数 is$top和 not 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 来请求特定页面的项目。[OData-Protocol] 文档中介绍了 $top 和 $skip 的语义。[OData-ABNF] top 和 skip 语法规则分别定义了 $top 和 $skip 查询选项的形式语法。

于 2017-11-03T09:27:40.140 回答