LoginSignup
12
10

More than 3 years have passed since last update.

PythonでTogglのAPIをたたく

Last updated at Posted at 2019-09-03

時間計測サービスtogglのapiをpythonでたたく.

モチベーション

時間を計測するのに,アプリを開いてボタンを押すのはメンドウ.
今後何かを使用して,自動化したい.
そのときのメモ.

概要

  • タイマーをスタートさせる
  • タイマーをストップさせる
  • プロジェクトを作成する
  • 日付を指定して,レポートを取得する

APIをたたくとき必要なもの

  • api token: ブラウザでtoggl My Profile にアクセスして取得
    準備しておいたほうがいいもの
  • workspace_id: プロジェクトの一覧を取得するときに使用
  • project_id: プロジェクトを指定するときに使用.プロジェクト名は使えない?

workspace_idの取得

main.py
def get_workspace_id(api_token):
    # get workspace id from api/v8/workspaces
    r = requests.get('https://www.toggl.com/api/v8/workspaces',
                     auth=(api_token, 'api_token'))

    data = r.json()
    Data = data[0]
    return Data['id']

project_idの取得

プロジェクト名,idの辞書を作成

main.py
def get_projects(api_token, work_space_id):
    # return projects dictionary
    p_dictionary = {}
    r = requests.get('https://www.toggl.com/api/v8/workspaces/{0}/projects'.format(work_space_id),
                     auth=(api_token, 'api_token'))

    data = r.json()
    for d in data:
        p_dictionary[d["name"]] = d["id"]
    return p_dictionary

実行中のエントリーのidを取得

main.py
def get_running_time_entry(self):
    # return time entry id of current entry
    r = requests.get('https://www.toggl.com/api/v8/time_entries/current',
                     auth=HTTPBasicAuth(self._token, 'api_token'))
    data = r.json()['data']
    if data is None:
        return None
    return data['id']

タイマーをストップ

main.py
def stop(self, running_time_entry_id):
    url = 'https://www.toggl.com/api/v8/time_entries/' + str(running_time_entry_id) + '/stop'
    r = requests.put(url, auth=HTTPBasicAuth(self._token, 'api_token'), headers=self._headers)

    print('time entry stop. HTTP status :', r.status_code)
    return r

タイマーをスタート

main.py
def start(self, description, project_id):
    params = {"time_entry": {"description": description, "pid": project_id, "created_with": "python"}}
    r = requests.post('https://www.toggl.com/api/v8/time_entries/start',
                      auth=HTTPBasicAuth(self._token, 'api_token'),
                      headers=self._headers,
                      data=json.dumps(params))
    print('time entry start. HTTP status :', r.status_code)

プロジェクトを作成する

main.py
def create_project(self, project_name):
    params = {"project":{"name": project_name, "wid": self._workspace_id, "is_private": True}}
    r = requests.post('https://www.toggl.com/api/v8/projects',
                      auth=HTTPBasicAuth(self._token, 'api_token'),
                      headers=self._headers,
                      data=json.dumps(params))
    print('create project. HTTP status :', r.status_code)
    self.p

日付を指定して,レポートを取得する

main.py
def get_reports(self, mail_address):
    params = {
        'user_agent': mail_address,
        'workspace_id': self._workspace_id,
        'since': '2019-09-11',
        'until': '2019-09-11',
    }
    r = requests.get('https://toggl.com/reports/api/v2/details',
                     auth=HTTPBasicAuth(self._token, 'api_token'),
                     params=params)
    json_r = r.json()

参考

終わりに

toggl_api_docsはわかりやすかったと思う.もちろんログ一覧を取得するなど他の機能もたくさんある.
自動化でentryできるようにしたい
ソースコードは st34-satoshi/toggl-api

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10