PythonでTogglのAPIをたたく

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

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

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

## APIをたたくとき必要なもの
- api token: 
  ブラウザで[toggl My Profile](https://www.toggl.com/app/profile) にアクセスして取得  
**準備しておいたほうがいいもの**
- workspace_id: プロジェクトの一覧を取得するときに使用
- project_id: プロジェクトを指定するときに使用．プロジェクト名は使えない？

## workspace_idの取得
~~~python: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の辞書を作成

~~~python: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を取得
~~~python: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']
~~~

## タイマーをストップ
~~~python: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
~~~

## タイマーをスタート
~~~python: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)
~~~

## プロジェクトを作成する
~~~python: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
~~~

## 日付を指定して，レポートを取得する
~~~python: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()
~~~



## 参考
- [PythonからToggl APIを呼ぶ](https://qiita.com/hiroki976/items/e11d4a15487028a36065)   
- [Toggl API Documentation](https://github.com/toggl/toggl_api_docs)
- [Toogl APIを用いてデータをGoogleスプレッドシートに出力する](https://qiita.com/CreateFecundity/items/6e2b24ef0dd3a4f4c234)

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