LoginSignup
14
12

More than 5 years have passed since last update.

Toogl APIを用いてデータをGoogleスプレッドシートに出力する

Last updated at Posted at 2016-12-11

環境

  • Windows 10 (Windows 7でも動作確認済みです)
  • Python 2.7.12

前提

TogglのAPIを使う準備

1.TogglのMy profile(Profile settingsをクリック)のページの下部に記載されているAPI_tokenを取得
2.以下のコードに取得したAPI_tokenを入力して回し、workspace IDを取得

workspace_id_export.py
# -*- coding: utf-8 -*-

#workspaceIDの取得
import requests

#TogglのMy profileから、API_Tokenを取得(入力)
_api_token = '(取得したAPI_Token)'

r = requests.get('https://www.toggl.com/api/v8/workspaces',
                 auth=(_api_token, 'api_token'))

#JSON形式でデータのエクスポート
data = r.json()

#JSONファイルからidの取得
Data = data[0]
id = Data['id']

#workspaceIDの出力
print id

Googleスプレッドシートにデータをエクスポートする準備

1.PythonからGoogleドライブにアクセスするための認証
 PythonでGoogleSpreadSheetをいじる
 を参考に、Google Developers Consoleから設定
2.ダウンロードしたJSONファイルの名前を”Drive_API_Project”に変更
3.出力させるGoogleスプレッドシートのキーを取得

キーは、URL https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxx/edit の xxxxxxxxxxxxxxxx の部分です。

参照:Google Apps Script で Spreadsheet にアクセスする方法まとめ

Togglからデータをスプレッドシートに出力させる

Toggl_data_export.py
# -*- coding: utf-8 -*-

import requests
from requests.auth import HTTPBasicAuth
import json
from json import loads
import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime as dt

#Google SpreadSheetへのアクセス
scope = ['https://spreadsheets.google.com/feeds']

#Google SpreadSHeetのキー(入力)
doc_id = '出力させるスプレッドシートのキーを入力'
path = os.path.expanduser("Drive_API_Project.json")

#Googleアカウントの認証
credentials = ServiceAccountCredentials.from_json_keyfile_name(path, scope)
client = gspread.authorize(credentials)
gfile = client.open_by_key(doc_id)

# データをエクスポートするシートの選択(シート名を変更)
wsh = gfile.worksheet(出力させるスプレッドシートのシート名)

#TogglのAPIの認証キー(入力)
_api_token = '(API tokenを入力)'

#Togglのデータ取得設定
_params = {
    'user_agent': '(登録しているメールアドレスを入力)',   #登録しているメールアドレス(入力)
    'workspace_id': '(取得したworkspaceIDを入力)',      # TogglのworkspaceIDを入力(入力)
    'since': '2016-12-11',          # データ取得開始日(入力)
    'until': '2016-12-11',          # データ取得終了日(入力)
}

# TogglのAPIに接続
r = requests.get('https://toggl.com/reports/api/v2/details',
                     auth=HTTPBasicAuth(_api_token, 'api_token'),
                     params=_params)

# TogglのAPIに接続できているかの確認(200が出ればOK!)
#print r.status_code

# JSONファイルからのデータ取得
data = r.json()
Data = data['data']

row = 0
#データの取得
for i in Data:
    dataset = Data[row]

#タスク名の取得
    data01 = dataset['description']

#開始日、開始時間の取得
    start = dataset['start']
    sd = start[0:10]
    st = start[11:19]

#文字コードを日時に変換
    s = sd + ' ' + st
    date_s = dt.strptime(s,'%Y-%m-%d %H:%M:%S')

#終了日、終了時間、取得
    end = dataset['end']
    ed = end[0:10]
    et = end[11:19]

#文字コードを日時に変換
    e = ed + ' ' + et
    date_e = dt.strptime(e,'%Y-%m-%d %H:%M:%S')

#かかった時間の取得
    dur = date_e - date_s

#データの格納
    data02 = sd
    data03 = st
    data04 = ed
    data05 = et
    data06 = dur

#Google SpreadSheetに出力
    wsh.update_cell(row + 1,1,data01)
    wsh.update_cell(row + 1,2,data02)
    wsh.update_cell(row + 1,3,data03)
    wsh.update_cell(row + 1,4,data04)
    wsh.update_cell(row + 1,5,data05)
    wsh.update_cell(row + 1,6,data06)

#次の行に移動
    row += 1

#データの出力が終わったら'finish'がプリントされる    
print 'finish'
14
12
2

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
14
12