vault backup: 2025-09-05 17:09:29
This commit is contained in:
@@ -9,20 +9,54 @@ tags:
|
||||
title: <% tp.file.title %>
|
||||
total: 3
|
||||
---
|
||||
<%* let url = 'https://www.tianqi.com/yuexiuqu/'
|
||||
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 天气 = '天气:' + tqwdfw[1]
|
||||
let 温度范围 = '温度:' + tqwdfw[2]
|
||||
let 湿度 = sdfxzwx[1]
|
||||
let 风向 = sdfxzwx[2]
|
||||
let 紫外线 = sdfxzwx[3]
|
||||
let 空气质量 = kqzlrcrl[2] + ',' + kqzlrcrl[1]
|
||||
let 日出日落 = kqzlrcrl[3] + ' ' +kqzlrcrl[4] -%>
|
||||
<%*
|
||||
/** 使用 Obsidian 的 requestUrl 绕过 CORS,并且所有正则结果都做了空值保护 **/
|
||||
const resp = await requestUrl ({
|
||||
url: ' https://www.tianqi.com/yuexiuqu/ ',
|
||||
method: 'GET',
|
||||
// 可选:有些站会根据 UA 返回不同内容
|
||||
headers: { 'user-agent': 'Mozilla/5.0 Obsidian-Templater' },
|
||||
throw: false, // 出错时不要直接抛异常
|
||||
contentType: null // 让它按文本处理
|
||||
});
|
||||
|
||||
if (! resp || resp. status >= 400) {
|
||||
let 错误 = resp ? `HTTP ${resp. status}` : '无响应';
|
||||
let 提示 = `天气获取失败(${错误})`;
|
||||
// 给下面的变量提供安全默认值,避免后续渲染时报错
|
||||
tR += ''; // 不输出提示到正文的话,保留空字符串
|
||||
var 天气 = 提示, 温度范围 = '', 湿度 = '', 风向 = '', 紫外线 = '', 空气质量 = '', 日出日落 = '';
|
||||
} else {
|
||||
let html = String (resp. text || ''). replace (/\n/g, '');
|
||||
|
||||
// 正则执行+容错
|
||||
const mNow = /<p class="now"><b>(\d+)<\/b><i>℃<\/i><\/p>/. exec (html);
|
||||
const mRange = /<span><b>(.*?)<\/b>(.*?)<\/span>/. exec (html);
|
||||
const mShidu = /<dd class="shidu"><b>(.*?)<\/b><b>(.*?)<\/b><b>(.*?)<\/b><\/dd>/. exec (html);
|
||||
const mKq = /<dd class="kongqi"\s*><h5 style="background-color:#[0-9a-z]{6};">(.*?)<\/h5><h6>(.*?)<\/h6><span>(.*?)<br \/>((?:.|\s)*?)<\/span><\/dd>/. exec (html);
|
||||
|
||||
// 安全取值
|
||||
const 当前温度 = mNow?.[1] ? `${mNow[1]}℃` : '';
|
||||
const 天气文本 = mRange?.[1] ?? '';
|
||||
const 温度段 = mRange?.[2] ?? '';
|
||||
const 湿度文本 = mShidu?.[1] ?? '';
|
||||
const 风向文本 = mShidu?.[2] ?? '';
|
||||
const 紫外线文本 = mShidu?.[3] ?? '';
|
||||
const 空气级别 = mKq?.[1] ?? ''; // 如优/良/轻度污染...
|
||||
const 空气描述 = mKq?.[2] ?? ''; // 如 AQI 数值或说明
|
||||
const 日出 = mKq?.[3] ?? '';
|
||||
const 日落 = mKq?.[4]?.replace (/<.*?>/g, '') ?? ''; // 去掉可能的标签
|
||||
|
||||
// 暴露给下方模板使用的变量(沿用你的命名)
|
||||
var 天气 = '天气:' + (天气文本 || '未知');
|
||||
var 温度范围 = '温度:' + ([当前温度, 温度段]. filter (Boolean). join (' / ') || '未知');
|
||||
var 湿度 = 湿度文本 || '';
|
||||
var 风向 = 风向文本 || '';
|
||||
var 紫外线 = 紫外线文本 || '';
|
||||
var 空气质量 = (空气描述 && 空气级别) ? `${空气描述},${空气级别}` : (空气描述 || 空气级别 || '');
|
||||
var 日出日落 = [日出, 日落]. filter (Boolean). join (' ');
|
||||
}
|
||||
-%>
|
||||
|
||||
> [!tip] << [[<% tp.date.now("YYYY-MM-DD", -1) %>]] | [[<% tp.date.now("YYYY-MM-DD", 1) %>]] >>
|
||||
> <% 天气 %>,<% 温度范围 %>,<% 湿度 %>,<% 空气质量 %> <br>
|
||||
|
||||
Reference in New Issue
Block a user