订阅任意网页的变更

订阅任意网页的变更

有一个纯文本 (html) 网页,偶尔会更新文本信息。如果此特定网页内容发生更改,是否有任何方法可以收到通知(无论通过何种方式),而网站不提供任何订阅机制?

答案1

Linux(和 WSL)

即使在 Windows Subsystem for Linux (WSL) 中,您也应该能够使用以下内容

在 Linux 下,您可以使用先前下载页面的目录中的选项(时间戳)wget-N

wget -N  https://example.com/your_page.html 

它将仅下载文件的新版本,并向服务器询问时间戳。wget无论下载成功与否,都会给出不同的输出。

  • 文件已下载

    HTTP 请求已发送,正在等待响应...200 OK

  • 由于时间戳相同,未下载

    HTTP 请求已发送,正在等待响应...304 未修改

因此最后你可以构建命令行或类似这样的脚本

wget -N https://example.com/your_page.html 2>&1 \
      | grep "304 Not Modified" >/dev/null \
      && echo "Not downloaded, old one" \
      || echo "There is a new file"

笔记:

  • -N激活时间戳用法
  • 2>&1将标准错误重定向到标准输出,用于以下操作grep
  • | grep "304 Not Modified"将上一个命令 ( wget) 的输出作为grep选择带有“304 Not Modified”的行的输入。0如果找到匹配项,它将以状态 (true) 退出。
  • && 逻辑和(又名then)如果前一个退出状态为 0,则执行以下命令。您可以省略此部分。
  • || 逻辑或(又名else)如果退出状态不是 0,则执行以下命令。
  • 在 shell 中, each\用于转到新行,并且必须是该行的最后一个字符
  • 用你的命令改变echo this or that...

结束语

wget -O - | md5sum可以创建一个校验和以便下次重复使用,而无需保留本地副本......

相关内容