如何检查来自API的当前GIF是否与从同一个API端点保存的当前GIF不同?
有一个API提供一个GIF文件的可视化天气预报数据。这是API:https://api.met.gov.my/static/images/swirl-latest.gif。此静态GIF不时更新。
的情况:我正在尝试获取这个GIF并将它保存在我的DB中,这样我就可以有一系列GIF来显示天气随时间的变化。我现在的堆栈是Nodejs、MeteorJs、MongoDB和React。
问题:我不知道GIF更新的频率有多高,以便调度cron作业来获取新更新的GIF。我可以为每一个n第四分钟/小时设置一个cron作业,以便从API中获取GIF,但是如何确定最新获取的GIF是否与DB中以前获取的GIF相同或不同,从而避免重复?
潜在解决方案:由于GIF基本上是一系列图像,所以可能有一种方法来比较两个GIF的相似性。但我不知道该怎么做。找到一个npm包吉夫特,它基本上可以解析GIF并返回一些有关GIF的信息,例如(摘自包的GitHub页面):
{
// 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: [...]
}由于上述API中的GIF可能具有相同的维度,所以我考虑使用pixels或colorTable作为两个GIF之间的比较点。但我不确定这是否会产生我想要的结果,即确定这两个GIF是否相同。
任何帮助都将不胜感激!
发布于 2022-04-08 08:43:56
从上一个gif和当前获取的值中创建一个散列,您可以看到是否有任何不同。您也可以检查is文件的大小,但在我看来,使用散列检查更准确。
发布于 2022-04-08 09:23:33
罗比·哈恩的想法更通用,而且会奏效。
但在这种情况下,还有其他一些方法也会奏效。我已经检查了给定的URL,下面的两个想法是可行的。
您可以检查响应-标头的last-modified-field -是否与您在x分钟前的请求中获得的时间戳不同,然后保存新映像,否则丢弃它(因为它与您已经存储的图像相同)。
或者,您可以使用包含存储在数据库中的最新.gif的时间戳的If-Modified-Since-Header来请求.gif。然后服务器要么返回一个304 - not modified (在这种情况下没有新的.gif可用),要么返回更新的图片。
https://stackoverflow.com/questions/71791385
复制相似问题