登录

Obsidian 每日日记工作流:从零搭一套自动填好天气 / 农历 / 一言的日记(配图版)

604
  • 楼主博主

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


    一、先装上两个插件

    1. 打开 Obsidian → 设置 → 第三方插件 → 关闭「安全模式」。
    2. 浏览 → 搜索并安装 Templater(作者 SilentVoid),装完启用。

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


    二、建好目录结构

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

    image.webp

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

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

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

    设置项填什么
    新建文件位置留空
    日期格式01-每日一志/YYYY/YYYY-MM/YYYY-MM-DD -ddd
    模板文件位置06-Templater/Daily

    image.webp

    YYYY / YYYY-MM 自动建「年 / 月」两级子文件夹;ddd 是星期,文件名变成 2026-10-15 -周四。这条插件只负责建文件 + 塞模板,真正的「填数据」是下一步 Templater 干的。


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

    设置 → Templater,逐项设置:

    设置项填什么说明
    Template folder location06-Templater模板仓库
    User Scripts folder07-Scripts文件夹里每个 .js 变成 tp.user.文件名 函数
    Trigger on new file creationFolder templates新建文件时自动渲染模板
    Command timeout15(秒)脚本请求 4 个接口,5 秒偏紧

    在 Folder Templates 区域点「Add new」,填:folder = 01-每日一志、template = 06-Templater/Daily.md。

    image.webp

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


    五、放天气脚本 weather.js

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

    async function WeatherScript() {
      // ⚠️ 把下面三个 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;
    
    服务申请地址怎么建 key
    腾讯位置服务lbs.qq.com控制台 → 我的应用 → 创建应用 → 添加 key → 勾选 WebServiceAPI
    高德开放平台lbs.amap.com应用管理 → 创建应用 → 添加 key → 服务平台选 Web 服务
    聚合数据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>
    
    ***
    # 📋 一句话总结今天
    * 
    ***
    # 📝 记事 · 一事一条,只记发生了什么
    🌅 **早晨:** 
    🌤️ **上午:** 
    🌞 **中午:** 
    🌆 **下午:** 
    🌙 **晚上:** 
    ***
    # 🔁 今日对账 · 每天至少一行,不许空
    * **今天哪件事想回看**:
    * **我怎么处理的 / 现在看**:
    * **下次第一步**(一个动作,别写"我要注意"):
    ***
    # 💡 今日新知 · 积玉碎金
    * 
    ***
    # 🌡️ 心情 · 感受与碎碎念
    * 
    ***
    # ➡️ 明天
    * 
    ***
    

    七、测试

    1. 命令面板(Ctrl/Cmd + P)→ 搜「打开今日日记」→ 回车。
    2. 等 3~5 秒(脚本串行请求几个接口,正常)。
    3. 看到日期、农历、位置、天气、温度、一言都填好,六栏也在,就成功了。

    image.webp

    image.webp

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


    八、日常怎么填这套模板

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

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


    九、常见问题排查

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

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

    收藏 1支持 1反对打赏

4 条回复

发表回复