Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Hora de modificación de página web (https://www.clubdelphi.com/foros/showthread.php?t=94795)

Arturo.Molina 22-07-2020 13:52:20

Hora de modificación de página web
 
1 Archivos Adjunto(s)
Buenas tardes a todos,
me han encargado un pequeño proyecto en el cual debo rastrear y registrar la fecha y la hora de las modificaciones de una página web concreta, para hacerlo estoy usando Delphi 10.2 sobre windows 10/64

Revisando por las páginas del ClubDelphi, he encontrado esta referencia: https://clubdelphi.com/foros/showthr...cha+pagina+web

Las soluciones son bastante antiguas, y entiendo que no están funcionando bien ya que me devuelve lo que aparece en la imagen para todas las páginas web con las que pruebo. Obviamente la página que chequeo existe, contiene datos y se actualiza de vez en cuando.
Como dato, indicar que es una página hecha con WordPress.

¿Álguien que me eche una mano para resolver esto?

Saludos y gracias

mamcx 22-07-2020 15:21:56

Tienes que aprender del protocolo HTTP, no meramente copiar codigo sin entendimiento.

HTTP usa verbos (GET, POST, HEAD, ...), encabezados, estados, respuestas y solicitudes. Es un protocolo de texto.

Que significa 301?

https://es.wikipedia.org/wiki/HTTP_301

P.D: Tip. Mira con el navegador cualquier pagina usando click derecho, inspeccionar. En la pestaña de red, veras los request/response. Para ESTE hilo son:

Código:

Resumen
URL: http://www.clubdelphi.com/foros/showthread.php?p=538033#post538033
Estado: 200 OK
Fuente: Red
Dirección: 87.98.231.4:80

Solicitud
GET /foros/showthread.php HTTP/1.1
Cookie: SERVERID111702.........
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Host: www.clubdelphi.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
Referer: http://www.clubdelphi.com/foros/search.php?searchid=5741235
Accept-Language: es-es
Connection: keep-alive

Responder
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Pragma: no-cache
Set-Cookie: SERVERID111702=34066; path=/; max-age=900
Content-Encoding: gzip
Expires: 0
Transfer-Encoding: Identity
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Date: Wed, 22 Jul 2020 13:16:47 GMT
Vary: Accept-Encoding
X-IPLB-Instance: 31965
X-Powered-By: PHP/5.4
Server: Apache

Parámetros de la cadena de consulta
p: 538033

Es IMPORTANTE recordar que NO EXISTE una obligación de responder de forma idéntica en los encabezados. Aparte del status todo lo demás puede estar vació.

Y te puede decir mentiras.

Arturo.Molina 22-07-2020 18:42:07

Cita:

Empezado por mamcx (Mensaje 538034)
Tienes que aprender del protocolo HTTP, no meramente copiar codigo sin entendimiento.

HTTP usa verbos (GET, POST, HEAD, ...), encabezados, estados, respuestas y solicitudes. Es un protocolo de texto.

Que significa 301?

https://es.wikipedia.org/wiki/HTTP_301

P.D: Tip. Mira con el navegador cualquier pagina usando click derecho, inspeccionar. En la pestaña de red, veras los request/response. Para ESTE hilo son:

Código:

Resumen
URL: http://www.clubdelphi.com/foros/showthread.php?p=538033#post538033
Estado: 200 OK
Fuente: Red
Dirección: 87.98.231.4:80

Solicitud
GET /foros/showthread.php HTTP/1.1
Cookie: SERVERID111702.........
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Host: www.clubdelphi.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
Referer: http://www.clubdelphi.com/foros/search.php?searchid=5741235
Accept-Language: es-es
Connection: keep-alive

Responder
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Pragma: no-cache
Set-Cookie: SERVERID111702=34066; path=/; max-age=900
Content-Encoding: gzip
Expires: 0
Transfer-Encoding: Identity
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Date: Wed, 22 Jul 2020 13:16:47 GMT
Vary: Accept-Encoding
X-IPLB-Instance: 31965
X-Powered-By: PHP/5.4
Server: Apache

Parámetros de la cadena de consulta
p: 538033

Es IMPORTANTE recordar que NO EXISTE una obligación de responder de forma idéntica en los encabezados. Aparte del status todo lo demás puede estar vació.

Y te puede decir mentiras.


Gracias por tu respuesta mamcx.


Ya había consultado sobre el error 301, aunque no entiendo esa respuesta del servidor. La página está en el servidor (no hay error 410 o 404).

Respecto a la petición de la información de red a la página (botón derecho, inspeccionar), tambien lo había mirado, pero la respuesta que me da en date es el momento en que se hace la petición, que no es la que yo necesito.

Ciertamente, no tengo casi ninguna experiencia en el protocolo HTTP. Yo pensé que, al fin y al cabo, siendo un archivo colocado en un servidor en internet tiene una fecha y una hora de creación y/o modificación (es una página estática ¿no es un archivo de texto plano con una síntaxis específica que mi navegador me muestra?).

Debo estar muy espeso y, despues de leer tu respuesta varias veces, no consigo entender lo que tratas de explicarme. :(

¿Podrías, por favor, intentar explicarmelo otra vez?


Saludos y gracias

Casimiro Notevi 22-07-2020 18:47:34

Aunque sea una página estática, tú (el navegador) no descarga esa página, sino el resultado de procesamiento que hace el servidor web.
O sea, el fichero html/php no lo descargas.

Arturo.Molina 22-07-2020 20:29:22

Cita:

Empezado por Casimiro Notevi (Mensaje 538040)
Aunque sea una página estática, tú (el navegador) no descarga esa página, sino el resultado de procesamiento que hace el servidor web.
O sea, el fichero html/php no lo descargas.

Gracias Casimiro

Y ¿no hay ninguna manera de conocer cuando se creó/generó o modificó ese archivo?

Casimiro Notevi 22-07-2020 20:38:45

Depende de la configuración del servidor web, podrás descargarlo, por ejemplo con wget (es de linux, pero seguro que hay algo similar para windows).
Ejemplo de uso:
wget https://www.google.com/index.php
Te descargaría ese fichero y ahí podrías ver su fecha.
(Es sólo un ejemplo, no creo que google permita descargarlo)

mamcx 22-07-2020 21:36:34

Cita:

Empezado por Arturo.Molina (Mensaje 538041)
Y ¿no hay ninguna manera de conocer cuando se creó/generó o modificó ese archivo?

Si la pagina es un "fichero" para descargar, QUIZAS.

Pero si es una pagina de "codigo" como .php, .aspx, etc NO.

Porque esas paginas lo que hacen es procesar algo, y retornar ese resultado, NO devolverse a "si mismas". Eso seria una falla de seguridad!

--
Porque necesitas hacer esto?

Arturo.Molina 23-07-2020 09:29:44

Gracias Casimiro

Sí, con wget (versión para windows) me descarga la página, pero vuelve a pasar lo mismo, el archivo tiene la fecha y hora de la descarga.

Gracias mamcx

Cita:

Porque necesitas hacer esto?
El encargo es chequear una página web donde aparecen una serie de actividades con una cantidad pequeña de posibles participantes. La idea es tener controlada esa página para detectar cuando se actualiza y así poder hacer inscripciones antes de que se ocupen todas las plazas libres.


Saludos y gracias

dec 23-07-2020 09:50:16

Hola a todos,

Lo que se me ocurre es una idea un poco de bombero, como suele decirse, pero, ¿qué tal descargar "la página" (la respuesta del servidor) y guardar un "hash" de la misma? Cada cierto tiempo, podrías obtener una nueva respuesta, "calcularías" su "hash" y podrías comprobarlo con el previamente guardado: si no son iguales, significa que "la página" (o al menos la respuesta del servidor) tiene algún cambio, pues produce "hashes" diferentes.

Este hilo muestra información sobre cómo obtener el "hash" de una cadena.

Arturo.Molina 23-07-2020 10:08:12

Cita:

Empezado por dec (Mensaje 538047)
Hola a todos,

Lo que se me ocurre es una idea un poco de bombero, como suele decirse, pero, ¿qué tal descargar "la página" (la respuesta del servidor) y guardar un "hash" de la misma? Cada cierto tiempo, podrías obtener una nueva respuesta, "calcularías" su "hash" y podrías comprobarlo con el previamente guardado: si no son iguales, significa que "la página" (o al menos la respuesta del servidor) tiene algún cambio, pues produce "hashes" diferentes.

Este hilo muestra información sobre cómo obtener el "hash" de una cadena.


Gracias Dec

Fijate que yo estaba pensando en algo parecido, aunque mi idea iba más por el tema de "parsear" la parte del archivo que me interesa y compararlo con la última vez que se descargó.
Tu idea es mucho más práctica, rápida y económica en cuanto a recursos.


Saludos y gracias

Neftali [Germán.Estévez] 23-07-2020 10:34:51

Cita:

Empezado por Arturo.Molina (Mensaje 538033)
... me han encargado un pequeño proyecto en el cual debo rastrear y registrar la fecha y la hora de las modificaciones de una página web concreta


¿Te refieres a la hora del fichero original?
No creo que se pueda si no tienes credenciales de acceso vía FTP, por ejemplo.

Otra opción es detectar si desde la ultima vez que lo consultaste ha habido cambios (creo que lo ha comentado [dec]). Puedes descargar el contenido y compararlo con el último descargado.
Imagino que eso serviría si estás intentando consultar algún dato que publican en una web (tipos de cambio, precios,...) y no tienes acceso a través de ninguna API.

dec 23-07-2020 10:49:15

Hola a todos,

Cita:

Empezado por Arturo.Molina (Mensaje 538048)
Gracias Dec

Fijate que yo estaba pensando en algo parecido, aunque mi idea iba más por el tema de "parsear" la parte del archivo que me interesa y compararlo con la última vez que se descargó.
Tu idea es mucho más práctica, rápida y económica en cuanto a recursos.


Saludos y gracias

Bueno, en realidad mi idea puede acaso no ser la más rápida o económica, en el sentido de que requerirá de una "llamada" al servidor para obtener su respuesta, ahora bien, esta respuesta a que me refiero será el HTML de la página en cuestión, todo el HTML... Quiere decirse, que, si hubiese una forma de llamar al servidor sólo para preguntarle la fecha actual de la página, acaso se tratase de una solución más rápida y económica, pues no sería necesario obtener el HTML de la página, etc.

Ahora bien, el problema está en lo que se comenta en este mismo hilo: acaso no haya forma de conseguir algo así como la fecha "actual" de una página... y aquí es donde podría pensarse la solución que he propuesto.

Casimiro Notevi 23-07-2020 10:54:49

Yo creo que está confundido, porque si cambian algo en la página, entonces se puede "ver" en la respuesta. Y eso no es cambiar nada del fichero html/php en sí mismo. Tal vez con un ejemplo real podamos entenderlo.
Además, ¿cómo cambian la página? ¿la editan y la suben de nuevo? ¿seguro que es estática?
Y, por cierto, wget (linux) sí descarga el fichero sin cambiarle la fecha, mantiene la original.
Acabo de hacer una prueba:
wget http://www.i...c.com/index.html
Y el resultado:
-rw-rw-r-- 1 user user 21K 2018-10-28 19:18 index.htm

Arturo.Molina 23-07-2020 12:22:52

Cita:

Empezado por Casimiro Notevi (Mensaje 538051)
Yo creo que está confundido, porque si cambian algo en la página, entonces se puede "ver" en la respuesta. Y eso no es cambiar nada del fichero html/php en sí mismo. Tal vez con un ejemplo real podamos entenderlo.
Además, ¿cómo cambian la página? ¿la editan y la suben de nuevo? ¿seguro que es estática?
Y, por cierto, wget (linux) sí descarga el fichero sin cambiarle la fecha, mantiene la original.
Acabo de hacer una prueba:
wget http://www.i...c.com/index.html
Y el resultado:
-rw-rw-r-- 1 user user 21K 2018-10-28 19:18 index.htm


Gracias Casimiro

Evidentemente la respuesta es diferente cuando cambian algo, el problema es detectar ver cuando se produce ese cambio, que es lo que yo necesito. La idea de descargar y/o comprobar la fecha - hora era solamente eso, una idea.
La verdad es que no se como la gestionan, más allá de que es una página de wordpress, ya he comentado que no me muevo en entornos web.

Yo he usado la versión windows del wget y el resultado es un archivo con la fecha y la hora de la petición.

Al final creo que me voy a decantar por la opción que me propone Dec, obtener el hash del archivo y compararlo con la siguiente descarga.

Saludos y gracias

Casimiro Notevi 23-07-2020 12:49:09

Te pedía un ejemplo, o más información, porque creo que lo que pretendes no puedes hacerlo como piensas. Me explico.
La página web muestra una serie de nombres que lee de una base de datos, por ejemplo, imaginemos algo así (código inventado):
Código:

Fichero: showpersonas.php

query.open.select * from personas
while not query.eof
  show query.persona.nombre
end

Ese código crea una respuesta que es lo que se mostrará en el navegador. Si dan de alta más personas, esa página craerá una respuesta con todas las personas y es lo que mostrará en el navegador. ¡¡¡Pero el fichero que genera la página es el mismo, no se ha modificado!!!, lo que es diferente es la página que crea para ser mostrado en el navegador.

Por eso no te sirve descargar el fichero y comprobar si es diferente, porque es el mismo, eso no se ha modificado.

Puede que yo no lo haya entendido, pero me parece que es la situación.

Arturo.Molina 23-07-2020 13:45:00

Cita:

Empezado por Casimiro Notevi (Mensaje 538053)
Ese código crea una respuesta que es lo que se mostrará en el navegador. Si dan de alta más personas, esa página craerá una respuesta con todas las personas y es lo que mostrará en el navegador. ¡¡¡Pero el fichero que genera la página es el mismo, no se ha modificado!!!, lo que es diferente es la página que crea para ser mostrado en el navegador.

Por eso no te sirve descargar el fichero y comprobar si es diferente, porque es el mismo, eso no se ha modificado.

Puede que yo no lo haya entendido, pero me parece que es la situación.


Gracias Casimiro

Me temo que debo darte la razón, debe ser un fichero generado de forma dinámica, he probado a generar el HASH del mismo fichero descargado dos veces de forma consecutiva y son diferentes.

Voy a probar parseando la información del archivo que me devuelve la página web e intentar localizar las cadenas que busco.

Saludos y gracias

Neftali [Germán.Estévez] 24-07-2020 09:33:08

Cita:

Empezado por Arturo.Molina (Mensaje 538054)
Me temo que debo darte la razón, debe ser un fichero generado de forma dinámica, he probado a generar el HASH del mismo fichero descargado dos veces de forma consecutiva y son diferentes.

A veces aunque la página sea igual y los resultados sean iguales, simplemente con un pequeño cambios en la página (que se genera dinámicamente) como el de la hora, te dará un HASH diferente.
Por ejemplo, esta misma `pàgina añade esto en la parte final:



Con este pequeño cambio, el HASH siempre será diferente.

dec 24-07-2020 11:05:42

Hola a todos,

En efecto, el asunto del "hash" puede resultar más peliagudo de lo que pudiera parecer al principio... porque cualquier cambio, como lo que menciona Neftalí, pero, también cambios que pueden incluso ser invisibles, meros cambios en la respuesta, en el HTML, producirá "hash" diferentes, y, realmente, lo que se podrá decir que se sabe es eso, que la respuesta es diferente... pero no, como se busca, si la página ha cambiado en lo que nos interesa.

Tal vez "parsear" el HTML de la respuesta buscando el posible cambio exactamente en el sitio que nos interese... suene como una solución mejor, salvo el detalle de que esta solución acaso no valga para diferentes sitios web, por ejemplo, sino sólo para aquellos para cuya respuesta "estemos preparados" para "parsearla"... Sea como sea, mi idea del "hash", joroba, menos mal que dije que era de bombero... acaso no, pero, parece no servir para lo que se necesita aquí.

Arturo.Molina 24-07-2020 12:39:21

Cita:

Empezado por dec (Mensaje 538065)
Hola a todos,

En efecto, el asunto del "hash" puede resultar más peliagudo de lo que pudiera parecer al principio... porque cualquier cambio, como lo que menciona Neftalí, pero, también cambios que pueden incluso ser invisibles, meros cambios en la respuesta, en el HTML, producirá "hash" diferentes, y, realmente, lo que se podrá decir que se sabe es eso, que la respuesta es diferente... pero no, como se busca, si la página ha cambiado en lo que nos interesa.

Tal vez "parsear" el HTML de la respuesta buscando el posible cambio exactamente en el sitio que nos interese... suene como una solución mejor, salvo el detalle de que esta solución acaso no valga para diferentes sitios web, por ejemplo, sino sólo para aquellos para cuya respuesta "estemos preparados" para "parsearla"... Sea como sea, mi idea del "hash", joroba, menos mal que dije que era de bombero... acaso no, pero, parece no servir para lo que se necesita aquí.


Gracias Neftali y Dec

Efectivamente, los hash son diferentes; no he buscado la diferencia entre los archivos porque en realidad me da igual desde el momento en que no me sirve esa opción.

La ventaja Dec, es que, en principio, es solamente una página la que hay que controlar, así que ya me he puesto con la idea del parser, aunque la he reducido a algo menos técnico:
  1. descargo el archivo
  2. extraigo las líneas que me interesan y las guardo en otro archivo
  3. Repito el proceso una hora después
  4. Compruebo si hay diferencias entre los archivos guardados y envío un mensaje si las hay
el sistema en pricipio funciona tal y como yo necesito, ya lo iré puliendo.

Saludos y gracias


La franja horaria es GMT +2. Ahora son las 04:00:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi