从零搭建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 命令

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

暂无评论数据
😊