очистка не RSS-страницы для создания канала - PullRequest
2 голосов
/ 12 февраля 2010

Я хочу очистить страницу, которая регулярно обновляется (добавляя новые статьи с точно такой же структурой, что и предыдущие), чтобы создать канал RSS.

Я могу написать код для удобного анализа страницы, но как мне эмулировать эхо-запрос, т. Е. Когда страница обновляется, как мой PHP-скрипт узнает? Это должна быть работа cron?

(Вероятно, дубликат вопроса, который я знаю, но искал прямой ответ, но безуспешно. Самое близкое, что я получил, было Очистить и сгенерировать RSS-канал , в котором есть скрипт очистки, но нет информации о том, как его получить автоматически реагировать на изменения на странице)

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

В зависимости от системы может быть или не быть легко определить, когда страница обновлялась в последний раз.

Чтобы проверить изменения, вы можете проверить заголовки HTTP для заголовка Last-Modified страницы. Не все системы корректно обновляют заголовок, поэтому он может быть бесполезен. Также возможно, что неизмененная страница вернется в состояние 304 (не изменено), особенно если в запросе указан заголовок If-Modified-Since.

Я бы определенно запустил что-то подобное на работе cron. Хотя может быть возможно сделать это только из заголовков, если вам нужно обновить страницу, ваш пользователь будет долго ждать (в относительном выражении), чтобы ваш сервер вышел, найдите страницу, выполните обработка и отправка ответа. Я был бы удивлен, если бы вы не время от времени сталкивались с подходом, не основанным на использовании cron.

2 голосов
/ 12 февраля 2010

Вы можете запустить crontab, который проверяет, обновился ли сайт (либо проверяя последние измененные заголовки, если они доступны, либо проверяя интересующий вас контент).

Если, когда ваш crontab проверяет сайт, он обнаруживает изменение содержимого, он может добавить сообщение в очередь (например, что-то вроде Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.html), тогда у вас может быть работник, который просто работает через сообщения либо до тех пор, пока не будет достигнут предел времени / данных, либо до тех пор, пока очередь не станет пустой.

1 голос
/ 12 февраля 2010

Вы также можете проверить в ответе на запрос HEAD, если нет строки Last-Modified, на наличие и значение строк ETag и Content-Length. Если ни один из них не соответствует предыдущим значениям (которые вы сохранили), то содержание, скорее всего, изменилось. Вы можете добавить к этим любым заголовкам ответа строки, которые будут указывать на изменение.

...