Как проверить видео youtube на PHP

EO
На сайте с 10.05.2005
Offline
114
3693

Здравствуйте!

Озадачился таким вопросом.

Есть в базе несколько сотен ссылок на видео на YouTube.

На сайте показывается плеер.

Захотелось как-то проверить наличие видео не ручками, а на PHP, т.е. что видео еще существует.

Раньше у меня там была обычная проверка битости ссылки - она отлично работала, теперь все ссылки показываются рабочими, т.к. youtube стал выдавать заглушку.

Использовал такой код (как советуют на stackoverflow):


$youtubeId = end(explode('/', $video));
$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $youtubeId);
$err_flag = (strpos($headers[0], '200') ? '200' : '404');
print "<p class=m2><b>Проверка:</b> ".($err_flag==200 ? 'OK' : 'BAD')."</p>";
print_r($headers);

Вот такие заголовки выводятся у рабочего видео:

Array ( [0] => HTTP/1.0 410 Gone [1] => X-GData-User-Country: NL [2] => Content-Type: text/html; charset=UTF-8 [3] => Date: Thu, 14 Jan 2016 09:12:57 GMT [4] => Expires: Thu, 14 Jan 2016 09:12:57 GMT [5] => Cache-Control: private, max-age=0 [6] => X-Content-Type-Options: nosniff [7] => X-Frame-Options: SAMEORIGIN [8] => X-XSS-Protection: 1; mode=block [9] => Server: GSE )

Вот заголовок видео, при запуске плеера, которое выдает: Такого видео не существует

Array ( [0] => HTTP/1.0 410 Gone [1] => X-GData-User-Country: NL [2] => Content-Type: text/html; charset=UTF-8 [3] => Date: Thu, 14 Jan 2016 09:12:57 GMT [4] => Expires: Thu, 14 Jan 2016 09:12:57 GMT [5] => Cache-Control: private, max-age=0 [6] => X-Content-Type-Options: nosniff [7] => X-Frame-Options: SAMEORIGIN [8] => X-XSS-Protection: 1; mode=block [9] => Server: GSE )

Т.е. во всех заголовках код 410, проверка не работает.

Что подскажите?

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
D
На сайте с 01.06.2006
Offline
141
#1


$ytapi = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=id&id=$ID&key=$APIKEY");
$json = json_decode($ytapi, true);

if (!sizeof($json['items'])) {
// видео недоступно
}
EO
На сайте с 10.05.2005
Offline
114
#2

Непонятно: $APIKEY - нужно получать у гугла?

---------- Добавлено 14.01.2016 в 10:36 ----------

Поискал по вашему коду в гугле, нашел на stackoverflow:

$headers = get_headers('https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=' . $youtubeId);
if (is_array($headers)) preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/', $headers[0]);
$err_flag = (strpos($headers[0], '200') ? '200' : '404');
print "<p class=m2><b>Проверка:</b> ".($err_flag==200 ? 'OK' : 'BAD')."</p>";

Это решение работает!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий