如何在视频被删除时优雅地处理YouTube缩略图图像?

时间:2010-05-05 08:54:41

标签: youtube youtube-api

我们的网站包含一些YouTube视频列表,其缩略图与电影本身相关联。我们从YouTube API中获取缩略图网址,并在YouTube服务器上就地链接到这些网址。所以我们的图片标签看起来像:

<img src="http://i.ytimg.com/vi/o6CHqSN7O-o/2.jpg" alt="" width="133" height="78" />

问题在于有时会删除视频 - 缩略图也是如此。我们不知道何时会发生这种情况,而我们的缩略图只会变成破碎的图像。我们怎么办呢?

有许多解决方案:

  • 下载缩略图并将其存储在本地 - 当然,如果删除电影,电影将无法正常工作,但是没关系,它会解释它已被删除,我们可以避免损坏图像。

    < / LI>
  • 定期检查API以查看图像缩略图是否已更改 - 如果不再存在,请替换我们自己的“已删除影片”缩略图。这对API调用非常重要!

  • 使用JavaScript替换损坏的图像(不太喜欢这个)

我们理想的解决方案是将img src指向YouTube上的某个位置,该位置会在电影关闭时显示友好的“移动移动”图像。但是,这似乎并不存在。

其他人处理过此事吗?谢谢!

2 个答案:

答案 0 :(得分:1)

在服务器端从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视频的常见问题。这可以通过使缓存更加智能来解决 - 但您必须开始存储元数据(age,max-age,...)并处理HTTP缓存头。缓存伪代码:

  • 是缓存中的对象吗?
    • 如果是,缓存版本是否新鲜? (最大年龄等)
      • 如果有更新的远程版本(最后修改,etag等),请下载并存储
  • 否则下载并存储远程版本
  • 如果“下载并存储”返回404,则将图像更改为“已删除”

答案 1 :(得分:0)

如果HTTP响应代码为200,请使用PHP来请求文件并仅将缩略图放在那里。如果是404或其他一些错误,请在那里添加其他内容(您决定)。