Intereting Posts
Как получить доступ к параметрам маршрута, сообщения, получения и т. Д. В Zend Framework 2 CakePHP – содержит (сдерживаемое поведение) слишком сильно забирает Как отрезать текст после определенного количества символов в PHP? Я не могу подключить свою страницу PHP к моему тестовому серверу SQL и базе данных Преобразование аудиофайлов в PHP Выполнение запросов в PDO без привязки Как хранить и извлекать пользовательские переменные сеанса в Drupal 6? Проблема с объектом сеанса PHP Paypal Express – добавьте скидку Чтение только одного столбца из SQL-вывода в виде числового массива в PHP Получить подробную информацию (родительский платеж) о возмещении Сервер MySQL не возвращает правильный вывод Как искать объект, привязанный к объекту, в моем поиске в Doctrine? PHP буферизованный вывод в зависимости от настроек сервера? Как сохранить форматирование пробелов с помощью PHP / HTML?

Как проверить, существует ли видео на YouTube, используя PHP?

Как проверить, существует ли видео на YouTube, используя PHP?

Как насчет использования API Youtube ?
В конце концов, это означало бы использование какого-то чиновника, который с меньшей вероятностью изменится, чем с разбором некоторой HTML-страницы.

Для получения дополнительной информации: API и инструменты YouTube – Руководство разработчика: PHP

Получение определенного видеопотока кажется довольно интересным: если вы отправляете запрос на такой URL-адрес:

http://gdata.youtube.com/feeds/api/videos/videoID 

(Замена «videoID» по идентификатору видео, конечно, – «GeppLPQtihA» в вашем примере)

Вы получите канал ATOM, если видео действительно; и "Invalid id", если это не

И я настаиваю: таким образом вы полагаетесь на документально подтвержденный API , а не на какое-то поведение, которое существует сегодня, но не гарантируется.

Youtube поддерживает формат oEmbed .
По сравнению с обработанным xml, предоставленным Паскалем МАРТИНОМ, мой компьютер должен загружать только 600 байт против 3800 байт, что делает его более быстрым и уменьшает пропускную способность (только 1/6 от размера).

 function yt_exists($videoID) { $theURL = "http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=$videoID&format=json"; $headers = get_headers($theURL); return (substr($headers[0], 9, 3) !== "404"); } $id = 'yyDUC1LUXSU'; //Video id goes here if (yt_exists($id)) { // Yep, video is still up and running :) } else { // These aren't the droids you're looking for :( } 

Запросите URL-адреса с помощью метода HEAD, например:

 HEAD /watch?v=p72I7g-RXpg HTTP/1.1 Host: www.youtube.com HTTP/1.1 200 OK [SNIP] HEAD /watch?v=p72I7g-BOGUS HTTP/1.1 Host: www.youtube.com HTTP/1.1 303 See Other [SNIP] Location: http://www.youtube.com/index?ytsession=pXHSDn5Mgc78t2_s7AwyMvu_Tvxn6szTJFAbsYz8KifV-OP20gt7FShXtE4gNYS9Cb7Eh55SgoeFznYK616MmFrT3Cecfu8BcNJ7cs8B6YPddHQSQFT7fSIXFHd5FmQBk299p9_YFCrEBBwTgtYhzKL-jYKPp2zZaACNnDkeZxCr9JEoNEDXyqLvgbB1w8zgOjJacI4iIS6_QvIdmdmLXz7EhBSl92O-qHOG9Rf1HNux_xrcB_xCAz3P3_KbryeQk_9JSRFgCWWgfwWMM3SjrE74-vkSDm5jVRE3ZlUI6bHLgVb7rcIPcg 

Как прокомментировал @dbro, ответ Паскаля МАРТИНА был приемлемым ответом в то время. Однако, поскольку API продвинулся вперед, исправлен и улучшен, новое решение работает следующим образом. Пожалуйста, обратите внимание, что это основано на технике, предоставляемой @Pascal, и я цитирую:

 ...if you send a request to an URL like this one http://gdata.youtube.com/feeds/api/videos/videoID (Replacing "videoID" by the idea of the video, of course -- "GeppLPQtihA" in your example) You'll get some ATOM feed (**STOP HERE**) 

Новый URL-адрес, используемый для V3 API, – https://www.googleapis.com/youtube/v3/videos?id={the_id_of_the_video}&key={your_api_key}&part={parts}

ГДЕ

  • {the_id_of_the_video} вы должны знать, что это такое

  • {your_api_key} – это ключ вашего приложения, который можно найти в консоли разработчика

  • {parts} список, разделенный запятыми, здесь проверьте допустимые значения

Теперь для результата

Если идентификатор видео VALID, вы получите данные в поле элементов, которое содержит идентификатор видео и информацию, которую вы запросили через параметр деталей .

Если идентификатор видео не равен VALID, вы получите пустые предметы .

Поставка неправильной клавиши дает вам ERROR 400 (объект ошибки).

Вы хотите проверить, является ли URL-адрес youtube URL-адресом реального видео YouTube? Это довольно сложно, вы можете использовать регулярные выражения, но имейте в виду, что существует множество допустимых способов выражения URL-адреса youtube:

Кроме того, видеокод может содержать буквенно-цифровые символы, символы подчеркивания, -символы (dunno, что они называются) и, возможно, больше.

Другой (неэффективный) способ – использовать cURL, чтобы получить HTML-версию предполагаемой видеостраницы и запустить некоторые регулярные выражения, чтобы убедиться, что это фактическая страница видео.

  http://www.youtube.com/watch?v=bQVoAWSP7k4  
 http://www.youtube.com/watch?v=bQVoAWSP7k4&feature=popular  
 http://www.youtube.com/watch?v=McNqjYiFmyQ&feature=related&bhablah  
 http://youtube.com/watch?v=bQVoAWSP7k4 
 var matches = $('#videoUrl').val().match(/http:\/\/(?:www\.)?youtube.*watch\?v=([a-zA-Z0-9\-_]+)/); if (matches) { alert('valid'); } else { alert('Invalid'); } 
 /** * Check youtube url, check video exists or not, * * @param $url full youtube video url * * @return string - yotube video id */ public static function checkYoutube($url) { if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match)) { $headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $match[1]); if (strpos($headers[0], '200')) { return $match[1]; } return false; } return false; } 

ссылка:

https://github.com/DimitriMikadze/php-helpers

Я использовал API YouTube для проверки наличия видео на You Tube. Я загрузил клиентскую библиотеку API Google для PHP. Я использовал следующую функцию:

 /** * Used to check if the given movie is availabe on youtube * * It uses youtube api and checks if given movie is available on youtube * If a movie is not available then it returns false * * @param string $youtube_video_url the youtube movie url * * @return boolean $is_available indicates if the given video is available on youtube */ private function IsMovieAvailable($youtube_video_url) { /** The autoload.php file is included */ include_once("autoload.php"); /** Is available is set to false */ $is_available = false; /** The youtube video id is extracted */ $video_id = str_replace("https://www.youtube.com/watch?v=", "", $youtube_video_url); $DEVELOPER_KEY = $google_api_key; $client = new \Google_Client(); $client->setDeveloperKey($DEVELOPER_KEY); // Define an object that will be used to make all API requests. $youtube = new \Google_Service_YouTube($client); // Call the search.list method to retrieve results matching the specified // query term. $searchResponse = $youtube->videos->listVideos('status', array('id' => $video_id)); /** Each item in the search results is checked */ foreach ($searchResponse['items'] as $video) { /** If the video id matches the given id then function returns true */ if ($video['id'] == $video_id) { $is_available = true; break; } } return $is_available; } 

Вы должны запросить этот URL-адрес

 https://www.googleapis.com/youtube/v3/videos?id={the_id_of_the_video}&key={your_api_key}&part=status 

После этого вы получите ответ json, который содержит поле uploadStatus

 { etag = "\"I_8xdZu766_FSaexEaDXTIfEWc0/8QgL7Pcv5G8OwpNyKYJa8PaQTc0\""; items = ( { ... status = { embeddable = 1; license = youtube; privacyStatus = public; publicStatsViewable = 1; uploadStatus = processed; }; } ); ... } 

И есть 5 возможных значений для uploadStatus

удалено, не выполнено, обработано, отклонено, загружено

Для uploadStatus = processed или uploaded => доступно ваше видео YouTube