从零搭建Obsidian每日日记工作流保姆教程

之前写教程是最耗时间,一篇教程写下来至少得要一两个小时,如果添加配图的话则需要更多的时间。现在有了AI,反面技术教程是最最好写的,因为都让AI折腾让AI写了,不否认,这篇教程完全是AI写的。这篇AI教程,只是这段时间我用obsidian结合workbuddy折腾的结果展示出来罢了!不喜勿喷!

效果:每天点一下,自动生成带 日期、农历、时间、位置、天气、温度、每日一言 的日记,并套好一套「记事 + 对账 + 新知 + 心情 + 明天」的六栏模板。 适用:Obsidian 桌面版(Windows / macOS / Linux 均可)。需要联网。


一、先装上两个插件

  1. 打开 Obsidian → 设置 → 第三方插件 → 关闭「安全模式」。

  2. 浏览 → 搜索并安装 Templater(作者 SilentVoid),装完启用。

核心「日记」插件是 Obsidian 自带的,不用装,待会直接配置。


二、建好目录结构

在你的库根目录,建下面两级文件夹(名字照抄,后面配置要对应):

你的库/
├── 01-每日一志/        ← 日记成品都放这
├── 06-Templater/       ← 模板仓库
│   └── Daily.md        ← 日记模板(下一步创建)
└── 07-Scripts/         ← 脚本文件夹
    └── weather.js      ← 天气脚本(下一步创建)

数字前缀是为了让目录按你的习惯排序,可改,但后面配置要跟着改。


三、配置核心「日记」插件

设置 → 日记(Daily notes),填三项:

设置项 填什么
新建文件位置 留空
日期格式 01-每日一志/YYYY/YYYY-MM/YYYY-MM-DD -ddd
模板文件位置 06-Templater/Daily
  • YYYY / YYYY-MM 会自动建「年 / 月」两级子文件夹。

  • ddd 是星期,文件名会变成 2026-10-15 -周四 这种。

  • 这条插件只负责按命名建文件、把模板原文塞进去,真正的「填数据」是下一步 Templater 干的。


四、配置 Templater(最容易出错的一步)

设置 → Templater,逐项设置:

设置项 填什么 说明
Template folder location 06-Templater 模板仓库
User Scripts folder 07-Scripts 这个文件夹里的每个 .js 会变成 tp.user.文件名 函数
Trigger Templater on new file creation Folder templates 新建文件时自动渲染模板
Command timeout 15(秒) 脚本要请求 4 个接口,5 秒偏紧,调大

在 Folder Templates 区域点「Add new」,填:

  • folder:01-每日一志

  • template:06-Templater/Daily.md

⚠️ 坑:Templater 大版本升级后,「Trigger on new file creation」会被重置成 none。症状是新建日记后满屏模板代码(<% ... %> 原样躺着)。以后升级完插件,先来这里看一眼开关还在不在。


五、放天气脚本 weather.js

打开 07-Scripts/weather.js,整文件替换为下面内容:

async function WeatherScript() {
  // ⚠️ 把下面三个 key 换成你自己在对应平台申请的(见下方「申请三个 Key」)
  const tencentKey = '你的腾讯位置服务KEY';
  const gaodeKey   = '你的高德开放平台KEY';
  const juheKey    = '你的聚合数据KEY';
​
  // 1. IP 定位(腾讯位置服务)→ 拿到行政区划码 adcode
  const ipResp  = await fetch('https://apis.map.qq.com/ws/location/v1/ip?key=' + tencentKey);
  const ipData  = await ipResp.json();
  const adcode  = ipData.result.ad_info.adcode;
​
  // 2. 天气查询(高德开放平台,extensions=all 取全天)
  const weatherResp = await fetch('https://restapi.amap.com/v3/weather/weatherInfo?key=' + gaodeKey + '&city=' + adcode + '&extensions=all');
  const weatherData = await weatherResp.json();
  const cast = weatherData.forecasts[0].casts[0];
​
  // 3. 农历查询(聚合数据万年历)
  const now = new Date();
  const dateStr = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate();
  const lunarResp = await fetch('https://v.juhe.cn/calendar/day?date=' + dateStr + '&key=' + juheKey);
  const lunarData = await lunarResp.json();
  const lunar = lunarData.result.data;
​
  return {
    位置: ipData.result.ad_info.province + '-' + ipData.result.ad_info.city + '-' + ipData.result.ad_info.district,
    天气: '🌅' + cast.dayweather + ' / 🌃' + cast.nightweather,
    温度: '🌅' + cast.daytemp_float + '℃ / 🌃' + cast.nighttemp_float + '℃',
    农历: lunar.lunarYear + '年' + lunar.lunar
  };
}
​
module.exports = WeatherScript;

脚本逻辑:① 腾讯 IP 定位拿 adcode → ② 用 adcode 查高德天气 → ③ 查聚合农历 → ④ return 一个带中文字段名的对象(位置 / 天气 / 温度 / 农历),模板照着取。

申请三个 Key(都免费,个人额度够用)

服务 申请地址 怎么建 key
腾讯位置服务 https://lbs.qq.com 控制台 → 我的应用 → 创建应用 → 添加 key → 勾选 WebServiceAPI
高德开放平台 https://lbs.amap.com 应用管理 → 创建应用 → 添加 key → 服务平台选 Web服务
聚合数据 https://www.juhe.cn 实名认证后 → 我的 API → 申请「万年历/日历」接口 → 拿到 key

把拿到的三个 key 分别贴进 weather.js 对应的三个变量里,保存。


六、写日记模板 Daily.md

打开 06-Templater/Daily.md,整文件替换为:

<%* const w = await tp.user.weather(); %>🌻日期🌻 : <% tp.file.creation_date("YYYY-MM-DD dddd") %>
🧧农历🧧 : <% w.农历 %>
⌚️时间⌚️ : <% tp.file.creation_date("HH:mm:ss") %>
🌍位置🌍 : <% w.位置 %>
☁️天气☁️ : <% w.天气 %>
🌡️温度🌡️:<% w.温度 %>
***
<%*
let 一言 = ''
let 来源 = ''
let 作者 = ''
await fetch('https://v1.hitokoto.cn/?c=d&c=h&c=i&c=j&c=k&c=f&c=g')
.then(response => response.json())
.then(data => {
一言 = data.hitokoto
来源 = data.from
作者 = data.from_who === null ? '佚名' : data.from_who
})
-%>
>[!note] 一言
><font color="#ABCD00" size=4.8><% 一言 %> —— 《<% 来源 %>》 · <% 作者 %></font>
​
***
# 📋 一句话总结今天
* 
***
# 📝 记事 · 一事一条,只记发生了什么
🌅 **早晨:** 
🌤️ **上午:** 
🌞 **中午:** 
🌆 **下午:** 
🌙 **晚上:** 
***
# 🔁 今日对账 · 每天至少一行,不许空
* **今天哪件事想回看**:
* **我怎么处理的 / 现在看**:
* **下次第一步**(一个动作,别写"我要注意"):
***
# 💡 今日新知 · 积玉碎金
* 
***
# 🌡️ 心情 · 感受与碎碎念
* 
***
# ➡️ 明天
* 
***

模板里两种标签:

  • <%* ... %>:只跑 JS,不往文件输出字(第一行先调脚本拿到 w 存着,后面复用)。

  • <% ... %>:把表达式结果写进文件。

  • tp.user.weather() 就是运行 07-Scripts/weather.js——函数名由文件名决定(weather.js → tp.user.weather),前面必须 await 等网络。

  • 一言用的是 hitokoto 公开 API,无需 key。


七、测试

  1. 命令面板(Ctrl/Cmd + P)→ 搜「打开今日日记」→ 回车。

  2. 等 3~5 秒(脚本要串行请求几个接口,正常)。

  3. 看到日期、农历、位置、天气、温度、一言都填好了,模板六栏也在,就成功了。

如果某篇日记之前建坏了(满屏代码),打开它 → 命令面板 → Templater: Replace templates in the active file 补渲染即可。


八、日常怎么填这套模板

生成完直接写,重点是「对账」这栏——它不是逼你每天找错,是逼你每天停一下、挑一件事回看:

栏 记什么 能空吗
📋 一句话 今天一句话锚点,允许写「平常一天」 必填
📝 记事 只记事实,按五个时段分段 可空
🔁 今日对账 挑一件事:我怎么处理的 → 下次怎么改 不许空
💡 新知 今天听到/看到/读到的,出处用 —— 标 可空
🌡️ 心情 感受,只写不评判 可空
➡️ 明天 明天计划,用普通列表,不打勾 可空

对账栏的兜底:平淡日子真想不出要改的,就写「今天没什么要改的」——这是判断,不是感受,允许。这栏的身份证是「下次第一步」,而且得是从今天某件事长出来的改进,不是明天的待办(待办去「明天」栏写)。


九、常见问题排查

症状 原因 解决
新建日记全是 <% ... %> 模板代码 Templater 触发被关(升级重置) 设置里把 Trigger on new file creation 开成 Folder templates;已建的用 Replace templates 命令补
报 Templater Error: Timeout 超时太短 Command timeout 调到 15 秒
农历/天气某项报错 对应 API key 过期或超额 把接口 URL(带 key)粘浏览器打开,看返回的 status / error_code 判断,去平台换 key
位置不对 IP 定位受代理/VPN/运营商影响 关代理重试,或接受偶尔漂移
一言没出现 hitokoto 偶发抽风 重跑一次 Replace templates 命令

就这样。配置一次,之后每天点一下就完事。

评论区

共 9 条评论
  1. 老刘博客 的头像
    老刘博客 Lv10.莫逆之交
    obsidian都被你玩出来花了,我还是原样呢,对我来说,它就是md编辑器
    1小时前
  2. Sheep5 的头像
    Sheep5 Lv1.萍水相逢
    学习了。我用ob写日记还是停留在标题前面加个日期就开写的阶段😂
    38分钟前
  3. obaby 的头像
    obaby Lv8.把酒言欢
    有了ai,的确是方便了很多
    26分钟前
  4. 织梦岁月 的头像
    织梦岁月 Lv4.常来常往
    这个不错,就是我现在太懒了,一直用印象笔记。。。
    25分钟前
  5. 扶苏 的头像
    扶苏 Lv3.点头之交
    日记本无纸化应用,真会玩
    24分钟前
  6. 咕唧客 的头像
    咕唧客 Lv1.萍水相逢
    感觉好复杂
    刚刚
  7. Feng 的头像
    Feng Lv7.志趣相投
    老张这是把obsidian玩的越来溜了,话说后来bero收到了没
    刚刚
  8. XIGE 的头像
    XIGE Lv6.推心置腹
    跟我的差不多哈
    刚刚
  9. acevs 的头像
    acevs Lv6.推心置腹
    看来我比较随意。原版,几乎无插件。我在想估计只有以后给ai看看了。我自己可能都不会看了。保存不善的话,就归零了。嘿嘿。
    刚刚
😊