The Ultimate YouTube regex for VideoParser
Регулярка для обработки ссылок с YouTube видеопарсером (вставляется вместо этого).
Поддерживаются следующие типы ссылок:
Сабж (с описанием):
«Короткая» версия:
P.S.: Заранее извиняюсь за выпендреж с названием топика
UPD: Немного обновил (опциональная точка между youtu и be) + поправка от PSNet
UPD 15.01.2016: Добавлен опциональный субдомен m. (m.youtube.com — при заходе с мобильных устройств)
Поддерживаются следующие типы ссылок:
(~)youtube.com/watch?v=jvtWyKYckI0 (~)youtube.com/e/jvtWyKYckI0 (~)youtube.com/embed/jvtWyKYckI0 (~)youtube.com/v/jvtWyKYckI0 (~)youtube.com/watch?some=params&v=jvtWyKYckI0 (~)youtube.com/watch?v=jvtWyKYckI0&some=params (~)youtu.be/jvtWyKYckI0 (~)youtu.be/jvtWyKYckI0&some=params (~) = : https://www. http://www. https:// http:// www. m. // ''
Сабж (с описанием):
$sYoutubeURL = '/<video>'; # video tag (begin) $sYoutubeURL .= '(?:http(?:s|):|)'; # optional URL Scheme $sYoutubeURL .= '(?:\/\/|)'; # optional // $sYoutubeURL .= '(?:www\.|m.|)'; # optional www or m subdomain $sYoutubeURL .= 'youtu(?:\.|)be'; # youtube or youtu.be $sYoutubeURL .= '(?:-nocookie|)'; # youtube-nocookie $sYoutubeURL .= '(?:\.com|)'; # optional '.com' (may be '.be') $sYoutubeURL .= '\/(?:'; # Optional group path alternatives: $sYoutubeURL .= 'e(?:mbed|)\/'; # /e/ or /embed/ $sYoutubeURL .= '|v\/'; # /v/ $sYoutubeURL .= '|watch\?(?:.+&|)'; # watch - with optional params $sYoutubeURL .= 'v=|)'; # video pre-id $sYoutubeURL .= '([a-zA-Z0-9_\-]+?)'; # video id $sYoutubeURL .= '(&.+)?'; # optional params (after video id) $sYoutubeURL .= '<\/video>/Ui'; # video tag (end) $sText = preg_replace( $sYoutubeURL, '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>', $sText );
«Короткая» версия:
$sText = preg_replace( '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|m.|)youtu(?:\.|)be(?:-nocookie|)(?:\.com|)\/(?:e(?:mbed|)\/|v\/|watch\?(?:.+&|)v=|)([a-zA-Z0-9_\-]+?)(&.+)?<\/video>/Ui', '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>', $sText );
P.S.: Заранее извиняюсь за выпендреж с названием топика
UPD: Немного обновил (опциональная точка между youtu и be) + поправка от PSNet
UPD 15.01.2016: Добавлен опциональный субдомен m. (m.youtube.com — при заходе с мобильных устройств)
34 комментария
Вот с таким вот костылём приходиться работать:
В поддержке ВК меня кинули на эту страницу vk.com/dev/video.get
Для каждого видео из вконтакта идет загрузка странички с видео из вконтакта, т.е. идут запросы к вконтакту, это необходимо для получения значения hash видео. К счастью это происходит только при добавлении или редактировании топика или коммента, соответственно в этот момент возможен «небольшая» задержка, по другому пока не получается.
Допускаются ссылки вида
Код (добавить в Text.class.php в функцию VideoParser):
Не забудьде добавить vk.com в jevix.php
В строке
Нужно удалить '' и ''
Парсер обрезал в прошлом сообщении
Может графически показать можете?
некоторые так и делают не пользуясь тегами…
Подскажите с обработкой плз
<video>
и использовать правки ниже<video>
по бокам, то будет «косяк» — iframe также сделается ссылкой (ведь в ссылке будет http) со всякими тамrel="nofollow"
заменить на
для инвертирования модификатора жадности и чтобы забрать весь ид видео если вся ссылка аккуратная и без каки
<video>