专注时间面板

使用滴哒清单的时间马上就要一年了,可以说它足够优秀。最喜欢的一点就是任务与专注相结合,软件本身也提供了统计面板可以简单回溯自己在某些事情上具体花费了多长时间,但是有几个特别想要的功能。

  • 显示每天专注的时间情况,精确时间段、以及中间被打断的情况(可以追踪自己效率最高的时间段,后续可以更合理地安排任务)
  • 显示某个清单、某个任务的历史专注情况(主要还是想看看一些事情有没有半途而废,以及计算投入产出比)

软件本身暂时还没有提供,所以就写了一个简易面板,下面是效果图。

效果图

每日专注统计

每日专注面板
绿色表示专注中,红色表示被打断,每一条柱子表示1次专注

专注历史

清单任务历史专注
可以查看指定任务或清单的总专注时间和具体的专注情况

整体效果图

专注分析面板

如何实现

保存每次专注的数据

主要使用Surge软件(Mac和iPhone都需要它)来实现,写了一个小模块外加一段JS即可捕获特定接口的请求数据。
模块代码

1
2
3
4
5
#!name=TickTick Archiver
#!desc=Save ticktick to own server

[Script]
http-request ^https://(api\.)?dida365\.com/api/v2/batch/pomodoro requires-body=true, max-size=0, debug=true, script-path=Scripts/ticktick.js

ticktick.js

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
32
33
34
35
36
37
38
39
let body = $request.body;
let headers = $request.headers;
let url = 'https://www.example.com/pomo/archive';
console.log($request);

(async () => {
sendToOwnerServer(url).then((success) => {
if (success == true) {
$notification.post('番茄数据已保存', "", "");
return;
} else {
console.log('数据已上传失败');
return;
}
});
})().finally(() => {
$done();
});

async function sendToOwnerServer(url) {
let options = {
url: url,
headers: {
"Content-Type": "application/json",
"X-Device": headers['X-Device'],
},
body: body
};

return new Promise((resolve, reject) => {
$httpClient.post(options, function (error, response, data) {
if (error) {
resolve(false);
} else {
resolve(true);
}
});
});
};

导出历史专注

幸好官方App里面有导出历史数据的接口: https://api.dida365.com/api/v2/pomodoros?from=1626796800000&to=1626883200000,最主要的验证头是Authorization头,可以在上面的js脚本内获得或者开启抓包直接看Surge Dashboard,这个认证头的值有效期挺长的,对于我们导数据来说完全够用了,所以不需要去走登录获取token的流程。

以下为官方返回的数据

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
32
33
34
35
[
{
"id": "xxxxxxxxxxxxxxxxxxxxx",
"taskId": "xxxxxxxxxxxxxxxxxxxxx",
# tasks数组里面每一个value都是一个番茄内的一小段专注时间,他们之间的间隔也就是被打断时间了
"tasks": [
{
"taskId": "xxxxxxxxxxxxxxxxxxxxx",
"title": "任务系统开发",
"projectName": "加强版任务",
"startTime": "2021-07-21T08:35:45.000+0000",
"endTime": "2021-07-21T08:52:31.000+0000"
},
{
"taskId": "xxxxxxxxxxxxxxxxxxxxx",
"title": "任务系统开发",
"projectName": "加强版任务",
"startTime": "2021-07-21T08:52:50.000+0000",
"endTime": "2021-07-21T08:56:38.000+0000"
},
{
"taskId": "xxxxxxxxxxxxxxxxxxxxx",
"title": "任务系统开发",
"projectName": "加强版任务",
"startTime": "2021-07-21T08:59:47.000+0000",
"endTime": "2021-07-21T09:04:12.000+0000"
}
],
"status": 1,
"startTime": "2021-07-21T08:35:45.000+0000",
"endTime": "2021-07-21T09:04:12.000+0000",
"pauseDuration": 207,
"etag": "r6oua3lo"
}
]

有用的非公开接口

当然还有几个有用的接口,分享几个自己用到的

思考

专注与控制力才是一切的关键,统计数据只是辅助更重要的是从数据中发现不足并改进自己。