且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Google 服务帐号无法模拟 G Suite 用户

更新时间:2023-12-04 15:47:17

我认为您的问题是您在致电 日历 API 但我在自己的实现中使用了一些不同之处

I think you're problem is that your not authorising your credentials before making the call to the Calendar API but there is a couple of differences that you have that I use in my own implementation

  • 使用以下导入语句

  • Use the following import statements

from oauth2client.service_account import ServiceAccountCredentials
from apiclient import discovery

  • 使用from_json_keyfile_name 方法

    授权凭据并在构建服务时将其作为 http 参数传递

    Authorise the credentials and pass it as a http argument when building the service

    尝试修改您的代码:

    from apiclient import discovery
    from oauth2client.service_account import ServiceAccountCredentials
    import httplib2
    
    SCOPES = ['https://www.googleapis.com/auth/calendar']
    SERVICE_ACCOUNT_FILE = 'GOOGLE_SECRET.json'
    
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    
    # Use the create_delegated() method and authorize the delegated credentials
    delegated_credentials = credentials.create_delegated('address@example.com')  
    delegated_http = delegated_credentials.authorize(httplib2.Http())
    google_calendar = discovery.build('calendar', 'v3', http=delegated_http)
    
    events = google_calendar.events().list(
        calendarId='address@example.com',
        maxResults=10
    ).execute()
    

    我还建议在您的 API 调用中设置 calendarId='primary',以便您始终返回当前已为其委派凭据的用户的主日历.

    I would also suggest setting calendarId='primary' in your API call so that you always return the primary calendar of the user who you currently have delegated credentials for.

    有关使用 ServiceAccountCredentials 进行身份验证的更多信息,请参阅以下链接:http://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html

    For more information on authenticating using ServiceAccountCredentials see the following link: http://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html