Toggl API & Pyhon -> Monthly Timeline Report
Toggl est utilisé pour l'auto-analyse de l'efficacité commerciale. Le projet est créé de manière appropriée sur la base de Getting Things Done, et la classification de client qui lui est associée est Eisenhower Matrix. / eisenhower-matrix /) est classé dans le 1er au 4e quadrant.
Le rapport du chef de famille est également bon, mais je voulais voir les résultats par jour et heure dans une liste mensuelle. Et je viens de commencer à étudier Python.
L'environnement est le suivant.
Maintenant, essayez de créer un rapport avec l'API Toggl et Python.
J'ai cherché sur Google et j'ai principalement fait référence à cet article et à cette référence.
Référence:
C'est un travail difficile basé sur le code de référence.
Toggl_API+Python.py
# -*- coding: utf-8 -*-
import requests
from requests.auth import HTTPBasicAuth
import json
import datetime
from datetime import datetime as dt
from dateutil.parser import parse
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
#Préparation de Dataframe
pd.set_option('display.max_colwidth', 20)
df = pd.DataFrame([[0], [0], [0], [0], [0], [0]]).T
df.columns = ["description", "category", "client", "date", "month", "duration"]
_api_token = '{Clé}' # ここにAPICléを入れる
for pagenumber in range(1000):
pn = np.str(pagenumber + 1)
_params = {
'user_agent': '{adresse mail}', # ここにTogglに登録しているadresse mailを入れる
'workspace_id': '{ID}', #Entrez votre identifiant d'espace de travail ici
'since': '2016-11-01', #Premier rendez-vous
'until': '2016-11-30', #Dernier rendez-vous
'page': pn}
r = requests.get('https://toggl.com/reports/api/v2/details', auth=HTTPBasicAuth(_api_token, 'api_token'), params=_params)
#L'acquisition des données
data = r.json()
Data = data['data']
if len(Data) == 0:
break
row = 0
for i in Data:
dataset = Data[row]
data01 = dataset['description']
data02 = dataset['project']
data03 = dataset['client']
start = dataset['start']
sd = start[0:10] # Start Date
st = start[11:19] # Start Time
s = sd + ' ' + st
tdatetime = dt.strptime(s, '%Y-%m-%d %H:%M:%S')
date_s = dt.strptime(s, '%Y-%m-%d %H:%M:%S')
end = dataset['end']
ed = end[0:10] # End Date
et = end[11:19] # End Time
e = ed + ' ' + et
date_e = dt.strptime(e, '%Y-%m-%d %H:%M:%S')
dur = date_e - date_s # Duration
data04 = sd
data05 = tdatetime.month
data06 = dur
#Quantifier les heures de début et de fin
data_s_h = datetime.datetime.strptime(str(date_s.hour), '%H')
data_s_m = datetime.datetime.strptime(str(date_s.minute), '%M')
data_e_h = datetime.datetime.strptime(str(date_e.hour), '%H')
data_e_m = datetime.datetime.strptime(str(date_e.minute), '%M')
#Convertir en minutes
TimeVal_s = (data_s_h.hour * 60) + data_s_m.minute
TimeVal_e = (data_e_h.hour * 60) + data_e_m.minute
ClientV = dataset['client']
#Quantifier la date
DayV = datetime.datetime.strptime(str(tdatetime.day), '%d')
y = DayV.day
#Séparez les couleurs avec le client
for i in range(TimeVal_s, TimeVal_e):
if ClientV == 'Quadrant_4': #Quatrième quadrant(Not Importand & Not Urgent)Est bleu
ColorV = 'b'
elif ClientV == 'Quadrant_3': #Troisième quadrant(Not Importand & Urgent)Est vert
ColorV = 'g'
elif ClientV == 'Quadrant_2': #Deuxième quadrant(Importand & Not Urgent)Est jaune
ColorV = 'y'
elif ClientV == 'Quadrant_1': #Premier quadrant(Importand & Urgent)Est rouge
ColorV = 'r'
else:
Client = 'k' #Noir sans réglage
#dessin
plt.plot(i, y)
plt.scatter(i, y, c=ColorV, alpha = 0.2, marker = "s")
TMPtime1 = (str(tdatetime.hour) + ":" + str(tdatetime.minute) + ":" + str(tdatetime.second))
TMPtime2 = datetime.datetime.strptime(TMPtime1, '%H:%M:%S')
series_add = pd.Series([data01, data02, data03, data04, data05, data06], index=["description", "category", "client", "date", "month", "duration"], name=row + 1)
df = df.append(series_add)
row += 1
#Supprimer la ligne factice
df = df.drop(0)
plt.grid(True)
#l'axe des x correspond à 1 jour(0~60*24)Étiqueter toutes les heures
plt.xlim([0,1440])
plt.xticks([60,120,180,240,300,360,420,480,540,600,660,720,780,840,900,960,1020,1080,1140,1200,1260,1320,1380,1440], ["1:00","2:00","3:00","4:00","5:00","6:00","7:00","8:00","9:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00","24:00"],rotation =90,fontsize ="small")
#L'axe des y est étiqueté quotidiennement pendant un mois
plt.ylim([0,30])
plt.yticks([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31], ["31","30","29","28","27","26","25","24","23","22","21","20","19","18","17","16","15","14","13","12","11","10","9","8","7","6","5","4","3","2","1"], fontsize="small")
plt.style.use('ggplot')
plt.title("Monthly Timeline from Toggl")
plt.show()
#Résumé de sortie
monthly_sheet = df.pivot_table("duration", aggfunc="sum", fill_value=0, index="category", columns="date").T
monthly_sheet.to_csv("Summary.csv", sep=",")
print monthly_sheet
Pour le moment, j'ai obtenu le résultat que j'avais imaginé. De la couleur, vous pouvez voir qu'il n'y a pas de place. Ou plutôt, je saute l'enregistrement du milieu.
Pour le moment, les bases de ce que je voulais faire étaient terminées. Cependant, le contenu et l'apparence sont toujours sales. Ce n'est pas beau car il y a beaucoup de gaspillage et d'inefficacité. Cela prend trop de temps à courir. (Probablement parce que les données sont dessinées une par une dans un diagramme de dispersion) Étudiera.
Si vous connaissez une méthode plus cool et plus intelligente, j'apprécierais que vous puissiez m'apprendre.
Merci de votre collaboration.
[END]