Проверить наличие видео YouTube. PHP-скрипт проверки битых ссылок YouTube

Существует ли видео YouTube, или ссылка уже стала нерабочей?
Следующий скрипт проверяет наличие видео и разрешение публичного доступа по ссылкам двух типов: youtube.com/watch?v=... и youtu.be/...
Так можно проверить все вставленные на сайт видео, в специальном поле или внутри статей.
Закрыто ли видео от просмотра в стране, скрипт не проверяет.
Наследовано: http://stackoverflow.com/questions/1383073/how-do-i-check-if-a-video-exi...

  1. function video_exists ($id) {
  2. $headers = get_headers('https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v='.$id);
  3. if (substr($headers[0], 9, 3) == "200") {
  4. return true;
  5. } else {
  6. return false;
  7. }
  8. }
  9.  
  10.  
  11. //array of video links
  12. $y = array ('https://www.youtube.com/watch?v=El3IZFGERbM',
  13. 'https://www.youtube.com/watch?v=rN8nA2JPhdw',
  14. 'https://www.youtube.com/watch?videwatch',
  15. 'https://youtu.be/3ovCy4pceNY',
  16. 'https://www.youtube.com/watch?v=9EHXNZ-FH1wnononono' //this video does not exist exactly
  17. );
  18.  
  19. for ($i=0;$i<count($y);$i++)
  20. {
  21. $url = $y[$i];
  22. $id = '';
  23. //check the link type: youtube.com or youtu.be
  24. if ( strripos($url, 'youtube.com') ) {
  25. //get video id from youtube.com
  26. preg_match('/[?&]v=(.+)[&]*/',$url,$matches);
  27. if ($matches[1]) { $id = $matches[1]; } else {
  28. echo '<font color=red>Id видео не найден в url</font>: '.$url.'<br>';
  29. continue; //do not check for this $i
  30. }
  31. } else {
  32. //get video id from youtu.be
  33. preg_match('/be\/(.+)[?&]*/',$url,$matches);
  34. if ($matches[1]) { $id = $matches[1]; } else {
  35. echo '<font color=red>Id видео не найден в url</font>: '.$url.'<br>';
  36. continue; //do not check for this $i
  37. }
  38. }
  39.  
  40. if ( video_exists($id) ) {
  41. echo 'Есть такое: '.$url.'<br>';
  42. } else {
  43. echo '<font color=red>нет такого видео: '.$url.'</font><br>';
  44. }
  45. }

 
Если ваш массив видео будет очень большим, тогда нужно проверять по 400-500 видео за один запуск скрипта.

Если видео существует, тогда в функции video_exists() в переменной headers будет обнаружен код 200.
Если видео нет в переменной headers будет код 404.
Если видео приватное (запрещено от просмотра на других сайтах), тогда - код 403.

Для владельцев сайтов на Drupal: получить все ссылки на Ютуб из поля Yutube или Video Embed Field можно с помощью Views по материалам.

Модули: