指标
能定时抓取网站内容,并发送到飞书群机器人接口。
介绍
https://www.val.town/ 是个云函数的运行环境。
示例demo能够教会你如何给本人的邮箱发送笑话(console.email只能发给本人的注册邮箱)
反对动静引入npm包,但调试不大不便,最开始想援用node-fetch来实现fetch,但总是报错,报错信息不明确。起初间接用fetch代替了。
val.town 提供定时工作的模式,只须要写好本人的函数,再抉择增加schedule,设定一下cron,就能够实现定时运行函数的性能。(定时有肯定的限度)
实际
拿echojs网站为例,须要fetch网页内容,通过cheerio等库解析一下html,选择器找到对应的内容,提取即可。
抓取局部
如下fetchEchojs函数实现抓取网站网页的文章题目和链接,并返回
async function fetchEchojs() { const url = "https://www.echojs.com/"; // 动静引入npm包的形式 await import('npm:xxx') const cheerio = await import("npm:cheerio"); try { const res = await fetch(url); const data = await res.text(); const $ = cheerio.load(data); const result = []; $("#newslist article").each((i, elem) => { const $article = $(elem).find("h2"); const title = $(elem).find("h2").text(); const url = $article.find("a").attr("href"); result.push({ title, url, }); }); return result; } catch (err) { console.error(err); }}
下一步编写val并设置
抓取实现后,取得了一个存储文章的数组,正好飞书群机器人提供api承受申请内容,转发到飞书群音讯。
发送申请用fetch实现即可,这里就不介绍。
如下函数,实现了整个工作的次要逻辑。
async function workdayMorningNews4Js() { // @my.fetchEchojs即下面的函数 const news = await @my.fetchEchojs(); // larkTweet是我发送飞书机器人的val await @my.larkTweet({ "msg_type": "post", "content": { "post": { "zh_cn": { "title": "过去看,过去挑,走过路过,不要错过", "content": [ ...news.slice(0, 10).map((item) => [{ "tag": "a", "text": item.title, "href": item.url, }]), ], }, }, }, });}
而后就是设置定时cron,留神用的是UTC,所以国内的话工夫早其8小时。
如图,设置每周一到周五,每天早上9点半执行val。
第一次保留时,会触发一次运行,前面就到点执行了。
总体来说,编写难度不大,能够实现一些简略的需要,比方每天给本人发个笑话,或者收集一下常识文章推送,也略微留神一下平安咯,val能够编写公有和公开,注册用户公有有数量限度。