使用 Java 脚本访问多个 Google 日历 - Google 日历 API

Access Multiple Google Calendars using Java Script - Google Calendar API

我有这段代码,可以从我的日历中获取事件。

<html>
<head>
<meta charset='utf-8' />
</head>
<body>
 <!--Add a button for the user to click to initiate auth sequence -->
 <button id="authorize-button" style="visibility: hidden">Authorize</button>
 <button id="insert-button" style="visibility: hidden">Insert</button>
 <script type="text/javascript">
      // Enter a client ID for a web application from the Google Developer Console.
      // The provided clientId will only work if the sample is run directly from
      // https://google-api-javascript-client.googlecode.com/hg/samples/authSample.html
      // In your Developer Console project, add a JavaScript origin that corresponds to the domain
      // where you will be running the script.
      var clientId = '823958590548-s5b4d4ngoj6tj2misdvrcdm3rt27jolr.apps.googleusercontent.com';

      // Enter the API key from the Google Developer Console - to handle any unauthenticated
      // requests in the code.
      // The provided key works for this sample only when run from
      // https://google-api-javascript-client.googlecode.com/hg/samples/authSample.html
      // To use in your own application, replace this API key with your own.
      var apiKey = 'AIzaSyDTqOkVPgBv5kCIqp5NXp7UwE0MKTjLmrU';

      // To enter one or more authentication scopes, refer to the documentation for the API.
      var scopes = 'https://www.googleapis.com/auth/calendar';

      // Use a button to handle authentication the first time.
      function handleClientLoad() {
        gapi.client.setApiKey(apiKey);
        window.setTimeout(checkAuth,1);
      }

      function checkAuth() {
        gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
      }


      function handleAuthResult(authResult) {
        var authorizeButton = document.getElementById('authorize-button');
        var insertButton = document.getElementById('insert-button');
        if (authResult && !authResult.error) {
          authorizeButton.style.visibility = 'hidden';
          makeApiCall();
          insertButton.style.visibility = '';
          insertButton.onclick = handleInsertClick;
        } else {
          authorizeButton.style.visibility = '';

          insertButton.style.visibility = 'hidden';

          authorizeButton.onclick = handleAuthClick;
        }
      }

      function handleAuthClick(event) {
        gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
        return false;
      }

      function handleInsertClick(event) {
       makeInsertApiCall();
      }

      function makeApiCall() {
       gapi.client.load('calendar', 'v3', function() {
         var request = gapi.client.calendar.events.list({
           'calendarId': 'ashishpandit2312@gmail.com'
         });

         request.execute(function(resp) {
           for (var i = 0; i < resp.items.length; i++) {
             var li = document.createElement('li');
             li.appendChild(document.createTextNode(resp.items[i].summary));
             document.getElementById('events').appendChild(li);
           }
         });
       });
     }

      function makeInsertApiCall() {
       gapi.client.load('calendar', 'v3', function() {
         var request = gapi.client.calendar.events.insert({
           "calendarId": "primary",
           resource:{
               "summary": "Meeting",
               "location": "Somewhere",
               "start": {
                 "dateTime": "2015-02-21T01:00:00.000-07:00"
               },
               "end": {
                 "dateTime": "2015-02-21T04:25:00.000-08:00"
               }
             }
         });

         request.execute(function(resp) {
           for (var i = 0; i < resp.items.length; i++) {
             console.dir(resp);
           }
         });
       });
     }

    </script>
 <script
  src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
 <div id='content'>
  <h1>Events</h1>
  <ul id='events'></ul>
 </div>

 <p>Connecting to Google Calendar with the Javascript Library.</p>
</body>
</html>

我想从多个 Google 日历中获取事件。我应该进行哪些更改才能使其正常工作并访问不同人的多个日历?

如果您想访问不同人的多个日历,最好的方法是创建一个服务帐户(它将代表用户向 API 发送所有请求)。因此,不会提示用户使用同意屏幕进行身份验证以访问其日历。以下是步骤:

  1. 创建一个 service account 并且您作为域的管理员。

  2. 将所有日历共享到此服务帐户。

  3. 对于访问用户数据的服务帐户,请按照此 link 进行全域授权。

检查此 link 以获得 java 中的服务帐户示例代码。