我想抓取一个定期更新的页面(添加与以前的结构完全相同的新文章)以生成 RSS 提要。
我可以编写代码来轻松分析页面,但是当页面更新时如何模拟 ping 即我的 php 脚本如何知道?它必须是一个cron工作吗?
(我知道可能是一个重复的问题,但是没有运气就搜索了直接答案。我得到的最接近的是Scrape and generate RSS feed,它有一个抓取脚本,但没有关于如何让它自动响应页面上的更改的信息)
我想抓取一个定期更新的页面(添加与以前的结构完全相同的新文章)以生成 RSS 提要。
我可以编写代码来轻松分析页面,但是当页面更新时如何模拟 ping 即我的 php 脚本如何知道?它必须是一个cron工作吗?
(我知道可能是一个重复的问题,但是没有运气就搜索了直接答案。我得到的最接近的是Scrape and generate RSS feed,它有一个抓取脚本,但没有关于如何让它自动响应页面上的更改的信息)
根据系统的不同,最后一次更新页面的时间可能不容易判断,也可能不容易判断。
要检查更改,您可以检查Last-Modified
页面标头的 HTTP 标头。并非所有系统都正确更新标头,因此它可能没有用。未修改的页面也有可能返回304
(未修改)状态,特别是如果您If-Modified-Since
在请求中提供了标头。
我肯定会在 cron 作业上运行这样的东西。虽然可能只从标题中执行此操作,但如果您必须更新页面,您的用户将等待很长时间(相对而言)让您的服务器退出,获取页面,进行处理,然后发送回复。如果您没有不时使用基于非 cron 的方法遇到超时,我会感到惊讶。
您可以运行 crontab 来检查站点是否已更新(通过检查最后修改的标题,如果可用,或者通过检查您感兴趣的内容)。
如果您的 crontab 检查站点时,它检测到内容更改,它可以将消息附加到队列(例如 Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.html) ,那么您可以让一个工作人员处理消息,直到达到时间/数据限制,或者直到队列为空。
如果没有 Last-Modified 行,您还可以检查对 HEAD 请求的响应,以了解 ETag 和 Content-Length 行的存在和值。如果这些都不匹配先前的值(您已存储),则内容可能已更改。您可以将指示更改的任何其他响应标题行添加到这些响应标题行中。