请教:如何在日记笔记里自动加天气?

大家好!

我使用日记插件和模板插件,自动生成基本的日记模板。请问可以通过哪些方式,在模板里自动添加所在城市每天的天气?

找了好久都没找到适用的方法,有种方法是直接插入以下代码(网站链接):

<iframe width="200" scrolling="no" height="50" frameborder="0" allowtransparency="true" src="https://i.tianqi.com?c=code&id=5&icon=1&py=beijing&site=12"></iframe>

但是,我想要通过模板生成的日记,只包含当天天气内容的文字(比如:北京 5℃~20℃ 晴),不含其它代码。这样更适于日后的笔记迁移。

<%*
let url = 'https://www.tianqi.com/beijing/'
let res = await request({url: url,method: "GET"});
res = res.replace(/\s/g,'')
r=/<ddclass="weather">[\s\S]*?<\/dd>/g
let data = r.exec(res)[0]
r = /<span><b>(.*?)<\/b>(.*?)<\/span>/g
data = r.exec(data)
let weather='北京'+data[2]+data[1]
-%>
 <% weather %>

这是templater插件,最底下那行可以放到你想放的地方

6 个赞

感谢解答,亲测有效 :+1:

您好 这个templater插件使用这段代码真的非常好用 我想从网页中抓点湿度和空气质量等数据,虽然就在下面 但是我不会写这个代码,按照上面的格式写了好几个没有写出来 可以简单的说一下大致的方法不 这是那个网页中我想抓取的东西 我感觉照着抄就可以了 但是就是报错 可以简单的写一段代码吗
万分感谢

<dd class="weather">
                        <i><img src="//static.tianqistatic.com/static/wap2018/ico1/b1.png"></i>
                        <p class="now"><b>9</b><i>℃</i></p>
                        <span><b>多云</b>0 ~ 10℃</span>
                    </dd>
                    <dd class="shidu"><b>湿度:52%</b><b>风向:东北风 3级</b><b>紫外线:弱</b></dd>
                    <dd class="kongqi"><h5 style="background-color:#79b800;">空气质量:优</h5><h6>PM: 41</h6><span>日出: 06:52<br>日落: 17:40</span></dd>
                    <dl>
                    </dl>

全程拿正则硬套就可以了

let text = `<dd class="weather">...`
let 当前温度 = /<p class="now"><b>(\d+)<\/b><i>℃<\/i><\/p>/.exec(text)[1]
let [,天气, 温度范围] = /<span><b>(.*?)<\/b>(.*?)<\/span>/.exec(text)
let [,湿度,风向,紫外线] = /<dd class="shidu"><b>(.*?)<\/b><b>(.*?)<\/b><b>(.*?)<\/b><\/dd>/.exec(text)
let [,空气质量,PM,日出,日落] = /<dd class="kongqi"><h5 style="background-color:#79b800;">(.*?)<\/h5><h6>(.*?)<\/h6><span>(.*?)<br>(.*?)<\/span><\/dd>/.exec(text)

讲实话 这种不会用 我想把这段代码直接加到

<%*
let url = 'https://www.tianqi.com/beijing/'
let res = await request({url: url,method: "GET"});
res = res.replace(/\s/g,'')
r=/<ddclass="weather">[\s\S]*?<\/dd>/g
let data = r.exec(res)[0]
r = /<span><b>(.*?)<\/b>(.*?)<\/span>/g
data = r.exec(data)
let weather='北京'+data[2]+data[1]
-%>
 <% weather %>

这个里面 但是我还没有写输出语句的时候 他就不能运行 可以麻烦帮我弄一下不 请大佬喝瓶快乐水 实在是不知道怎么搞了 怎么加都无法运行

这样应该可以了,接下来你自己拼成想要的结果就行了

let url = 'https://www.tianqi.com/beijing/'
let res = await request({url: url,method: "GET"});
res = res.replace(/\n/g,'')
let 当前温度 = /<p class="now"><b>(\d+)<\/b><i>℃<\/i><\/p>/.exec(res)[1]
let [,天气, 温度范围] = /<span><b>(.*?)<\/b>(.*?)<\/span>/.exec(res)
let [,湿度,风向,紫外线] = /<dd class="shidu"><b>(.*?)<\/b><b>(.*?)<\/b><b>(.*?)<\/b><\/dd>/.exec(res)
let [,空气质量,PM,日出,日落] = /<dd class="kongqi" ><h5 style="background-color:#[0-9a-z]{6};">(.*?)<\/h5><h6>(.*?)<\/h6><span>(.*?)<br \/>(.*?)<\/span><\/dd>/.exec(res)
3 个赞

太感谢了


这个是改好了的

<%*
let url = 'https://www.tianqi.com/beijing/' 
let res = await request({url: url,method: "GET"}); 
res = res.replace(/\n/g,'') 
let dqwd = /<p class="now"><b>(\d+)<\/b><i>℃<\/i><\/p>/.exec(res)
let tqwdfw = /<span><b>(.*?)<\/b>(.*?)<\/span>/.exec(res)
let sdfxzwx = /<dd class="shidu"><b>(.*?)<\/b><b>(.*?)<\/b><b>(.*?)<\/b><\/dd>/.exec(res)
let kqzlrcrl = /<dd class="kongqi" ><h5 style="background-color:#[0-9a-z]{6};">(.*?)<\/h5><h6>(.*?)<\/h6><span>(.*?)<br \/>(.*?)<\/span><\/dd>/.exec(res)
let 当前温度 = '当前温度:' + dqwd[1]+'℃'
let 天气 = '天气:' + tqwdfw[1]
let 温度范围 = '温度范围:' + tqwdfw[2]
let 湿度 = sdfxzwx[1]
let 风向 = sdfxzwx[2]
let 紫外线 = sdfxzwx[3]
let 空气质量 = kqzlrcrl[1] + ' ' + kqzlrcrl[2]
let 日出日落 = kqzlrcrl[3] + ' ' +kqzlrcrl[4]
-%>
<% 当前温度 %>
<% 天气 %>
<% 温度范围 %>
<% 湿度 %>
<% 风向 %>
<% 紫外线 %>
<% 空气质量 %>
<% 日出日落 %>
3 个赞

能不能给个联系方式 q w都行 顺被请大佬喝水

真的非常感谢 算是浅浅的入门了

请教一下,我把 <% weather %>插入日记的模板里而后生成新日记,之后templater报错了是为什么?

要将这段全部放在一个模板文档里面 在新的的文档里面插入这个模板文件时 <%* -%>这个里面的代码全部会隐藏 只会将 <% weather %>替换成抓取到的天气

是在设置好模板后出的错。
alt+e插入该模板可以正常显示。

你好,我想要把天气源更改为http://www.weather.com.cn/weather1d/101210101.shtml#input,
请问需要怎么修改呢?
最后的结果是这样的
当前城市:杭州 当前温度:10℃ 天气:多云 温度范围:5 ~ 10℃ 湿度:89% 风向:东北风 2级 紫外线:很弱 空气质量:优 PM: 26 日出: 06:46 日落: 17:40

当前城市是否可以通过电脑IP地址获取呢?另外手机端是否可以调用定位或者位置呢?

比较了两个网站的代码,感觉 https://www.tianqi.com/ 数据更集中,更好调用一些……

url改成你的网址,剩余的正则表达式都需要重写。

需要怎么重写呢?另外可以根据IP地址自动获取当前城市的天气吗?

用正则重新提取网页信息数据就行。

感谢提供方案 :grinning:

不过我和open weather比了一下,感觉还是它的信息更准确一点

请求大神,能再帮我多写两行,把那个农历也摘下来吗?我一个小白,试了几次不行
let nl = /

</p>/.exec(res)

就是这一行

2023年06月21日 星期三 癸卯年五月初四