Toggl Track の記録を FileMaker に取り込む

僕はタイムトラッキングに Toggl Track を利用している。

Toggl: Time Tracking Software, Project Planning & Hiring Tools
https://toggl.com/

Toogl Track はログを書き出す Export 機能がある。僕はそれを FileMaker に取り込んで管理したい。しかし毎回ウェブでダウンロードするのは手間なので、API を使うことで自動的にダウンロードできるようにしたい。FileMaker Server を利用すれば例えば毎日、前日のログをダウンロードして情報を蓄積できるようになる。

環境:macOS Catalina Version 10.15.6(英語環境)、FileMaker Pro 18

(1)「My Profile」で API Token を確認する。

My Profile - Toggl Track
https://track.toggl.com/profile/

(2)workspace_id を確認する。「Reports」ページ等の URL に表示される7桁の数字だ。

Reports
https://track.toggl.com/reports/summary/{workspace_id}

(3)まずは Mac の curl コマンドで、Toggl API を使ってレポートを取得してみよう。

Mac のターミナルで以下のコマンドを実行し、レポートを取得する。

$ curl -u {API Token}:api_token -X GET "https://api.track.toggl.com/reports/api/v2/summary?workspace_id={workspace_id}&user_agent={メールアドレスもしくはアプリケーション名}&since={開始日}&until={終了日}"

user_agent 部分は適当な文字列(api_test など)でいい。

開始日と終了日は YYYY-MM-DD のフォーマットで記入する。開始日と終了日を指定しなければ、4~6日前あたりの記録が取得される。

時刻(開始日時)は日本時間で表示される。

所要時間はミリ秒で取得される。見やすくするために変換が必要だ(後述)。

(4)3の結果では JSON が見にくいので jq コマンドをインストールする。

$ brew install jq

改めて3のコマンドを jq コマンドに渡してみる。

$ curl -u {API Token}:api_token -X GET "https://api.track.toggl.com/reports/api/v2/summary?workspace_id={workspace_id}&user_agent={メールアドレスもしくはアプリケーション名}&since={開始日}&until={終了日}" | jq

これで見やすくなったはずだ。

(5)FileMaker に取り込むには、Insert from URL スクリプトステップを使う。

僕が今回欲しいデータは日付、プロジェクト名、所要時間だ。

時刻(開始日時)は 2023-02-21T11:24:21 のようなフォーマットで取得されるので、2023-02-21 の部分だけ抜き出したい。所要時間はミリ秒表示なので、一旦 H:MM:SS という表示に変換し、さらに H 時間 MM 分に変換しよう。

そういうわけで、FileMaker で以下のフィールドを作成しておく。

・local_start
・project
・time
・_HMMSS
・_Date
・_時間分

_ で始まるフィールドは、Toggl API の素のデータではなく、FileMaker で計算し直したフィールドであることを指すものとする。

その上で以下のようなスクリプトを作成する。

# Toggle API 用の変数設定。
Set Variable [ $workspace_id ; Value: "{workspace_id}" ] 
Set Variable [ $api ; Value: "{API Token}" ] 
Set Variable [ $since ; Value: GetAsText ( Year ( Get ( CurrentDate ) - 1) ) & "-" & GetAsText ( Month ( Get ( CurrentDate ) - 1) ) & "-" & GetAsText ( Day ( Get ( CurrentDate ) - 1) ) ] 
Set Variable [ $until ; Value: GetAsText ( Year ( Get ( CurrentDate ) - 1) ) & "-" & GetAsText ( Month ( Get ( CurrentDate ) - 1) ) & "-" & GetAsText ( Day ( Get ( CurrentDate ) - 1) ) ] 
# 
# Toogl API から取得。
Insert from URL [ Select ; With dialog: Off ; Target: $result ; "https://api.track.toggl.com/reports/api/v2/summary?workspace_id=" & $workspace_id & "&user_agent=api_test&since=" & $since & "&until=" & $until & "\"" ; cURL options: "-u " & $api & ":api_token" ] 
# 
# JSON の値が存在する場合のみスクリプトを実行するため、JSON の値の数を数える。そのための変数 ItemCount を設定。
Set Variable [ $ItemCount ; Value: ValueCount ( JSONListKeys ( $result ; "" ) ) ] 
# 
Set Variable [ $i ; Value: 0 ] 
# 
If [ $ItemCount > 0 ] 
	# 
	Loop
		New Record/Request
		Set Field [ Table::project ; JSONGetElement ( $result ; "data[" & $i & "].title.project" ) ] 
		Set Field [ Table::time ; JSONGetElement ( $result ; "data[" & $i & "].time" ) ] 
		Set Field [ Table::local_start ; JSONGetElement ( $result ; "data[" & $i & "].items[0].local_start" ) ] 
		Set Field [ Table::_HMMSS ; GetAsTime ( Div ( Table::time ; 1000 ) ) & SerialIncrement ( ".00" ; Mod ( Table::time /10 ; 100 ) ) ] 
		Set Field [ Table::_Date ; Left ( Table::local_start ; 10 ) ] 
		Set Field [ Table::_時間分 ; Left ( Table::_HMMSS ; 1 ) & "時間" & Middle ( Table::_HMMSS ; 3 ; 2 ) & "分" ] 
		# 
		Set Variable [ $i ; Value: $i + 1 ] 
		# 
		# プロジェクト名が取得できなくなったらループを抜ける。
		Exit Loop If [ JSONGetElement ( $result ; "data[" & $i & "].title.project" ) = "" ] 
	End Loop
	# 
End If

これで以下のようなレコードが作成されるようになる。JSON を整形してうまく取得するのには苦労した。

このスクリプトを実行すれば、指定範囲の日付でプロジェクトとその所要時間の一覧を取得できるようになった。

あとは、FileMaker Server のスケジュールに登録すれば毎日前日の記録を取得できるし、それを Slack 等に投げたりもできるようになる。

ただし、あまり長い期間を指定するとうまく記録の取得ができなかった。やはり毎日、前日分の記録だけを取得していくという手法が良いようだ。

それとタグごとの記録を Toggl API で取得する方法は分からなかったが、とりあえず今回は不要なので良しとした。

参考:
Overview | Track Your Way
https://developers.track.toggl.com/docs/

Mac に jq コマンドのインストール - メモログ
https://blog.memobog.net/2016/01/28/mac-%E3%81%AB-jq-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/

GASを使ってGoogleスプレッドシートからFilemakerにデータを持ってくる方法 - Qiita
https://qiita.com/unkonow/items/60fab55aac218155dde5

FileMaker 16 の新機能 「JSON関数」 - YWCのFileMaker(ファイルメーカー)情報 | YWCのFileMaker(ファイルメーカー)情報
https://ywc.com/filemaker/?p=3908

テキスト関数「JSONGetElement」 | FM Paradise
https://filemaker.raquel.jp/contents/text/json_getelement.html

FileMaker 16でJSONを解析する |
https://notonlyfilemaker.com/2017/05/parsing-json-filemaker-16/

Convert Milliseconds to HH:MM:SS.hh
https://community.claris.com/en/s/question/0D50H00006h9DNeSAM/convert-milliseconds-to-hhmmsshh

SerialIncrementについて | カワイ事務機株式会社
https://kawai-j.co.jp/filemaker/24885/serialincrement/

SerialIncrement
https://fmhelp.filemaker.com/help/18/fmp/en/index.html#page/FMP_Help/serialincrement.html

この記事が気に入ったらサポートをしてみませんか?