僕は仕事時間の計測にtogglというサービスを利用している。
このサービスにはWebAPIが用意されているので、pythonでこれを実行するスクリプトを書いてみた。
import requests import pprint import sys API_TOKEN = 'your-api-token' def get_toggl(): headers = {'content-type': 'application/json'} auth = requests.auth.HTTPBasicAuth(API_TOKEN, 'api_token') return requests.get('https://www.toggl.com/api/v8/time_entries/current', auth=auth, headers=headers) if __name__ == '__main__': current = get_toggl() if current.status_code != 200: print("togglの情報取得に失敗しました") else: current_json = current.json() if current_json['data']: pprint.pprint(current_json['data']) else: print('There is no tasks.')
上記を実行すると、togglのAPIを実行して現在実行中のタスクの情報を取得できる。
今回はpython3のrequestsモジュールを使用してAPIとのやり取りを行った。
togglのAPIを使用するためには、アカウントごとに割り振られたAPIトークンが必要になる。
ブラウザからtogglにログインし、アカウントプロフィールページの下の方にあるので、それをコピペする。
APIのアクセス先についてはtogglのAPIのドキュメントがあるのでそちらを参照してもらいたい。
今回は現在実行中のタスクを取得するAPIだったが、他にもタスクの開始・停止もでき、簡単に自前でアプリが作れる。
今回の実装で手間取ったのが、togglのAPIがAPIトークンと「api_token」という文字列をセットにしてベーシック認証を行っていたこと。
これは「api_tokenというキーにAPIトークンをセットしてリクエストを送る」のではなく、「ユーザをAPIトークン、パスワードをapi_tokenにして認証する」という仕様らしく、気がつくのにものすごく時間を使った。
認証なので仕方ないのかもしれないが、できればパラメータとしてAPIトークン受け取るなどしてほしかった。
あと、togglのAPIはjson形式のレスポンスに対応しているので、ヘッダーで指定している。
リクエストさえ送れてしまえば後は簡単。
status_codeを読んで通信が正常だったかの確認をして、受け取った結果から内容を読み取れば良い。
最終的に「data」というキーの中に結果が格納されているので、これを表示させている。
今回はこれ以外に、タスクの開始と停止のAPIを組み合わせてtogglのタスクをトグルするアプリを実装した。
そちらについてはまた気が向いたらということで。