缺少会议室日历 - Office 365 API

时间:2016-08-11 17:13:20

标签: python office365 office365api

我正在尝试获取用户的所有日历列表。此用户具有委派权限,可以查看所有会议室(资源)的日历。如果我登录用户的帐户,我可以在“其他日历”部分中看到会议室日历。我还在“其他日历”部分创建了我自己的名为“测试”的日历。

当我首先获取所有日历组然后遍历日历组列表并获取日历时,“其他日历”列表仅具有“测试”日历。

不确定为什么会这样。用户也是全局管理员。

def get_access_info_from_authcode(auth_code, redirect_uri):

    post_data = { 'grant_type': 'authorization_code',
            'code': auth_code,
            'redirect_uri': redirect_uri,
            'scope': ' '.join(str(i) for i in scopes),
            'client_id': client_registration.client_id(),
            'client_secret': client_registration.client_secret()
          }

    r = requests.post(access_token_url, data = post_data, verify = verifySSL)

    try:
        return r.json()
    except:
        return 'Error retrieving token: {0} - {1}'.format(r.status_code, r.text)

def get_access_token_from_refresh_token(refresh_token, resource_id):
    post_data = { 'grant_type' : 'refresh_token',
                  'client_id' : client_registration.client_id(),
                  'client_secret' : client_registration.client_secret(),
                  'refresh_token' : refresh_token,
                  'resource' : resource_id }

    r = requests.post(access_token_url, data = post_data, verify = verifySSL)

    # Return the token as a JSON object
    return r.json()
def get_calendars_from_calendar_groups(calendar_endpoint, token, calendar_groups):
    results = []
    for group_id in calendar_groups:
        get_calendars = '{0}/me/calendargroups/{1}/calendars'.format(calendar_endpoint, group_id)
        r = make_api_call('GET', get_calendars, token)

        if (r.status_code == requests.codes.unauthorized):
            logger.debug('Response Headers: {0}'.format(r.headers))
            logger.debug('Response: {0}'.format(r.json()))
            results.append(None)
        results.append(r.json())
    return results
def get_calendars(calendar_endpoint, token, parameters=None):
    if (not parameters is None):
        logger.debug('  parameters: {0}'.format(parameters))

    get_calendars = '{0}/me/calendars'.format(calendar_endpoint)    
    if (not parameters is None):
        get_calendars = '{0}{1}'.format(get_calendars, parameters)
    r = make_api_call('GET', get_calendars, token)
    if(r.status_code == requests.codes.unauthorized):
        logger.debug('Unauthorized request. Leaving get_calendars.')
        return None
    return r.json()

逻辑+代码: 步骤1)获取授权URL:

authority = "https://login.microsoftonline.com/common"
authorize_url = '{0}{1}'.format(authority, '/oauth2/authorize?client_id={0}&redirect_uri={1}&response_type=code&state={2}&prompt=consent')

步骤2)打开URL会将我们带到https://login.microsoftonline.com/common,我以用户身份登录: enter image description here

步骤3)这会重定向回我的本地主机,然后是以下内容:

discovery_result = exchoauth.get_access_info_from_authcode(auth_code, Office365.redirect_uri)

refresh_token = discovery_result['refresh_token']

client_id = client_registration.client_id()
client_secret = client_registration.client_secret()

access_token_json = exchoauth.get_access_token_from_refresh_token(refresh_token, Office365.resource_id)

access_token = access_token_json['access_token']


calendar_groups_json = exchoauth.get_calendar_groups(Office365.api_endpoint, access_token)
            cal_groups = {}

if calendar_groups_json is not None:
    for entry in calendar_groups_json['value']:
        cal_group_id = entry['Id']
        cal_group_name = entry['Name']
        cal_groups[cal_group_id] = cal_group_name

    calendars_json_list = exchoauth.get_calendars_from_calendar_groups(Office365.api_endpoint,
                    access_token, cal_groups)

    for calendars_json in calendars_json_list:
        if calendars_json is not None:
            for ent in calendars_json['value']:
                cal_id = ent['Id']
                cal_name = ent['Name']
                calendar_ids[cal_id] = cal_name

如果您需要任何其他信息,请告诉我

1 个答案:

答案 0 :(得分:0)

使用验证码授权流程的请求的委托令牌只能获取登录用户的日历。

如果您想要从特定房间获取事件,您可以使用仅限应用的令牌请求客户端凭据流

Here是一个有用的链接供您参考。