¿Cómo puedo verificar si el GIF actual de una API es diferente del GIF anterior guardado desde el mismo punto final de la API?
Hay una API que proporciona un archivo GIF de datos visuales del pronóstico del tiempo. Esta es la API: https://api.met.gov.my/static/images/swirl-latest.gif . Este GIF estático se actualiza de vez en cuando.
La situación: estoy tratando de obtener este GIF y guardarlo en mi base de datos, para poder tener una serie de GIF que muestren la progresión del clima a lo largo del tiempo. Mi pila actual es Nodejs, MeteorJs, MongoDB y React.
El problema: no sé con qué frecuencia se actualiza el GIF para programar un trabajo cron para obtener el nuevo GIF actualizado. Puedo configurar un trabajo cron cada n minutos/horas para obtener el GIF de la API, pero ¿cómo determinar si el último GIF obtenido es el mismo o diferente de los GIF obtenidos anteriormente en la base de datos, evitando así un ¿duplicar?
Solución potencial: dado que los GIF son básicamente una serie de imágenes, podría haber una manera de comparar dos GIF en términos de sus similitudes. Pero no estoy seguro de cómo hacerlo. Encontré un paquete npm gifuct-js que básicamente puede analizar un GIF y devolver información sobre el GIF, por ejemplo (tomado de la página de GitHub del paquete):
{ // The color table lookup index for each pixel pixels: [...], // the dimensions of the gif frame (see disposal method) dims: { top: 0, left: 10, width: 100, height: 50 }, // the time in milliseconds that this frame should be shown delay: 50, // the disposal method (see below) disposalType: 1, // an array of colors that the pixel data points to colorTable: [...], // An optional color index that represents transparency (see below) transparentIndex: 33, // Uint8ClampedArray color converted patch information for drawing patch: [...] } Dado que los GIF de la API antes mencionada pueden tener las mismas dimensiones, estoy pensando en usar pixels o colorTable de colores como punto de comparación entre los dos GIF. Pero no estoy seguro de si esto daría el resultado que quiero, es decir, determinar si los dos GIF son idénticos o no.
¡Cualquier ayuda será muy apreciada!
Haga un hash del gif anterior y el obtenido actualmente y podrá ver si hay alguna diferencia. También puede verificar el tamaño del archivo, pero en mi opinión, verificar con hash es más preciso.
La idea de Robi Hahn es más genérica y funcionará.
Pero en este caso hay otros enfoques que también funcionarán. Revisé la URL dada y las siguientes dos ideas funcionarían.
Puede verificar el last-modified del encabezado de respuesta: si es diferente de la marca de tiempo que recibió con su última solicitud hace x minutos, luego guarde la nueva imagen; de lo contrario, deséchela (ya que es la misma que su imagen ya almacenada).
O puede solicitar el .gif con el encabezado If-Modified-Since que contiene la marca de tiempo del último .gif almacenado en su base de datos. Luego, el servidor devuelve un 304 - not modified (en cuyo caso no hay un .gif más nuevo disponible) o devuelve la imagen actualizada.