14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Apps Scriptでサービスアカウントを使いGoogleカレンダーにイベントを登録する

Last updated at Posted at 2018-03-17

はじめに

Google Apps Scriptでサービスアカウントを使えないかと思い、ぐぐったら以下の記事が見つかった。

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~

サービスアカウントを使えば承認画面不要で、ユーザーに成り代わってGASを実行できるようになります。
これは素晴らしく便利そう……
と思い、参考にしてGoogleカレンダーにイベントを登録するスクリプトを書いてみました。

準備

手順として、

  1. Google Apps Scriptプロジェクト作成
  2. サービスアカウントの作成
  3. Google Apps Scriptプロジェクトの設定

がありますが、他の記事で丁寧に説明されているので
以下のすばらしい記事をご参考ください。

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~
ほぼこちらの記事のままです。
こちらの手順を進め、最後のコードだけ変更してください。

サービスアカウントを使ってG Suiteドメイン内のカレンダーにアクセスする
サービスアカウントの作成に関してはこちらが参考になります。

注意

サービスアカウントが漏れると非常に危険です。
コメントにあるとおりサービスアカウントは必要なアカウント以外からは閲覧されないようにしましょう。

ソース

  // 認証情報のJSONを取得
  var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));
  
  // カレンダーのスコープを指定
  var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/calendar"], jsonKey.client_email);

  // カレンダーID(メールアドレス)
  var calendarId = 'xxx@example.com';
  
  // トークンの取得
  var tokens = serverToken.addUser(calendarId).requestToken().getTokens();

  // イベント  
  var payload = {
    "start": {
      "date": "2018-03-07"
    },
    "end": {
      "date": "2018-03-09"
    },
    "summary": "test"
  };
  
  // リクエストの設定 
  var fetchOptions = {'method':'post','payload':JSON.stringify(payload),'contentType':'application/json','headers':{Authorization:"Bearer "+tokens[calendarId].token}};

  //リクエストURLを作成  
  var url = "https://www.googleapis.com/calendar/v3/calendars/" + calendarId + "/events";

  //fetch
  var res = UrlFetchApp.fetch(url, fetchOptions);

気をつけるのは、

  • payloadをきちんとJSONにすること
  • プロジェクトページでAPIを有効にすること

です。(私が全く気づかずはまったところ)

payloadの内容に関してはGoogleのAPIページ右の「Try this API」で実際に試すと間違いがないです。
https://developers.google.com/calendar/v3/reference/events/insert

参考

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~

thank's @soundTricker
いつも参考にさせていただいてます。

14
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?