当前位置:首页 > 每日看点 > 正文内容

如何使用Obsidian软件?

卡卷网1年前 (2024-12-25)每日看点222

Obsidian 日记自动记录当前位置、天气和农历信息

如果您正在使用 Obsidian 来管理您的笔记和日记,那么您可能会想要一种自动化的方法来记录每日的基础信息,例如星期几、当前位置、天气和农历日期。本文将向您介绍如何利用 Obsidian 的 Templater 插件配合 JavaScript 脚本,实现每日基础情况的自动记录。


如何使用Obsidian软件?  第1张


前言

Templater 插件允许用户使用模板和脚本来自动生成笔记内容。通过配合 JavaScript 脚本,您可以让 Obsidian 自动为您的日记模板填充诸如当前天气、位置和农历日期等信息。

安装和配置 Templater 插件

在插件的设置中,指定您的模板文件夹位置,例如 /Template,并指定 JS 脚本存放路径,例如 /Archive/Scripts


如何使用Obsidian软件?  第2张


获取 API 密钥

为了获取实时的天气、位置和农历日期信息,我们需要使用相关的 API 服务。

  1. 高德地图 API(用于获取位置和天气):

访问 高德开放平台,注册并登录您的账户。 创建一个新的应用,申请 Web 服务 类型的 Key。 获取到 高德地图 API Key,请妥善保存。


如何使用Obsidian软件?  第3张


  1. 聚合数据 API(用于获取农历日期):

访问 聚合数据,注册并登录您的账户。 在 数据 API 中,搜索并申请 万年历 API。 获取到 聚合数据 API Key,请妥善保存。


如何使用Obsidian软件?  第4张


编写 JavaScript 脚本

在您的 Obsidian 库中,创建一个用于存放脚本的文件夹,例如/Archive/Scripts

  1. 创建 getDiaryMeta.js 脚本

在 /Archive/Scripts 文件夹中,创建一个名为 getDiaryMeta.js 的文件,并将以下代码粘贴进去

// getDiaryMeta.js /** * 获取日记元数据,包括位置、天气和农历日期 * 需要配置高德地图 API 和聚合数据 API 的密钥 */ module.exports = async (tp, config = {}) => { // 高德地图 API 配置 const gaodeApiKey = "YOUR_AMAP_API_KEY"; // 替换为您的高德地图 API 密钥 // 聚合数据 API 配置(用于农历日期) const juheApiKey = "YOUR_JUHE_API_KEY"; // 替换为您的聚合数据 API 密钥 // 从配置中解构可能的值 let { location: inputLocation = "", adcode: inputAdcode = "", weather: inputWeather = "" } = config; // 初始化元数据变量 let location = inputLocation; let adcode = inputAdcode; let weather = inputWeather; let lunarDate = "无法获取农历日期"; // 获取 IP 地址地理位置,除非已经有 location 值 if (!location) { try { const geoURL = `https://restapi.amap.com/v3/ip?key=${gaodeApiKey}&output=json`; const geoResponse = await fetch(geoURL); const geoData = await geoResponse.json(); console.log("Geolocation API Response:", geoData); // 调试日志 if (geoData.status === "1") { location = `${geoData.province}${geoData.city}`; // 输出结果为:浙江省温州市 adcode = geoData.adcode; // 使用 adcode 替代 citycode } else { location = "无法获取位置"; console.log(`位置获取失败:${geoData.info}`); } } catch (error) { console.error("位置获取失败:", error); location = "无法获取位置"; } } else { console.log("已提供位置,跳过IP地理位置获取。"); } // 如果 adcode 没有值,但有 location,则通过地理编码 API 获取 adcode if (!adcode && location && location !== "无法获取位置") { try { const geocodeURL = `https://restapi.amap.com/v3/geocode/geo?key=${gaodeApiKey}&address=${encodeURIComponent(location)}`; const geocodeResponse = await fetch(geocodeURL); const geocodeData = await geocodeResponse.json(); console.log("Geocode API Response:", geocodeData); // 调试日志 if (geocodeData.status === "1" && geocodeData.geocodes && geocodeData.geocodes.length > 0) { adcode = geocodeData.geocodes[0].adcode; console.log(`通过 location 获取到的 adcode: ${adcode}`); } else { console.log(`通过 location 获取 adcode 失败:${geocodeData.info}`); } } catch (error) { console.error("通过 location 获取 adcode 失败:", error); } } // 获取天气情况(使用 高德地图天气 API),除非已经有 weather 值 if (adcode) { if (!weather) { // 仅当 weather 为空时才获取天气 try { const weatherURL = `https://restapi.amap.com/v3/weather/weatherInfo?key=${gaodeApiKey}&city=${adcode}&extensions=all&output=json`; const weatherResponse = await fetch(weatherURL); const weatherData = await weatherResponse.json(); console.log("Weather API Response:", weatherData); // 调试日志 if (weatherData.status === "1" && weatherData.forecasts && weatherData.forecasts.length > 0) { const forecast = weatherData.forecasts[0]; const { dayweather, nightweather, daytemp, nighttemp } = forecast.casts[0]; weather = `${dayweather}/${nightweather}, ${nighttemp}~${daytemp}℃`; } else { weather = "无法获取天气信息"; console.log(`天气获取失败:${weatherData.info}`); } } catch (error) { console.error("天气获取失败:", error); weather = "获取失败"; } } else { console.log("已提供天气信息,跳过天气API调用。"); } } else { console.log("未提供 adcode,跳过天气获取。"); } // 获取农历日期(使用聚合数据 API) try { let apiDate = tp.date.now("YYYY-MM-DD"); const lunarURL = `http://v.juhe.cn/calendar/day?date=${apiDate}&key=${juheApiKey}`; const res = await request({ url: lunarURL, method: "GET", }); let JsonData = JSON.parse(res); let lunarData = JsonData.result; // 根据API文档调整层级 console.log("Lunar API Response:", lunarData); // 调试日志 if (JsonData.error_code === 0 && lunarData) { lunarDate = lunarData.data.lunar || "无法获取农历日期"; // 根据API文档调整字段 } else { lunarDate = "获取失败"; console.log(`农历日期获取失败:${lunarData.reason || '未知原因'}`); } } catch (error) { console.error("农历日期获取失败:", error); lunarDate = "获取失败"; } return { location, weather, lunarDate }; };

注意:

  • YOUR_AMAP_API_KEY 替换为您的 高德地图 API Key。
  • YOUR_JUHE_API_KEY 替换为您的 聚合数据 API Key。

Templater 模板

在您的模板文件夹(例如 /Templates)中,创建一个新的模板文件,例如 Daily Note.md,并添加以下内容:

<%* const config = { location: "", // 当前指定地理位置,会根据该位置获取对应天气。不指定则根据当前IP地址自动获取地址位置和天气信息。 adcode: "", // 若指定adcode,优先根据adcode获取该地理编码对应的天气 weather: "" }; const meta = await tp.user.getDiaryMeta(tp, config); %>--- tags: - Topic/DailyNote title: <% tp.file.title %> type: - Daily Note date: <% tp.date.now("YYYY-MM-DD") %> created_time: <% tp.file.creation_date("YYYY-MM-DD HH:mm:ss") %> modify_time: <% tp.file.last_modified_date("YYYY-MM-DD HH:mm:ss") %> lunar_calendar: <% meta.lunarDate %> week: <% tp.file.creation_date("dddd") %> location: <% meta.location %> weather: <% meta.weather %> %> health: events: aliases: - Daily Note - <% tp.date.now("YYYY-MM-DD") %> --- # Daily Note - <% tp.date.now("YYYY-MM-DD") %>

说明:

  • 模板使用了 Templater 的脚本功能,调用了 getDiaryMeta.js 脚本。
  • 将获取到的 lunar_calendar、location 和 weather 信息插入到笔记的前置字段(YAML Front Matter)中。
  • 模板中还包含一个星期、标题和正文,您可以根据需要进行修改。

使用模板创建每日笔记

  1. 设置每日笔记模板:

如果您使用了 Obsidian 的 Daily Notes 插件,可以在插件设置中,将每日笔记模板设置为刚刚创建的 /Template/Daily Note.md 文件。


如何使用Obsidian软件?  第5张


  1. 创建新的每日笔记:

当新的一天开始时,使用 Daily Notes 插件创建今日的笔记。 笔记将自动使用模板,并调用脚本获取当天的基础信息。

  1. 查看结果:

打开今日的笔记,您将看到类似以下的内容:

--- tags: - Topic/DailyNote title: 2024-12-21 type: - Daily Note date: 2024-12-21 created_time: 2024-12-21 08:21:04 modify_time: 2024-12-21 09:07:23 lunar_calendar: 十一月廿一 week: 星期六 location: 浙江省瑞安市 weather: 晴/晴, 2~14℃ health: events: aliases: - Daily Note - 2024-12-21 ---

常见问题及解决方法

  • 获取不到天气或位置信息:

检查您的网络连接,确保可以访问外部 API。 确认您的 API Key 有效,且没有超过调用限制。 确保 Templater、日记插件配置正确,且模板文件和 JS 文件存放路径正确。

  • 农历日期显示为 " 获取失败 ":

可能是聚合数据的 API 请求失败,检查您的 API Key 和配额。通过 Ctrl+Shift+i 检查控制台输出


如何使用Obsidian软件?  第6张


结语

通过以上步骤,您已经成功地利用 Obsidian 的 Templater 插件和 JavaScript 脚本,实现了每日基础信息的自动记录。这个过程不仅提升了您的日记记录效率,还为之后的追溯和汇总提供了帮助。

Obsidian 的强大之处在于其高度的可定制性和扩展性。除了本文介绍的功能,您还可以根据自己的需求,进一步扩展脚本的功能,例如:

添加每日名言或格言: 从网上获取每日一句,增添正能量。 统计步数或健康数据: 如果您有相关的 API 或数据源,可以将它们整合到日记中。 记录待办事项: 自动生成当天的待办事项列表模板。

通过 dataview 展示位置发生改变的条目


如何使用Obsidian软件?  第7张


// 获取目标目录中的文件并按日期降序排列 let pages = dv.pages('"Archive/Notes"') .where(p => p.location) // 只保留有 location 字段的记录 .sort(p => p.date, 'desc'); // 按日期降序排列 // 初始化一个结果数组和上一个记录的 location let result = []; let lastLocation = null; // 遍历记录,当 location 与上一条不同时才记录 for (let page of pages) { if (page.location !== lastLocation) { result.push(page); lastLocation = page.location; } } // 渲染表格 dv.table( ["File", "Location"], // 表头 result.slice(0, 5).map(p => [p.file.link, p.location]) // 表数据 );

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/5476.html

分享给朋友:

相关文章

下班后可以做点什么副业赚钱呢?

下班后可以做点什么副业赚钱呢?

首先说明一下,我分享的任务不需要交钱,也不需要入群,只需要你去平台学习就可以。如果有任何让你交钱,进群的任务,请警惕被割韭菜。今天给大家分享7大赚钱副业,新手小白0粉丝0门槛0技术都可以去做,不说大富大贵,但是赚个零花钱还是可以。如果你已经...

数字人民币为什么又不火了?

我完全不懂行。我一开始以为,数字人民币,是对我银行里的每一分钱,都赋予一个独一无二的数字编码。我要用一块钱买矿泉水,它就从我的存款中随机选取一百个一分钱,组合成一块钱,支付给商家。我花一百块钱吃饭,它就随机选取一万个一分钱,组合成一百块钱,...

有哪些让你目瞪口呆的 Bug ?

有哪些让你目瞪口呆的 Bug ?

成都有个监狱情况比较特殊,关押的基本全是重犯,而且还都是经济犯和政治犯,他们以前都是一方大佬,在自己的一亩三分地翻手为云覆手为雨,无非是不小心中箭落马或帮老大顶锅才进监狱,所以即使进来了,他们依然保持着体面和骄傲,依从性差,虽然不至于和监狱...

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。咱...

中国的科技为什么在最近2-3年时间像突然大爆发一样?

这个真的得感谢1998年美国在南联盟使馆投的两颗大炸弹。在80年代中国下马了一千多个项目,用资金进口了近一百万辆小汽车。我记得小时候有一段时间从海南岛开往北方的漂亮日本小面包车,密集从村前公路上驶过,连过路的间隙都没有,就这样接连开了一个星...

你怎么看待软件测试这个工作的?

你怎么看待软件测试这个工作的?

先说一个插曲:上个月我有同学在深圳被裁员了,和我一样都是软件测试,不过他是平安外包,所以整个组都撤了,他工资和我差不多都是14K。现在IT互联网已经比较寒冬,特别是软件测试,裁员先裁测试,这几乎都是定律。我最近看了某音很多应届生以及去年毕业...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。