Подтвердить что ты не робот

Как проверить идентификаторы видео YouTube?

Я хочу проверить идентификаторы видеоизображения youtube, опубликованные в URL-адресе, на один из моих сайтов, прежде чем обращаться к API Youtube, но я не знаю, какие допустимые символы находятся в таком идентификаторе. Я вижу, что люди в сети предполагают, что могут содержать цифры и символы, но я еще не видел официальной спецификации этих идентификаторов видео.

Есть ли он?

4b9b3361

Ответ 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");
     }


 }

}