当视频被拍摄下来时,如何优雅地处理YouTube缩略图损坏的图像?
我们的网站包含一些YouTube视频列表,它们的缩略图链接到电影本身。我们从YouTube API获取缩略图URL,并在YouTube服务器上原位热链接到它们。所以我们的图像标签看起来像:当视频被拍摄下来时,如何优雅地处理YouTube缩略图损坏的图像?,youtube,youtube-api,Youtube,Youtube Api,我们的网站包含一些YouTube视频列表,它们的缩略图链接到电影本身。我们从YouTube API获取缩略图URL,并在YouTube服务器上原位热链接到它们。所以我们的图像标签看起来像: <img src="http://i.ytimg.com/vi/o6CHqSN7O-o/2.jpg" alt="" width="133" height="78" /> 问题是,有时视频会被删除,缩略图也会被删除。我们不知道什么时候会发生这种情况,我们的缩略图会变成破碎的图像。我们如何处理这
<img src="http://i.ytimg.com/vi/o6CHqSN7O-o/2.jpg" alt="" width="133" height="78" />
问题是,有时视频会被删除,缩略图也会被删除。我们不知道什么时候会发生这种情况,我们的缩略图会变成破碎的图像。我们如何处理这件事
有多种解决方案:
- 下载缩略图并将其存储在本地——当然,如果电影被删除,它将不起作用,但这没关系,它将解释它被删除了,我们避免了损坏的图像
- 定期使用API检查图像缩略图是否已更改——如果它不再存在,请替换我们自己的“已删除电影”缩略图。这是相当沉重的API调用
- 使用JavaScript替换损坏的图像(不太喜欢这个)
还有其他人处理过吗?谢谢 使用PHP请求文件,并且仅当HTTP响应代码为200时才将缩略图放在那里。如果是404或其他错误,请在那里放置其他内容(由您决定)。从服务器端的YouTube请求缩略图,将其保存到服务器上的缓存中,显示缓存的图像。这样,即使删除了原始缩略图,服务器上仍会保留缩略图。每个视频只会请求一次缩略图。 类似PHP的伪代码:
<?php
$filename = $this->get_thumbnail_filename_from_url($url); // any way to map an image URL into a filename - e.g. strip everything except [a-zA-Z0-9] from URL
if (!file_exists($cachedir . '/' . $filename)) {
$filename = $this->get_image_from_web_save_to_cache($url,$cachedir); // makes a HTTP request to the URL, saves the returned image (if any) into cache
}
$filename = basename($filename);
echo "<img src=\"/cache/$filename\">"; // display your cached thumbnail
?>
一个陷阱:如果缩略图改变,缓存的版本保持不变;但YT视频并非常见问题。这可以通过使缓存更加智能来解决,但您必须开始存储元数据(年龄、最大年龄等)并处理HTTP缓存头。缓存伪代码:
- 对象是否在缓存中?
- 如果是,缓存的版本是否新鲜?(最大年龄等)
- 如果有较新的远程版本(上次修改、etag等),请下载并存储
- 如果是,缓存的版本是否新鲜?(最大年龄等)
- else下载并存储远程版本
- 如果“下载并存储”返回404,则将图像更改为“已删除”