проверьте, существует ли видео с youtube api v3

Я пытаюсь проверить, является ли видео youtube (с id_video) действительным / существует, используя youtube api V3. Это то, что я делаю (y2oy7b4SFgE – это идентификатор теста видео i):

$file_headers = @get_headers('https://www.googleapis.com/youtube/v3/videos?part=id&id=y2oy7b4SFgE&key=ma_clé_api_publique'); //exit(var_dump($file_headers)); if ($file_headers[0] == 'HTTP/1.0 200 OK') { $resultat = $file_headers[0].'Goood' } else { $resultat = $file_headers[0].'PasGoood' } 

Но у меня есть «код»: 403, «message»: «На вашем API-интерфейсе настроено ограничение на каждый IP-адрес или каждый референт, и запрос не соответствует этим ограничениям. Используйте Google Developers Console для обновления вашего API если запрос от этого IP-адреса или реферата должен быть разрешен ».

Его работоспособность, когда нет ссылки. Но когда я добавляю один, я пытался с именем моего сайта или с ip моего сервера vps, каждый раз, когда он не работает.

Есть два способа узнать, существует ли видео с помощью идентификатора видео YouTube.

Самый простой способ – использовать выложенный URL для видео. Это не требует аутентификации и возвращает заголовок 404, когда видео недействительно. Вы действительно должны делать это с завитом, так как в зависимости от вашей установки file_get_contents не может быть для вас вариантом …

 $headers = get_headers('https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=' . $videoID); if(is_array($headers) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$headers[0]) : false){ // video exists } else { // video does not exist } 

Второй – использовать недавно выпущенный V3 данных api . Чтобы использовать этот метод, вам нужно создать ключ api в консоли разработчика.

 $response = file_get__contents('https://www.googleapis.com/youtube/v3/videos?part=id&id=' . $videoID . '&key=' . $apiPublicKey); $json = json_decode($response); if (sizeof($json['items'])) { // video exists } else { // video does not exist } 

В PHP очень просто проверить, существует ли видео. Используйте функцию PHP file_get_contents, чтобы проверить, существует ли какое- либо видео или нет.

 general Video URL to check a video would be $video_url = https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=VideoId $video_url = @file_get_contents('https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=Xu4MTv5wgys'); if($video_url) { echo('video exists'); } else { echo('video does not exists'); }; 

Вы нашли решение?

Официальный способ – использовать video.list и отправить идентификатор видео. В документации упоминается следующая ошибка, но она никогда не бросается:

"notFound (404) videoNotFound Видео, которое вы пытаетесь найти, не найдено. Проверьте значение параметра id запроса, чтобы убедиться, что оно правильно."

https://developers.google.com/youtube/v3/docs/videos/list?hl=de

Вот мое решение. Прежде чем вы сможете делать запросы к API, вы должны сгенерировать ключ сервера из консоли Google для разработчиков.

 $youtubeApiKey = 'YOUR_KEY'; function checkVideoWorking($videoID) { global $youtubeApiKey; $url = sprintf("https://www.googleapis.com/youtube/v3/videos?part=id&id=%s&key=%s", $videoID, $youtubeApiKey); $response = file_get_contents($url); $working = true; $decoded = json_decode($response, true); if ($decoded['pageInfo'] && $decoded['pageInfo']['totalResults'] == 0) { $working = false; } return $working; } 

Я забыл это выразить. Это решение, которое я нашел, и думаю, что это лучший способ сделать это, как google, чтобы контролировать все. Вам нужно создать открытый ключ на консоли Google, например, Google узнает, что именно ваш сайт просит его проверить видео, и он может хорошо поручить вам некоторые ваши квоты.

Я делаю следующее и проверяю код заголовка:

 $file_headers = @get_headers('https://www.googleapis.com/youtube/v3/videos?part=id&id='. $id_video .'&key='.$publicKey); if ($file_headers[0] == 'HTTP/1.0 200 OK') { $datavideo = file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=id&id='. $id_video .'&key='. $publicKey); $data = json_decode($datavideo); if ($data->items) $this->idvideo = $id_video; else ... } else { ... } 

Надеюсь, что это поможет, я получу репутацию: D