web-dev-qa-db-ja.com

NodeサーバーからGoogleカレンダーAPIにアクセスする

どういうわけか、私はグーグルカレンダーにアクセスするのに本当に苦労しています。

Node.jsサーバーからカレンダーのイベントを追加および削除できるようにしたい。

私は文書から本当に矛盾する情報を見つけています。

私はフォローしました--- https://developers.google.com/identity/protocols/OAuth2ServiceAccount これはアクセストークンを取得する方法についての良いガイドを提供しますが、最後にはドライブにアクセスするためだけのものであるように見えます。

次に、 Google Calendar API v3アクセスが構成されていません これはAPIキーのみが必要であると述べていますが、これはすべてクライアント側から行われているように見えるので、おそらく違うのでしょうか?

https://developers.google.com/google-apps/calendar/quickstart/nodejs も調べましたが、カレンダーへの単純なAPI呼び出しを行うだけでは非常に複雑に見えます。サンプルコードは、ファイルの出所や構造が明確でないファイルを参照しています。例えば。 var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';

これを達成する方法についての簡単なガイドをいただければ幸いです。

ありがとう

9
Stretch0

Node.jsを使用して、カレンダーのイベントを追加および削除したいとします。私の理解は正しいですか?私の理解が間違っている場合は教えてください。

カレンダーAPIを使用するためのquickstart.jsについて、カレンダーAPIを使用するには、まず、クライアントID、クライアントシークレットなどを使用してclient_secret.jsonを取得し、APIコンソールでカレンダーAPIを有効にする必要があります。

次のステップとして、アクセストークンと更新トークンをclient_secret.jsonを使用してGoogleから取得する必要があります。クイックスタートのquickstart.jsのほとんどは、それらを取得するために使用されます。 var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';には、client_secret.jsonを使用して取得したアクセストークンと更新トークンが含まれます。有効期限のあるアクセストークンは、有効期限のないリフレッシュトークンから取得できます。 quickstart.jsでは、更新トークンを使用してスクリプトを実行するたびにアクセストークンが取得されます。

quickstart.jslistEvents(auth)以外の関数が認証に使用されます。 listEvents(auth)では、認証によって取得されたアクセストークンを使用してカレンダーAPIを使用できます。

サンプルスクリプト

次のサンプルスクリプトは、イベントを追加および削除するためのものです。これは、クイックスタートのステップ1とステップ2がすでに終了しており、quickstart.jsが使用されていることを前提としています。

Node.jsクイックスタートサンプル の場合、listEvents()を変更しました。このサンプルスクリプトを使用する場合は、Node.jsクイックスタートサンプルをコピーして貼り付け、listEvents()を次のように変更して、次のaddEvents()およびremoveEvents()

function listEvents(auth) {
  var calendar = google.calendar('v3');

  addEvents(auth, calendar); // Add events
  removeEvents(auth, calendar); // Remove events
}

1.イベントを追加します

詳細情報は https://developers.google.com/google-apps/calendar/v3/reference/events/insert です。

function addEvents(auth, calendar){
  calendar.events.insert({
    auth: auth,
    calendarId: 'primary',
    resource: {
      'summary': 'Sample Event',
      'description': 'Sample description',
      'start': {
        'dateTime': '2017-01-01T00:00:00',
        'timeZone': 'GMT',
      },
      'end': {
        'dateTime': '2017-01-01T01:00:00',
        'timeZone': 'GMT',
      },
    },
  }, function(err, res) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    console.log(res);
  });
}

2.イベントを削除します

詳細情報は https://developers.google.com/google-apps/calendar/v3/reference/events/delete です。

function removeEvents(auth, calendar){
  calendar.events.delete({
    auth: auth,
    calendarId: 'primary',
    eventId: "#####",
  }, function(err) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    console.log("Removed");
  });
}

英語が苦手でごめんなさい。

5
Tanaike

私はあなたと同じ状況にありました。 Googleには、nodejsクライアントAPIのserver-to-server認証に関するドキュメントがありません。ばかげている。ついに私は解決策を見つけました ここ 。基本的に、サービスアカウントキー(通常はJSONファイル)とgoogle.auth.JWTserver-to-server OAuth 2.0クライアントが必要です。

let google = require('googleapis');
let privatekey = require("./privatekey.json");
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
       privatekey.client_email,
       null,
       privatekey.private_key,
       ['https://www.googleapis.com/auth/calendar']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
 if (err) {
   console.log(err);
   return;
 } else {
   console.log("Successfully connected!");
 }
});

次に、次のようにカレンダーAPIを呼び出します。

let calendar = google.calendar('v3');
calendar.events.list({
   auth: jwtClient,
   calendarId: 'primary'//whatever
}, function (err, response) {

});
17
ZuzEL