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