代码之家  ›  专栏  ›  技术社区  ›  An Schultz

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

  •  0
  • An Schultz  · 技术社区  · 7 年前

    我正在尝试将一些事件从Outlook同步到本地DB,我调用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,将顶部参数设置为10,但最终得到了许多空事件。

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Yogesh    7 年前

    正确的查询参数是 $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 [OData协议]文档介绍了$top和$skip的语义。[OData ABNF]top和skip语法规则分别定义了$top和$skip查询选项的形式语法。