Google Apps Script(GAS)でAtCoderのサイトからコンテストの開催予定を取得して、Googleカレンダーに自動で追加するスクリプトを紹介します。

概要

AtCoderのサイトからコンテストの開催予定を取得して、Googleカレンダーに自動で追加するスクリプトです。
すでに同様のコンテストがGoogleカレンダーに登録されている場合は、重複して登録されないようになっています。

Githubのレポジトリは↓。
https://github.com/amanekk/atcoder-schedule

AtCoder Google Calendar

利用方法

1. claspを導入

claspとは、ローカルでGoogle Apps Script(GAS)のソースを管理するためのCLIツールです。 以下のコマンドで導入することができます。

npm install -g @google/clasp

2. Google Drive上でGASのプロジェクトを作成して、scriptIDをルート下の.clasp.jsonに記載する。

Google Drive上のGASプロジェクトとローカルのフォルダを紐づけるために、ルート下に以下のように.clasp.jsonを作成します。

{
  "scriptId":"************",
  "rootDir": "src"
}

scriptIDは、Google Drive上でGASのプロジェクトの設定から確認できます。

3. Calendar IDを取得して、src/config_json.htmlに記載

AtCoderの開催予定を追加したいGoogleカレンダーのCalendar IDを以下のようにsrc/config_json.htmlに記載します。
GASの仕様としてJSONファイルを読み込むのには手間がかかるので、代わりにHTMLファイルを作成し、その中にJSONの書式でGoogle Caledar IDを記載して、それを読み込むようにしています。

{
    "calendar_id": "************"
}

Calendar IDは、Googleカレンダーの設定画面から確認することができます。

4. GASのプロジェクトにファイルをpush

clasp login
clasp push

上記のコマンドで、/src以下のファイルがGoogle Drive上のGASプロジェクトにアップロードされます。

5. デプロイし、get_atcoder_schedule.tsのmain関数に時間によるトリガーを設定する。

Google Drive上で本GASプロジェクトのデプロイを行なったのち、適宜トリガーを設定すると、設定した時間ごとに勝手に実行されるようになります。