监视网页变化

说到这个话题,可能第一反应就是RSS Feed。但是,我要看的网站不提供这个服务,而且,我希望的是监视特定的网页的变化,而不是整个网站的变化,而且希望在有变化时,能够“主动”地通知我,比如让扬声器发个声。

查了下,有免费的监视网站,但是,我要监视的是个论坛的网页,需要登陆。就说这些网站支持,我也不愿意把密码泄露给这些网站。

那么,自己写程序,定时刷新网页,检查网页元素来判断内容有没有改变,肯定work。但是,这个网站不允许短时间不停地刷新,因为增加服务器负担。我可不想我的账号因此被封。所以,这条路也走不通。

好在这个论坛有个功能,当有新帖或回复时,会在网页上出现一行字“有新回复的主题,点击查看”。这大概是基于Discuz建构的论坛的功能。

利用这个功能,查了下,这行字的id是forumnewshow。于是写了个油猴插件,定期检查有没有这个id的元素,有就说明有更新:

var s = document.getElementById('forumnewshow');
setInterval(() => {
if (s != null) {//has new post
}

 }, 60000);

接下来就是让扬声器发声以通知我,查了下,开始查到这样的代码:

var audio = new Audio('http://foo.com/bar.mp3');
audio.play();

但哪个网站有合适的音乐呢?找了一下没找到,不耐烦了。再说这个方法也不稳定。又查了下,查到这样的代码:

var context = new AudioContext();
var o = context.createOscillator();
var g = context.createGain();
o.connect(g);
g.connect(context.destination);
o.start(0);

试了下,可以发声。但怎么让它停下来?查了下,用这样的代码:

g.gain.exponentialRampToValueAtTime(0.00001, context.correntTime + 0.04);

但是,试了下,不work,查了下,原来是我的浏览器太旧了,另外,这个在Firefox和Safari上也有可能不work,需要在前面加上一句:

g.gain.setValueAtTime(1, context.currentTime);

调试通过。这样,当我关注的那个论坛的一个特定网页有新帖时,扬声器就会发声通知我了。

posted @ 2022-04-29 23:31  平静寄居者  阅读(139)  评论(0编辑  收藏  举报