初めに
インターンの出勤予定をGoogle Calendarで記載しようとした時に、毎週決まった時間に入力するなら一括でできないかと思いました。
準備するもの
- カレンダーID
カレンダーIDの取得方法
- Google Calendarにアクセスし、左側のサイドバーから「マイカレンダー」をクリックします。
- カレンダーの一覧から、取得したいカレンダーの右側にある三点リーダーをクリックします。
- 「設定と共有」をクリックします。
- 「カレンダーの設定」のページが開かれますので、下にスクロールして「カレンダーのID」を確認できます。
書いていきます!
今回は2023年3月の月、水、金曜日に9:00~15:00で予定を入れるコード例となります。
必要に合わせて変更してください。
Googlea Apps Scriptに以下コードを貼り付けます。
function addSchedule() {
// カレンダーIDを指定する
var calendarId = '取得したカレンダーID';
// 予定を作成する月を指定する
var year = 2023;
var month = 3;
// 月曜日、水曜日、金曜日を取得する
var days = [];
for (var day = 1; day < 32; day++) {
try {
var date = new Date(year, month - 1, day);
} catch (e) {
break;
}
if ([1, 3, 5].indexOf(date.getDay()) !== -1) {
days.push(Utilities.formatDate(date, 'Japan', 'yyyy-MM-dd'));
}
}
// 予定を作成する
var service = CalendarApp.getDefaultCalendar();
for (var i = 0; i < days.length; i++) {
var start = new Date(days[i] + 'T09:00:00');
var end = new Date(days[i] + 'T15:00:00');
var event = service.createEvent('予定', start, end, {location: 'リモート', description: 'リモートワーク'});
}
}
実行してご自身のカレンダーに予定が追加されたことを確認してみてください!
終わりに
Pythonで同じことをやろうとすると、GCPでアカウントを作成して、プロジェクトを作成して、Google Calendar APIを有効にして、サービスアカウントを取得して...
とかなりめんどくさくて、GASの便利さを実感しますね。
以下に上記のGASのコードと同じ内容のPythonコードを貼っておくので、気になる人は試してみてください!
from google.oauth2 import service_account
from googleapiclient.discovery import build
from datetime import datetime, timedelta
# サービスアカウントキーのパス(ご自身のサービスアカウントキーのjsonファイルへのパスに変えてください)
KEY_FILE_LOCATION = 'path/key.json'
# 認証情報の取得
creds = service_account.Credentials.from_service_account_file(KEY_FILE_LOCATION, scopes=['https://www.googleapis.com/auth/calendar'])
# Google Calendar APIのオブジェクトを作成
service = build('calendar', 'v3', credentials=creds)
# 予定を作成する月を指定する
year = 2023
month = 3
# 月曜日、水曜日、金曜日を取得する
days = []
for day in range(1, 32):
try:
date = datetime(year, month, day)
except ValueError:
break
if date.weekday() in [0, 2, 4]:
days.append(date.strftime('%Y-%m-%d'))
# 予定を作成する
for day in days:
event = {
'summary': '予定',
'location': 'リモート',
'description': 'リモートワーク',
'start': {
'dateTime': f'{day}T09:00:00',
'timeZone': 'Japan',
},
'end': {
'dateTime': f'{day}T15:00:00',
'timeZone': 'Japan',
},
'reminders': {
'useDefault': True,
},
}
event = service.events().insert(calendarId='ご自身のカレンダーID', body=event).execute()