【经验分享】利用 Dataview 实现数据统计功能,包含使用时间,字数统计等

查询了非常多的文档和教程,发现没啥人搞这个无聊的功能,于是自己尝试实现。
原先是想利用官方 api 的字数统计然后遍历文件实现的,但是发现 better-word-count 插件提供了现成且功能更多的 api,就该用该插件了。

步骤

  1. 安装 dataview,并开启 dataview js 功能。

  2. 安装 better-word-count 插件:

  3. [可选] 开启 better-word-count 选项中的 Collect Statistics 选项卡,可用于日级别的统计,例如每日编辑 word, characters 等。

  4. cv

// 查询第一个文件的创建日期
const firstFile = dv.pages("").file.sort(t = t.cday)[0];

const daysUsed = Math.floor((new Date() - firstFile.ctime) / (1000 * 60 * 60 * 24));
const hoursUsed = daysUsed * 24;

const totalPages = dv.pages().length;

// better-word-count api
const bwc = app.plugins.plugins["better-word-count"].api;
const totalWords = await bwc.getTotalWords();
const totalCharas = await bwc.getTotalCharacters();

// yyyy-mm-dd
const now = new Date().toISOString().slice(0, 10).replace('T', ' ');
const dateStr = `累计至 ${now} :`;

dv.paragraph(dateStr);
dv.list([
 `使用 **Obsidian** **${daysUsed}** 天,**${hoursUsed}** 小时`,
 `创建 **${totalPages}** 篇文章,总记 **${totalWords}** words, **${totalCharas}** characters`
]);
 
const todayWords = bwc.getDailyWords();
const todayCharas =  bwc.getDailyCharacters();
dv.paragraph(`今日编辑 ${todayWords} words, ${todayCharas} characters`)

效果展示:

better-word-count api 还提供了其他可实现统计的功能,详细可查 better-word-count/src/api/api.ts at master · lukeleppan/better-word-count · GitHub

1 个赞

用的什么字体?挺好看的

Maple

1 个赞

maple 的中文间距太大,看来只适合代码,我又卸载了

中文字体间距,github可以自定义构建的,或者我的分享里有构建好的,你可以试试