requestsでToggl APIを使ってみる。

僕は仕事時間の計測に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のAPIAPIトークンと「api_token」という文字列をセットにしてベーシック認証を行っていたこと。
これは「api_tokenというキーにAPIトークンをセットしてリクエストを送る」のではなく、「ユーザをAPIトークン、パスワードをapi_tokenにして認証する」という仕様らしく、気がつくのにものすごく時間を使った。 認証なので仕方ないのかもしれないが、できればパラメータとしてAPIトークン受け取るなどしてほしかった。

あと、togglのAPIjson形式のレスポンスに対応しているので、ヘッダーで指定している。

リクエストさえ送れてしまえば後は簡単。
status_codeを読んで通信が正常だったかの確認をして、受け取った結果から内容を読み取れば良い。
最終的に「data」というキーの中に結果が格納されているので、これを表示させている。

今回はこれ以外に、タスクの開始と停止のAPIを組み合わせてtogglのタスクをトグルするアプリを実装した。
そちらについてはまた気が向いたらということで。