Pregunta

quiero raspar una página que se actualiza periódicamente (la adición de nuevos artículos con exactamente la misma estructura que las anteriores) con el fin de generar un canal RSS.

Puedo escribir el código para analizar la página con facilidad, pero ¿cómo puedo emular un ping es decir, cuando las actualizaciones de la página ¿Cómo puede saber mi script php? ¿Tiene que ser una tarea programada?

(Probablemente una pregunta duplicado sé, pero buscó una respuesta directa, pero sin suerte. Cercano que me dieron fue Raspe y generar RSS alimentación, que tiene una secuencia de comandos raspado, pero no hay información sobre cómo conseguir que responder a cambios en la página de forma automática)

¿Fue útil?

Solución

En función del sistema que puede o no puede ser fácil de decir cuando la página se actualizó por última vez.

Para comprobar si hay cambios, se puede comprobar las cabeceras HTTP para la cabecera Last-Modified de la página. No todos los sistemas de actualización de la cabecera correctamente, por lo que pueden no ser útiles. También es posible que la página no modificada devolverá un estado de 304 (sin modificar), sobre todo si se proporciona una cabecera If-Modified-Since en su solicitud.

Sin duda, ejecutar algo como esto en una tarea programada. Aunque podría ser posible lo hacen sólo de las cabeceras, si tiene que actualizar la página de su usuario estará esperando mucho tiempo (en términos relativos) para su servidor para salir, llegar a la página, hacer el procesamiento, y enviar la respuesta. Me sorprendería si no se encuentra con los tiempos de espera de vez en cuando con un no-cron un enfoque basado.

Otros consejos

Usted podría tener una ejecución crontab que comprueba si el sitio ha actualizado (ya sea mediante la comprobación de las últimas cabeceras modificadas, si está disponible, o comprobando el contenido que interesa).

Si cuando su crontab comprueba el sitio, detecta cambios en el contenido, que podría añadir un mensaje a una cola (algo así como Zend_Queue http://framework.zend.com/manual/en/zend.queue.example.html por ejemplo), entonces usted podría tener un trabajador que acaba trabaja a través de los mensajes, ya sea hasta un límite de tiempo / datos se han alcanzado, o hasta que la cola está vacía.

También se puede comprobar en la respuesta a una petición HEAD, si no hay-line de la última actualización, la presencia y el valor de ETag y líneas Content-Length. Si ninguno de estos coinciden con los valores anteriores (que se ha almacenado), entonces el contenido es probable que haya cambiado. Se podría añadir a los otros href="http://en.wikipedia.org/wiki/HTTP_header" que indicarían cambio.

scroll top