Вставка видео из Вконтакте, Livestreet 0.4

Давно хотел сделать возможность добавления видео из вконтакте.

Нам понадобится отредактировать файл: engine/modules/text/Text.class.php
Update 14.07.2010: Под 0.3.1 тоже работает.

Простая версия


Открываем, ищем:
public function VideoParser($sText) {
		/**
		 * youtube.com
		 */		
		$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<object width="425" height="344"><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></param></embed></object>', $sText);		
		/**
		 * rutube.ru
		 */		
		$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<OBJECT width="470" height="353"><param name="wmode" value="opaque"></param><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></param></EMBED></OBJECT>', $sText);				

и после добавляем код:

		/**
		 * vkontakte.ru
		 */		
		$sText = preg_replace('/<video>http:\/\/vkontakte\.ru\/(.*)<\/video>/Ui', '<iframe src="http://vkontakte.ru/$1" width="607" height="360" frameborder="0"></iframe>', $sText);


На этом можно закончить, и копировать url видео из кода, который появляется по ссылке «Получить код видео» (код обернут в тег iframe).

Пример использования.
Вконтакте нажимаем ссылку «получить код видео», получаем нечто вроди:
<iframe src="http://vkontakte.ru/video_ext.php?oid=22344263&id=136953491&hash=3fe77bef85c2d9d8" width="607" height="360" frameborder="0"></iframe>

Извлекаем url: vkontakte.ru/video_ext.php?oid=22344263&id=136953491&hash=3fe77bef85c2d9d8 (обязательно с http:// вначале).
И вставляем его в лайвстрит в тег video.

Продвинутое использование


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

Тот же файл, на несколько строк ниже:
/**
	 * Парсит текст
	 *
	 * @param string $sText
	 */
	public function Parser($sText) {
		$sResult=$this->FlashParamParser($sText);
	

после этого добавляем код:
$sResult=preg_replace('/<iframe src=\"http:\/\/vkontakte\.ru\/(.*)\"(.*)\"><\/iframe>/Ui','<video>http://vkontakte.ru/$1</video>',$sResult);

Код выше меняет html код с тегом iframe, который предлагает вконтакте на код <videо> </videо>

Пример использования.
Вконтакте нажимаем ссылку «получить код видео», получаем нечто вроди:
<iframe src="http://vkontakte.ru/video_ext.php?oid=22344263&id=136953491&hash=3fe77bef85c2d9d8" width="607" height="360" frameborder="0"></iframe>

Вставляем этот код к нам на страницу, без каких-либо правок. Радуемся.

49 комментариев

avatar
в закладки
спасибо
avatar
а то что тег iframe не доходит до строчки обработки?:
$this->oJevix->cfgSetTagCutWithContent(array('script', 'iframe', 'style'));
avatar
извините, функции в другой последовательности вызываются.
avatar
извините, функции в другой последовательности вызываются.
avatar
код работает. если используете tinymce, то нужно при его инициализации добавить:
extended_valid_elements : "iframe[name|src|framespacing|border|frameborder|scrolling|title|height|width]",

и тогда как обычно вставляется видео — при нажатии на иконку видео, вставляется код.
avatar
Подскажите, пожалуйста, в какой файл вставлять? я так подозреваю что в tiny_mce_src.js
и куда именно?
А то я сделал поиск по «extended_valid_elements» — в этом файле таких подстрок довольно много.
avatar
в 0.3 не работает(
avatar
А реально ли это как-то сделать в виде плагина для ЛС 0.4 и выше?
avatar
зачем минусить… не понятно…
сделал всё как здесь написано на 0.3, всё равно трёт видео, ничего не отображается, кто-нибудь может подсказать в чём трабла?
avatar
на каком этапе трёт видео на сервере или на клиенте? какой визуальный редактор? стандартный или тайни? если тайни, то см livestreet.ru/blog/tips_and_tricks/4823.html#comment72148
avatar
Под 0.3.1 работает. Вы видимо допустили ошибку и не правильно вставили код.
avatar
правил здесь:classes/modules/sys_text/text.class.php

после тех строчек как здесь указано.
пробовал в стандартном редакторе 2 варианта

видео после публикации не появляется
avatar
Закачайте куда-нибудь ваш classes/modules/sys_text/text.class.php, чтобы посмотреть почему у вас не работает.
avatar
у меня такая же ситуация, код залил вот сюда.
просто после добавления сообщения, с видео, появляется пустой пост, и все.
avatar
У вас ошибка в 122 строчке:
/**
                 * youtube.com
                 */
                $sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<object width="425" height="344"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></embed></param></param></embed></object>', $sText);
                /**
                 * rutube.ru
                 */
                $sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<OBJECT width="470" height="353"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></embed></param></param></EMBED></OBJECT>', $sText);
                return $sText; //вот тут ошибка
                /**
                 * vkontakte.ru
                 */
                $sText = preg_replace('/<video>http:\/\/vkontakte\.ru\/(.*)<\/video>/Ui', '<iframe src="http://vkontakte.ru/$1" width="607" height="360" frameborder="0"></iframe>', $sText);


Нужно так:
/**
                 * youtube.com
                 */
                $sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<object width="425" height="344"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></embed></param></param></embed></object>', $sText);
                /**
                 * rutube.ru
                 */
                $sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/Ui', '<OBJECT width="470" height="353"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></embed></param></param></EMBED></OBJECT>', $sText);

                /**
                 * vkontakte.ru
                 */
                $sText = preg_replace('/<video>http:\/\/vkontakte\.ru\/(.*)<\/video>/Ui', '<iframe src="http://vkontakte.ru/$1" width="607" height="360" frameborder="0"></iframe>', $sText);
                return $sText;

rghost.ru/2128681
avatar
вот спасибо, вам!
теперь все работает великолепно!:)
avatar
Работает все. Я такую же ошибку допустил. Зря, что раньше на вас не наскочил.

Только, за время код сменился немного :)

/**
                 * vk.com
                 */
                $sText = preg_replace('/<video>http:\/\/vk\.com\/(.*)<\/video>/Ui', '<iframe src="http://vk.com/$1" width="607" height="360" frameborder="0"></iframe>', $sText);
avatar
Не совсем в тему топика, но тем не менее не хочется плодить топики ради пары вопросов.

Возможно ли подобное «продвинутое использование», как в данном примере со вставкой видео с ВКонтакте, применить и к YouTube, RuTube видео? То есть чтобы пользователь мог добавить просто код плеера в топик.

И еще одно. В YouTube видео есть такой момент, что люди зачастую используют видео с дополнительным текстом в конце ссылки. Бывает, что просто переходят на похожий ролик и ссылка получается вида: www.youtube.com/watch?v=11111111111&feature=related

Каким образом можно удалить &feature=related, чтобы видео отображалось? Или это моя индивидуальная проблема и искать нужно у себя где-то?

Код движка практически не менял, кроме изменения размера видео и добавления видео с контакте.

Заранее благодарю за ответы ))
avatar
упс. на тему продвинутого использования для ютуб погорячился. Случайно пробовал битый код вставить )) Все работает =))

А вот с окончанием &feature=related по прежнему не эмбардится плеер =/
avatar
LS 0.4.2
Простая версия — работает отлично.
Продвинутое использование — неработает. Все делал как написано выше.
Вот мой Text.class.php
avatar
Также при простой версии фрейм с видео перекрывает все всплывающие окна (например окно авторизации)
avatar
Моё скромное мнение. По хорошему, разработчики движка давно уже должны были сами решить эту проблему и выпустить апдейт.
avatar
LS 0.4.2 — работает отлично простая версия.
но есть некрасивость, в том что: к примеру при авторизации,
видео из вконтакте закрывает окно ввода пароля на половину,
Safari
Хром
Опера
— в 8 эксплорере (авторизация на новой странице)
в мазиле часть окна заднего плана скрывается (терпимо)
avatar
LS 0.3
Простая версия работает, расширенная напрочь отказывается
  • Xmk
  • 0
avatar
Я думаю ошибка здесь
avatar
Я думаю в таком случае не работала бы и обычная версия :)
avatar
точно… не углядел
avatar
продвинутый код работает! Спасибо! ))
avatar
привет! я сделал все, как было описано. но, при вставке кода, в админке ролик появляется. а вот при публикации поста — он пропадает.

в чем может быть затык?
avatar
У меня также. Ни в какую не хочет(
Да, поддерживаю мутацию хака в плагин)
avatar
Аналогично. В чём проблема?
avatar
кто может оформить в плагин плачу 10 у.е =)) я думаю я не один такой =))
avatar
Все варианты перепробовал, ну никак не хочет видео из вконтакат вставляться. Кто может в плагин сделать? Ну или как это делаетс], может я сам возьмусь)
  • veds
  • 0
avatar
Получилось?
Могу выслать вам отредактированный Text.class.php пишите в личку.
avatar
если исходить из принципов сообщества, то стоило бы выложить решение на всеобщий доступ
может кому-то пригодится
avatar
Не вопрос.
Вот выкладываю на шару исправленный Text.class.php с возможностью добавления ссылки види
<iframe src="http://vkontakte.ru/video_ext.php?oid=22344263&id=136953491&hash=3fe77bef85c2d9d8" width="607" height="360" frameborder="0"></iframe>
avatar
Версия 0.4.2. Сделал все как на верху. Все два варианта. В редакторе пояляется плеер, добавил новость, а в новости пусто почему так?
avatar
Все сделал отключил редактор tiny
avatar
кто может оформить в плагин плачу 10 у.е =)) я думаю я не один такой =))
Держите livestreetcms.com/addons/view/104/

Пока на модерации, можно скачать отсюда — rghost.ru/3689548
avatar
Доброго времени суток!
Пробовал прописывать в Text.class.php как в первом варианте так и во втором, пробовал активировать плагин… а видео с ВКонтакте не работает.
По первому варианту: видео ссылка /видео — после опубликования получается активная ссылка
По второму варианту: ничего нет :) т.е. в редакторе видно, что видео подгрузилась, а после опубликования его нет.
Подскажите пожалуйста в чем дело.
Заранее благодарю.
avatar
у меня тоже не получилось не работает
avatar
Кэш попробуйте почистить
avatar
спасибо но отказался от этого плагина на данный момент
avatar
Здравствуйте народ у кого есть файл: engine/modules/text/Text.class.php
при стандартном варианте я так понял ютуб рутюб и + плагин видосы из контакта есть еще куча видео хостов у кого больше этих трех можете поделиться? буду очень признателен
avatar
Ребят, кто-то сможет мне все это настроить?
avatar
а для 5.1? пробую не получается
avatar
Подскажите, пожалуйста, работает ли у кого-то вставка видео через тег video такой ссылки:
http://vk.com/video8395902_160934212


Тоже самый вопрос и про rutube
avatar
Для того, чтобы работал второй вариант, когда вставляете вместе с
avatar
Для того, чтобы работал второй вариант, когда вставляете вместе с iframe, нужно поправить строчку:
$sResult=preg_replace('/<iframe src=\"\/\/vk\.com\/(.*)\"(.*)\"><\/iframe>/Ui','http://vk.com/$1',$sResult);
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.