Идентификатор видео YouTube Vimeo из кода для вставки или из URL с регулярным выражением PHP RegEx - PullRequest
8 голосов
/ 23 февраля 2011

Я хочу получить идентификатор видео для YouTube или Vimeo через код для вставки или URL-адрес. Есть ли какое-либо решение для этого с помощью PHP?

Ответы [ 3 ]

20 голосов
/ 10 марта 2011

Вы можете использовать preg_match для получения идентификаторов. Я расскажу о самих выражениях позже в этом ответе, но вот основная идея о том, как использовать preg_match:

preg_match('expression(video_id)', "http://www.your.url.here", $matches);
$video_id = $matches[1];

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

  1. Для URL-адресов YouTube , таких как http://www.youtube.com/watch?v=89OpN_277yY, вы можете использовать это выражение:

    v=(.{11})
    
  2. Встраиваемые коды YouTube могут выглядеть так (некоторые посторонние предметы обрезаны):

    <object width="640" height="390">
        <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=...
        ...
    </object>
    

    Или вот так:

    <iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe>
    

    Таким образом, выражение для получения идентификатора из любого стиля будет this :

    \/v\/(.{11})|\/embed\/(.{11})
    
  3. URL-адреса Vimeo , насколько я могу судить, выглядят как http://vimeo.com/<integer>. Самый низкий уровень, который я нашел, был просто http://vimeo.com/2, и я не знаю, есть ли верхний предел, но сейчас я предполагаю, что он ограничен 10 цифрами. Надеюсь, кто-то может исправить меня, если они знают о деталях. Можно использовать это выражение:

    vimeo\.com\/([0-9]{1,10})
    
  4. Код для вставки Vimeo Код принимает форму:

    <iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
    

    Чтобы вы могли использовать это выражение:

    player\.vimeo\.com\/video\/([0-9]{1,10})
    

    В качестве альтернативы, если длина чисел может в конечном итоге превысить 10, вы можете использовать:

    player\.vimeo\.com\/video/([0-9]*)"
    

    Имейте в виду, что " нужно будет экранировать с \, если вы заключаете выражение в двойные кавычки.


В итоге , я не уверен, как вы хотели реализовать это, но вы можете либо объединить все выражения с |, либо вы можете сопоставить каждое из них по отдельности. Добавьте комментарий к этому ответу, если хотите, чтобы я предоставил дополнительную информацию о том, как объединить выражения.

2 голосов
/ 17 июня 2011

Здесь есть еще один похожий ответ [только для YouTube], может быть полезно взглянуть. PHP Regex, чтобы получить идентификатор видео YouTube?

0 голосов
/ 09 января 2015

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

$embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>';
preg_match('~embed/(.*?)"~', $embed, $output);
echo $output[1];

Спасибо

...