3

私たちのサイトには、サムネイルが映画自体にリンクされた YouTube ビデオのリストがいくつか含まれています。YouTube API からサムネイルの URL を取得し、YouTube のサーバー上でその場でホットリンクします。イメージタグは次のようになります。

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

問題は、ビデオが削除されることがあることです。サムネイルも削除されます。いつそれが起こるかわかりませんし、サムネイルが壊れた画像に変わるだけです。どうすればこれを処理できますか?

いくつかの解決策があります。

  • サムネイルをダウンロードしてローカルに保存します。もちろん、削除された場合、ムービーは機能しませんが、問題ありません。削除されたことを説明し、壊れた画像を回避します。

  • API で定期的にチェックして、画像のサムネイルが変更されているかどうかを確認します。画像のサムネイルが変更されていない場合は、独自の「削除された映画」のサムネイルに置き換えてください。これは、API 呼び出しにかなり負担がかかります。

  • JavaScript を使用して壊れた画像を置き換えます (これはあまり好きではありません)。

私たちの理想的な解決策は、映画がダウンしたときにわかりやすい「移動が削除された」画像を表示する YouTube 上の場所を img src でポイントすることです。しかし、それは存在しないようです。

他の誰かがこれに対処しましたか?ありがとう!

4

2 に答える 2

1

サーバー側で YouTube にサムネイルをリクエストし、サーバー上のキャッシュに保存し、キャッシュされた画像を表示します。そうすれば、元のサムネイルが削除されても、サーバーにサムネイルが残ります。サムネイルは、動画ごとに 1 回だけリクエストされます。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
?>

1 つの落とし穴: サムネイルが変更されても、キャッシュされたバージョンは同じままです。ただし、YT 動画では一般的な問題ではありません。これは、キャッシュをよりインテリジェントにすることで解決できますが、メタデータ (age、max-age など) の保存を開始し、HTTP キャッシュ ヘッダーを処理する必要があります。疑似コードのキャッシュ:

  • オブジェクトはキャッシュにありますか?
    • はいの場合、キャッシュされたバージョンは最新ですか? (最大年齢など)
      • 新しいリモート バージョン (最終変更、etag など) がある場合は、ダウンロードして保存します。
  • それ以外の場合は、リモート バージョンをダウンロードして保存します
  • 「ダウンロードして保存」で 404 が返された場合は、画像を「削除済み」に変更します
于 2010-05-05T09:17:53.620 に答える
0

PHP を使用してファイルを要求し、HTTP 応答コードが 200 の場合にのみサムネイルを配置します。404 またはその他のエラーの場合は、別のものを配置します (決定します)。

于 2010-05-05T08:57:16.140 に答える