Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Помогите чайнику плз

0 views
Skip to first unread message

Sergey Anohin

unread,
Aug 23, 2019, 4:05:02 PM8/23/19
to
Hello!

сабж. Хочу для ютюба запилить.
function convertYoutube($string) {
return preg_replace(

"/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
"<iframe class=\"ext-video\"
src=\"//www.youtube.com/embed/$2\" allowfullscreen></iframe>",
$string
);
}

// youtube
$var4=$arr[0];

if(preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
$var4))
{
$var5=convertYoutube(implode($url));
return sprintf($var5);

}


Проблема такая, ссылки формата youtu.be нормально, у вот youtube.com ломаются
так:
например httpswww.youtube.com/watchv=opYFGBEBw7M , улетели слеши и двоеточие,
вроде как с делимиттером косяки в регексе.
сабж

С наилучшими пожеланиями, Sergey Anohin.

Oleg Redut

unread,
Aug 26, 2019, 1:50:01 AM8/26/19
to
Доброе (current) время суток, Sergey!

SA> Проблема такая, ссылки формата youtu.be нормально, у вот youtube.com
SA> ломаются так: например httpswww.youtube.com/watchv=opYFGBEBw7M ,
SA> улетели слеши и двоеточие, вроде как с делимиттером косяки в регексе.
SA> сабж

Что может быть на входе в preg_replace и что нужно получать на выходе?

Что я могу еще сказать?..
Oleg

... AKA oleg(&)redut.info AKA ICQ 28852595

Sergey Anohin

unread,
Aug 26, 2019, 3:10:01 AM8/26/19
to
Hello, Oleg!

OR> Что может быть на входе в preg_replace и что нужно получать на выходе?

на входе это var_dump($var4);

string(49) "https://en.wikipedia.org/wiki/Pierre_de_Gaillande" string(28)
"https://youtu.be/ZnEo2GKwNog" string(28) "https://youtu.be/E-dJs1Lnvzs"
string(28) "https://youtu.be/M67QqkZx1oE" string(32)
"https://yadi.sk/d/4PKsz6ubrEfFxA"

string(35) "https://youtu.be/kYpxGoWzFr8?t=4551"

string(48) "https://zx-pk.ru/entries/352-dvk-za-5-minut.html" string(43)
"https://www.youtube.com/watch?v=opYFGBEBw7M"

Sergey Anohin

unread,
Aug 26, 2019, 3:10:01 AM8/26/19
to
Hello, Oleg!

SA>> Проблема такая, ссылки формата youtu.be нормально, у вот youtube.com
SA>> ломаются так: например httpswww.youtube.com/watchv=opYFGBEBw7M ,
SA>> улетели слеши и двоеточие, вроде как с делимиттером косяки в регексе.
SA>> сабж
OR> Что может быть на входе в preg_replace и что нужно получать на выходе?

Старый код был таким:
if(in_array($url['host'], array('www.youtube.com', 'youtube.com'))
&& $url['path'] == '/watch'
&& isset($url['query']))
{
parse_str($url['query'], $query);
return sprintf('<iframe class="ext-video"
src="https://www.youtube.com/embed/%s" allowfullscreen></iframe>',
$query['v']);
}

То есть, как я понял входной урл варианты:
https://www.youtube.com/watch?v=opYFGBEBw7M
https://www.youtube.com/watch?v=0qzCu0BLRUo&feature=youtu.be
https://youtu.be/kYpxGoWzFr8?t=4551
https://youtu.be/M67QqkZx1oE

ну www. опционально. Оно для того чтобы на сайте ютюб ссылки отображались
фреймами сразу. Надеюсь понятно объяснил :)
в старом коде не поддерживается youtu.be

Oleg Redut

unread,
Aug 26, 2019, 6:25:01 AM8/26/19
to
Доброе (current) время суток, Sergey!

OR>> Что может быть на входе в preg_replace и что нужно получать на
OR>> выходе?

SA> на входе это var_dump($var4);

SA> string(49) "https://en.wikipedia.org/wiki/Pierre_de_Gaillande"
SA> string(28) "https://youtu.be/ZnEo2GKwNog" string(28)
SA> "https://youtu.be/E-dJs1Lnvzs" string(28)
SA> "https://youtu.be/M67QqkZx1oE" string(32)
SA> "https://yadi.sk/d/4PKsz6ubrEfFxA"

SA> string(35) "https://youtu.be/kYpxGoWzFr8?t=4551"

SA> string(48) "https://zx-pk.ru/entries/352-dvk-za-5-minut.html"
SA> string(43) "https://www.youtube.com/watch?v=opYFGBEBw7M"

Т.е. на входе в функцию элементы массива, а на выходе надо получить
всегда ссылки в формате

https://youtube.com/watch?v=ZnEo2GKwNog
или лучше
https://youtu.be/ZnEo2GKwNog

По сути надо выкусить и вернуть код клипа. Который и подставлять в ифрейм.

Oleg Redut

unread,
Aug 26, 2019, 6:25:01 AM8/26/19
to
Доброе (current) время суток, Sergey!

for ($i=0, $i<sizeof(var4), $i++) {
$youtube=clearLink(var4[$i]);
if ($youtube<>"") {
echo "<iframe class=\"ext-video\
src=".$youtube." allowfullscreen></iframe>";
}
}

function clearLink($url) {
return preg_match_all("/[http(s)]*:\/\/[www.]*you[\D]*[\w]*/i", $url);
}

Где-то так.

Sergey Anohin

unread,
Aug 27, 2019, 9:40:01 AM8/27/19
to
Hello, Oleg!

OR> for ($i=0, $i<sizeof(var4), $i++) {
OR> $youtube=clearLink(var4[$i]);
OR> if ($youtube<>"") {
OR> echo "<iframe class=\"ext-video\
OR> src=".$youtube." allowfullscreen></iframe>";
OR> }
OR> }
OR> function clearLink($url) {
OR> return preg_match_all("/[http(s)]*:\/\/[www.]*you[\D]*[\w]*/i", $url);
OR> }
OR> Где-то так.

Спасибо за помощь, разобрался, у меня мешала функция implode. Сорри, я не
совсем полностью
показал кусок, цикл не нужен, там это все функция и цикл где-то повыше есть
уже.
Вот итог, это черновик, не финал, рабочий вариант:

https://pastebin.com/2K1wvf1p

старый вариант закомментирован блоком. новый вариант основан на функции
convertYoutube($string).
я пока только не понял как реализовать старт видео с определенного времени, это
вроде надо
допиливать convertYoutube($string) функцию?

Sergey Anohin

unread,
Aug 27, 2019, 9:55:01 AM8/27/19
to
Hello, Sergey!

SA> Вот итог, это черновик, не финал, рабочий вариант:

имеется ввиду что if на линии 30 в общем то безнадобности уже....

Oleg Redut

unread,
Aug 30, 2019, 6:45:01 AM8/30/19
to
Доброе (current) время суток, Sergey!

SA> старый вариант закомментирован блоком. новый вариант основан на
SA> функции convertYoutube($string). я пока только не понял как
SA> реализовать старт видео с определенного времени, это вроде
SA> надо допиливать convertYoutube($string) функцию?

Я, собственно, с регуляркой мог помочь, чтобы все урлы к одному виду
приводить и лишние игнорировать.
А так, ютуб не смотрю и с его функциями не знаком. :-(

Sergey Anohin

unread,
Aug 30, 2019, 7:20:01 AM8/30/19
to
Hello, Oleg!

OR> Я, собственно, с регуляркой мог помочь, чтобы все урлы к одному виду
OR> приводить и лишние игнорировать.
OR> А так, ютуб не смотрю и с его функциями не знаком. :-(

Там добавляется t= например,

https://youtu.be/kYpxGoWzFr8?t=4551

вот но у меня функция она обрезает t=4551 и отметка старта по времени теряется,


function convertYoutube($string) {
return preg_replace(

"#\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)#i",
"<iframe class=\"ext-video\"
src=\"//www.youtube.com/embed/$2\" allowfullscreen></iframe>",
$string
);
}

Думаю что-то надо сменить тут, т.е в месте где эта функция что-то возвращает
//www.youtube.com/embed/$2\ но пока не нагуглил...

Oleg Redut

unread,
Aug 30, 2019, 9:05:01 AM8/30/19
to
Доброе (current) время суток, Sergey!

SA> https://youtu.be/kYpxGoWzFr8?t=4551

SA> вот но у меня функция она обрезает t=4551 и отметка старта по времени
SA> теряется,

А мою функцию не пробовал использовать? На входе урл, на выходе ютуб или
пустая строка. Вот так будет и ?т=4564 захватывать.

function clearLink($url) {
return preg_match_all("/[http(s)]*:\/\/[www.]*you[\D]*[\S]*/i", $url);
0 new messages