Dataview 查询片段记录

使用说明:

  • 安装 Dataview
  • 在设置中开启:EnabIe JavaScript Queries
  • 以下片段均放入标记为 dataviewjs 的代码块中
  • 结果为即时查询,所以并不会将内容真的保存在笔记里
  • 每次输入都会触发查询,可以在 Dataview 的设置里关闭,但是为了这点效果真不值得。我自己是有一个固定的入口文件,并且这个文件日常不做修改,正好回避了动态的缺点。

随机图片

直接插入图片就行了,没必要用复杂代码,当初写这个的时候脑子没转弯。

dv.paragraph(`<img src="https://picsum.photos/800/300">`)

两个数字分别是宽高,不过图片一般是相对方正的,像我这样用一个比较小的高度来作为题图基本都是裁剪结果。

会有缓存,所以并不是每次刷新都更新。可以在网址末尾加上:?blur 获取虚化图片。

当前日期

const today = new Date()
const num = ['日', '一', '二', '三', '四', '五', '六', '七', '八', '九']
dv.paragraph(
  today.toLocaleDateString('zh-CN')
  +' '+
  today.toLocaleDateString('zh-CN-u-ca-chinese')
  .replace(/(\d+)\s*?年\s*/, '')
  .replace(/月(\d+)/, (m, s)=>{
    s = Number(s)
    if(s===20) return '月 二十'
    if(s===30) return '月 三十'
    const lastNum = num[s%10]
    if(s<10) return '月 初'+lastNum
    if(s<20) return '月 十'+lastNum
    if(s<30) return '月 廿'+lastNum
  })
  +' '+
  '星期'+num[today.getDay()]
)

稍微复杂了一点,主要是加了一个自己看着舒服的农历,农历这种一般没啥用,但是需要了想看一下还要开日历,所以索性显示一个。效果如下:

2022/10/10 九月 十五 星期一

还行,能看,不加复杂样式了。

一言

随机返回一句话:

fetch("https://api.oick.cn/yiyan/api.php")
  .then(response => response.text())
  .then(data => dv.paragraph(data));

也可以更换为其它 Api 地址,在下面可以找到,只支持最简单的一句话的 Api,历史上今天啥的不行。

有兴趣也可以试试这里 https://www.gmit.vip/api.html ,里面的 Api 都有示例代码,稍微修改一下就能用。

天气

fetch("https://wttr.in/城市拼音?Tm2&lang=zh-cn&format=天气:%c %C 气温:%t 风力:%w<p></p>月相:%m 日出时间:%S 日落时间:%s")
  .then(response => response.text())
  .then(data => dv.paragraph(data));

注意:使用前把地址中的 城市拼音 换成你的城市,用地级市,不能用县级市。

详细文档:https://github.com/chubin/wttr.in

效果:

天气:☀️ 晴 气温:+6°C 风力:↘19km/h

月相:🌕 日出时间:06:12:03 日落时间:17:36:08

历史上的今天

fetch("https://api.oick.cn/lishi/api.php")
  .then(response => response.json())
  .then(data => dv.list(dv.array(data.result.map(e=> e.date+' '+e.title))));

年进度

const length = 20
const now = new Date()
const year = now.getFullYear()
const yearStart = new Date(year, 0)
const yearEnd = new Date(year+1, 0)
const progress = (now-yearStart)/(yearEnd-yearStart)
const prefix = ''.padStart(Math.round(length*progress), '▓')
const suffix = ''.padStart(length-Math.round(length*progress), '░')
dv.paragraph('Year progress: '+prefix+suffix+' '+(progress*100).toFixed(2)+'%')

第一行的 20 是进度条长度,可以自己修改。

查询某个文件下特定章节的内容

用 query 语法怎么也不成功,依然用 JS 刚。

const tasks = dv.page("Inbox/List/Shopping List").file.tasks.filter(e=>!e.completed && e.section.subpath==='Waiting')
dv.taskList(dv.array(tasks), false)