Как проверить идентификаторы видео YouTube?
Я хочу проверить идентификаторы видеоизображения youtube, опубликованные в URL-адресе, на один из моих сайтов, прежде чем обращаться к API Youtube, но я не знаю, какие допустимые символы находятся в таком идентификаторе. Я вижу, что люди в сети предполагают, что могут содержать цифры и символы, но я еще не видел официальной спецификации этих идентификаторов видео.
Есть ли он?
Ответы
Ответ 1
Смотрите эту тему для официальной информации.
Вы можете поразить это: http://gdata.youtube.com/feeds/api/videos/VIDEO_ID (Страница теперь возвращается: "Больше не доступно".)
и определить, является ли видео действительным на основе ответа
Невозможно проверить достоверность идентификатора с помощью RegEx, поскольку не все буквенно-цифровые значения являются действительными идентификаторами.
PS Я почти уверен, что видел "тире" в видео идентификаторов
pps "подчеркивание" также является допустимым символом: http://www.youtube.com/watch?v=nrGk0AuFd_9
[a-zA-Z0-9 _-] {11} является регулярным выражением (источником), но нет гарантии, что видео будет там, даже если регулярное выражение допустимо
Ответ 2
С v3 API YouTube я достиг этого, позвонив:
GET https://www.googleapis.com/youtube/v3/videos?part=id&id=Tr5WcGSDqDg&key={YOUR_API_KEY}
Это возвращает что-то вроде:
{
"kind": "youtube#videoListResponse",
"etag": "\"dc9DtKVuP_z_ZIF9BZmHcN8kvWQ/P2cGwKgbH6EYZAGxiKCZSH8R1KY\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [{
"kind": "youtube#video",
"etag": "\"dc9DtKVuP_z_ZIF9BZmHcN8kvWQ/Rgd0_ApwigPcJHVX1Z2SIQ5FJtU\"",
"id": "Tr5WcGSDqDg"
}]
}
Так что вы можете просто сделать проверку:
if(json.hasOwnProperty('pageInfo') && json.pageInfo.totalResults === 1) {
if(items[0].kind==='youtube#video') {
//valid video ID
}
}
Ответ 3
Если вы ищете более быстрое и масштабируемое решение, я бы сказал, чтобы использовать REGEX с некоторым протоколированием/резервным копированием, чтобы ошибки были активными, если youtube изменит их идентификатор в будущем.
Я уже давно работаю с API YouTube, имея дело с миллионами видеороликов
, пробираясь сквозь них, я нашел, что это самый идеал:
/^[A-Za-z0-9_-]{11}$/
Более подробный пример говорит в PHP:
public static function validId($id) {
return preg_match('/^[a-zA-Z0-9_-]{11}$/', $id) > 0;
}
Ответ 4
Я решил эту проблему так же, как рекомендовал Роман. В моем помощнике:
Обязательно укажите свои требования в верхней части файла:
require "net/http"
require "uri"
Тогда:
def validate_id(youtube_id)
uri = URI.parse("http://gdata.youtube.com/feeds/api/videos/#{ youtube_id }")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
%Q{ #{response.code} }
end
Убедитесь, что между скобками в "# {response.code}" нет пробела "
Наконец, сравните его с желаемым ответом:
def youtube_data(youtube_id)
if validate_id(youtube_id) == "200"
#video is good code
else %Q{ Video is no longer valid }
end
end
Ответ 5
Я просто посмотрю, является ли это буквенно-цифровым с возможным тире или нет. Возможно, вы захотите заглянуть в oEmbed, вы можете запросить YouTube, чтобы узнать, является ли идентификатор действительным видео или нет.
Ответ 6
Вот простая реализация римского подхода в PHP:
function validYoutube($id){
$id = trim($id);
if (strlen($id) === 11){
$file = @file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$id);
return !!$file;
}
return false;
}
И вот тесты:
echo validYoutube('Nv7U6_WhqvQ');
echo validYoutube('Nv7U6_Whqvf');
echo validYoutube('Nv7U6_Whqzz');
Ответ 7
Я думаю, что это работает для проверки, существует ли видео или нет. Другие проверки могут быть выполнены с использованием REGEX, как указано выше. (Реализовано с использованием PHP)
public function verifyVideoID($videoID) {
parse_str(file_get_contents("http://youtube.com/get_video_info?el=detailpage&video_id=".$videoID), $info);
if (isset($info['errorcode'])) {
$response = ['response' => false];
return response()->json($response);
} else {
$response = ['response' => true];
return response()->json($response);
}
}
Ответ 8
Просто используйте этот код:
public class HelloWorld{
public static void main(String []args){
String expression = "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
String video_url = "https://www.youtube.com/watch?v=as3tGTN2u98";
if (video_url.matches(expression)) {
System.out.println("It valid");
}
}
}