738 words
4 minutes
Google Apps Script を用いて Toggl のデータを Google カレンダーに移行する
2020-02-25
2020-12-21

1. はじめに#

筆者は,タイムトラッキングアプリである Toggl を日常的に愛用しています。しかし,記録データはワークフローの関係上 Google カレンダーで一括管理したい。そこで,本記事では Google Apps Script を用いて Toggl に記録されているデータを Google カレンダーに一括移行するスクリプトについて記述する。

2. 要件定義#

実現したい要件として,以下の 2 つが挙げられます。

  1. Toggl に記録されている Time Entrys を Google カレンダーに移行する
  2. Toggl に記録されている Time Entrys を削除する

3. 事前準備#

事前準備として,以下の 2 つを取得する必要があります。

  • TOGGL_API_TOKEN
  • GOOGLE_CALENDAR_ID

TOGGLAPI_TOKEN は,_Profile settings に表示されているので記録しておきます。

GOOGLE*CALENDAR_ID は,*設定と共有_ に表示されているので記録しておきます。

4. 実装#

先行記事Toggl API doc を参考に実装したソースコードを以下に示します。[TOGGL_API_TOKEN][GOOGLE_CALENDAR_ID] は,上記で取得した TOGGL_API_TOKENGOOGLE_CALENDAR_ID に置換します。

function main() {
const TOGGL_API_TOKEN = '[TOGGL_API_TOKEN]'
const GOOGLE_CALENDAR_ID = '[GOOGLE_CALENDAR_ID]'
// 終了時刻が設定されている + タグが付いていない Time Entrys を取得する
const timeEntrys = JSON.parse(
UrlFetchApp.fetch(
(url = 'https://www.toggl.com/api/v8/time_entries'),
(params = {
method: 'GET',
headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') },
muteHttpExceptions: true,
}),
),
).filter(function (x) {
return x.stop && !x.tags
})
const calApp = CalendarApp.getCalendarById(GOOGLE_CALENDAR_ID)
timeEntrys.forEach(function (x) {
// Google Calendar にイベントを追加する
calApp.createEvent((title = x.description), (startTime = new Date(x.start)), (endTime = new Date(x.stop)))
// Time Entrys にタグを追加する
UrlFetchApp.fetch(
(url = 'https://www.toggl.com/api/v8/time_entries/' + x.id),
(params = {
method: 'PUT',
headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') },
contentType: 'application/json',
payload: JSON.stringify({ time_entry: { tags: ['Logged'], tag_action: 'add' } }),
muteHttpExceptions: true,
}),
)
})
}

Toggl の Free プランでは,Time Entrys を Delete する API が叩けないため,要件の「② Toggl に記録されている Time Entrys を削除する」を満たすことができません。そこで,Google カレンダーに移行した Time Entrys には Logged タグを付与し,Logged タグが付いている Time Entrys は Google カレンダー に移行しない仕様としました。

5. 運用#

新しい Google Apps Script のプロジェクトを作成し,上記のソースコードをコピー&ペーストします。初回実行時は認証手続きが必要になるので,認証手順記事を参考に認証します。また,トリガーを設定しておくことで,Toggl に記録されている Time Entrys を自動的に Google カレンダーへ移行することができます。

6. おわりに#

ここまで,本記事では Google Apps Script を用いて Toggl に記録されているデータを Google カレンダーに一括移行するスクリプトについて記述してきました。Google Apps Script と Google が提供しているサービスを組み合わせると様々なことができるので,Google Apps Script を触ったことない方は Google Apps Script で遊んでみてほしいです。