Как проверить видео идентификаторы YouTube? - PullRequest
39 голосов
/ 30 апреля 2010

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

Есть один?

Ответы [ 8 ]

57 голосов
/ 03 ноября 2010

См. эту тему для получения официальной информации.

Вы можете нажать это: http://gdata.youtube.com/feeds/api/videos/VIDEO_ID (Страница теперь возвращает: «Больше не доступно».)

и определить, является ли видео действительным на основе ответа

Невозможно проверить достоверность идентификатора с помощью RegEx, поскольку не все буквенно-цифровые значения являются действительными идентификаторами.

p.s. я почти уверен, что видел "тире" в идентификаторах видео

p.p.s. «подчеркивание» также является допустимым символом: http://www.youtube.com/watch?v=nrGk0AuFd_9

[a-zA-Z0-9 _-] {11} является регулярным выражением ( source ), но нет гарантии, что видео будет там, даже если регулярное выражение действительно

12 голосов
/ 31 июля 2015

С 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
   }
}
7 голосов
/ 15 февраля 2014

Если вы ищете более быстрое и более масштабируемое решение, я бы сказал, чтобы использовать 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;
}
6 голосов
/ 21 декабря 2012

Я решил эту проблему так же, как рекомендовал Роман. В моем помощнике:

Обязательно укажите ваши требования вверху файла:

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
1 голос
/ 30 апреля 2010

Я просто смотрю, является ли оно буквенно-цифровым с возможной чертой или нет. Возможно, вы захотите заглянуть в oEmbed, вы можете запросить YouTube, чтобы увидеть, является ли идентификатор действительным видео или нет.

0 голосов
/ 12 января 2019

Я думаю, что это работает для проверки, существует ли видео или нет. Другие проверки могут быть выполнены с использованием 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);
    }
}
0 голосов
/ 27 июня 2016

Просто используйте этот код:

 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's valid");
     }


 }

}
0 голосов
/ 11 марта 2014

Вот простая реализация подхода Романа в 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...