Опрос: Обработка ссылок на видео - какие видеохостинги нужно уметь понимать?

Ни для кого не секрет, что в наше время народ на всяческих ресурсах активно обменивается видео. Причем, далеко не только с Ютуба, но и со множества других видеохостингов. Обычно видеохостинги предлагают специальный код для вставки на форумы и прочие сторонние ресурсы. Но юзер, в массе своей, ленив, поэтому куда-то там специально жать, чтоб выбрать правильный код, большинству лень. И они втыкают ссылки, как Бог на душу положит. Например, ссылка ролик с Ютуба может выглядеть так:
https://www.youtube.com/watch?v=x-GLzEscCX4
Или так (тот же ролик):
http://youtu.be/x-GLzEscCX4
А кто-то из юзеров догадался получить HTML-код, и вставляет видео так:
<iframe width="420" height="315" src="//www.youtube.com/embed/x-GLzEscCX4" frameborder="0" allowfullscreen></iframe>
А кто-то до сих пор использует старый код вставки:
<object width="420" height="315"><param name="wmode" value="opaque"></param><param name="movie" value="//www.youtube.com/v/x-GLzEscCX4?version=3&amp;hl=ru_RU&amp;rel=0&amp;controls=0&amp;showinfo=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="//www.youtube.com/v/x-GLzEscCX4?version=3&amp;hl=ru_RU&amp;rel=0&amp;controls=0&amp;showinfo=0" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></param></embed></object>
Но есть желание несколько сгладить лень и... э-э-э... не очень высокий уровень догадливости пользователей, и уметь обрабатывать ссылки и коды видео разного формата, приводя их к одному стандартному виду, в котором видео и будет вставляться в страницу при ее просмотре.

Собственно, вопрос мой к тем, у кого есть собственные ресурсы (не обязательно на Альто), где юзеры постят видео, и заключается в следующем: а какими вообще видеохостингами пользуются ваши юзеры? Откуда они вставляют видео на ваши сайты?

Отпишитесь в комментариях, пожалуйста.

Похожие статьи

  • Вопросы по вставке gif и видео
    Доброго времени суток, появилось 2 вопроса при работе с CMS. 1.Добавление gif анимации, есть ли плагин или решение, который реализует запуск анимации по нажатию на нее? 2.Вставка видео по прямой ссылке например из ВК ...
  • Проблема со вставкой роликов Youtube в посты
    Доброго времени суток. Заметил, что при вставке роликов Youtube в посты через редактор (обрамляя тегом video), сайт по умолчанию отображает их в разрешении 144p или 360p, при том, что их реальное разрешение 1080p....
  • Топик типа «видео»
    Привет сообществу! Кто-нибудь создавал тип топика «видео»? Чтоб можно было ввести заголовок, описание и ссылку с ютуба. Или что-нибуть нестандартное. Расскажите, как писали?
  • Опросы и комменты
    Хотел написать в Предложения, но это скорее проблемы. 1. Пользователь не может удалить свой комментарий (возможно, есть решение с проверкой прав в ACL.class.php, подскажите пожалуйста). 2. Было бы логично, если б...

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

0
90% — youtube
8% — vk
1% — mail
1% — прочее…
0
А у ВК есть возможность встраивать видео на сторонний ресурс, как у Ютуба? Или это только ссылка с переходом туда?
0
Да, есть.

+1
Ютуб и vimeo.com вне конкуренции. Rutube — редко. Еще в последнее время некоторые постят ссылки на coub.
0
Сейчас есть варианты отработки разных ссылок с Youtube, Vimeo, Rutube. Добавить другие — не проблема, но хочется понять потребность и сначала наиболее востребованные добавить
0
Мне бы этих трех хватило. Кстати, вконтакт — да соглашусь, некоторые его любят. Если бы была возможность его вставлять наверно часть бы оттуда вставляла.
0
Используя код для вставки, как на скриншоте выше — вообще никаких проблем. Посмотрю, можно ли будет короткую (прямую) ссылку так же использовать
+1
Полтора года назад я не смог подцепить ВК по прямой ссылке, ссылка на видео и урл на видео-поток никак не связаны.
0
а какими вообще видеохостингами пользуются ваши юзеры?
Какими бы не пользовались в каждом конкретном месте, включать поддержку вставки объектов надо максимально возможную. Более того, если уж заниматься этим, то не заужаться на видео, а обеспечить поддержку всем возможным медиа-объектам. Ну это чтобы два раза не вставать.
Когда я занимался вставкой карты через отдельную кнопку редактора — это было как раз то самое — вставка медиа-объекта.

Какие бывают и как их можно вставлять: phpbbex.com/forum/viewtopic.php?t=32
0
Какими бы не пользовались в каждом конкретном месте, включать поддержку вставки объектов надо максимально возможную
Да в том-то и проблема, что невозможно закодировать «максимально возможную поддержку», и приходится тупо перебирать все возможные случаи. А у каждого сервиса они свои.

вставка медиа-объекта
Спорить не буду, наверное, это хорошо, но я пока не хочу замахиваться на универсальные медиаобъекты. Если сделать для начала безпроблемную вставку любого видео — уже будет хорошо.
0
посмотри по сслыке реализацию этой задачи через JS. Там становится очевидно, что video — это просто частный случай media, более того — audio/video/etc — это термин выше чем уровень парсинга ввода.
Узнал по регулярке ютуп — вставил частный случай iframe для ютупа, разглядел vimeo/etc — отработал их вставки. А что там, видео или не видео — оно ведь на самом деле известно будет лишь браузеру, который этот iframe будет отображать…….
ы?
На самом деле это терминология, но ведь вы же боретесь за красоту в наименовании переменных и способах вызова модулей?! -).

Самый простой способ — подключить реализацию media.js в виде плагина, как варинат инкапсулировать код в jevix и не нагромождать лишнего JS.
0
То, что парсить лучше на стороне сервера, а не в js — это вообще даже не обсуждается, это как само собой разумеющееся. Но кроме чисто парсинга иногда нужно еще и API сервиса дергать. У того же Rutube, например, есть несколько форматов (старые и новые), и без API невозможно обраьотать все форматы их УРЛов.

Но здравое зерно в твоих рассуждениях есть. Может, и приду, в итоге, к универсальной кнопочке «Вставить Медиа»
+1
youtube, vimeo, vk, rutube — в порядке убывания.

У себя я просто парсил текст на наличие строки с урлом и если это нужный урл — обрабатывал в media-объект.

Но я полностью переделывал парсер текста. В редактировании все выглядит вот так, а результат — такой

И совет: не делай вставку через iframe, лучше картинка+по клику уже загрузка видео. Иначе ждать, пока все видео проинициализируется, становится напряжно.

Вот я реализовывал это тут на капоине — куча видео. Но никакого дискомфорта.

А вот тут все по старинке, ощутима пауза.
0
Я правильно понимаю: у тебя любой видео УРЛ преобразуется в медиа-ообъект? Т.е. вставить просто ссылку на Ютуб без преобразования нельзя?
0
Если ссылка youtube.com/watch?v=q6s8iRsqLVs в тексте — то ссылка просто станет кликабельной.

Если это

youtube.com/watch?v=q6s8iRsqLVs

ссылка на отдельной строке без никакого другого текста, отбитой пустыми строками от остального текста — это будет обработано, как вставка видео.

Точно также с картинками: просто пишешь урл на отдельной строке, а движок сам понимает, что это картинка и выводит картинку.

А если несколько строк подряд картинок — это будет преобразовано в галерею.
+1
Хорошее минималистичное решение, мне нравится
0
Для YouTube да, самое оптимальное решение!
0
Если ссылка youtube.com/watch?v=q6s8iRsqLVs в тексте — то ссылка просто станет кликабельной.

Если это

youtube.com/watch?v=q6s8iRsqLVs

ссылка на отдельной строке без никакого другого текста, отбитой пустыми строками от остального текста — это будет обработано, как вставка видео.

Слишком сложно. Многие пользователи слова «пустые строки» не поймут, не то что различия в ссылках.
0
Автоматическое преобразовани ссылок на видео много где реализовано, очень удобно.
+1
YouTube, RuTube, Vimeo, VK

Многие видеохостинги сейчас переходят на https, поэтому сделайте пожалуйста, чтобы какую бы пользователь ссылку не вставил (с http или с https) видео распознавалось бы правильно.
0
Советую обратить внимание на oEmbed oembed.com
Статья на хабре habrahabr.ru/post/141303/
И еще вот это embed.ly (более 200-х провайдеров к разным сервисам embed.ly/embed/features/providers, но тут получается посредник)
и еще есть noembed.com (свой oEmbed с преферансом и поэтессами :) )

Список (не весь) сервисов поддержавших и реализовавших у себя oEmbed
YouTube
Vimeo
Coub
Daily Motion
Instagram
SlideShare
MixCloud
SoundCloud
Ted
Getty Images
Embedly

API для PHP есть в наличии.
Использование oEmbed API даст не только сами видюшки, но и доп. инфу которую тоже можно выводить под роликами.
+1
Пример реализации: yogatalk.ru/forum/223-vstavka-video-i-ne-tolko

Вот исходный код плагина, если вдруг интересно:
(может кто-то портирует на Альто?)

<?php

if (!defined("IN_ESOTALK")) exit;

 // An implementation of the string filter interface for plain text strings
ET::$pluginInfo["AutoLink"] = array(
	"name" => "AutoLink",
	"description" => "When you post an URL, AutoLinksLight automatically embeds videos from Youtube, Dailymotion, TwitchTV, RuTube, etc...",
	"version" => "1.2.1",
	"author" => "Ramouch0-Laticauda",
	"authorEmail" => "support@esotalk.org",
	"authorURL" => "http://esotalk.org",
	"license" => "GPLv2"
);

class ETPlugin_AutoLink extends ETPlugin {

	// ACCEPTED PROTOTYPES
	//
	var $accepted_protocols = array(
	  'http://', 'https://', 'ftp://', 'ftps://', 'mailto:', 'telnet://',
	  'news://', 'nntp://', 'nntps://', 'feed://', 'gopher://', 'sftp://' );

	//
	// AUTO-EMBED IMAGE FORMATS
	//
	var $accepted_image_formats = array(
	  'gif', 'jpg', 'jpeg', 'tif', 'tiff', 'bmp', 'png', 'svg', 'ico' );


public function handler_format_format($sender)
{
	// quick check to rule out complete wastes of time
	if( strpos( $sender->content, '://' ) !== false || strpos($sender->content, 'mailto:' ) !== false )
	{
	  $sender->content = preg_replace_callback( '/(?<=^|\r\n|\n| |\t|
|<br\/>|<br \/>)!?([a-z]+:(?:\/\/)?)([^ <>"\r\n\?]+)(\?[^ <>"\r\n]+)?/i', array( &$this, 'autoLink' ), $sender->content );
	 }
}

public function autoLink( $link = array())
{
  // $link[0] = the complete URL
  // $link[1] = link prefix, lowercase (e.g., 'http://')
  // $link[2] = URL up to, but not including, the ?
  // $link[3] = URL params, including initial ?

  // sanitise input
  $link[1] = strtolower( $link[1] );
  if( !isset( $link[3] ) ) $link[3] = '';

  // check protocol is allowed
  if( !in_array( $link[1], $this->accepted_protocols ) ) return $link[0];

  // check for forced-linking and strip prefix
  $forcelink = substr( $link[0], 0, 1 ) == '!';
  if( $forcelink ) $link[0] = substr( $link[0], 1 );

  $params = array();
  $matches = array();

  
  if( !$forcelink && ( $link[1] == 'http://' || $link[1] == 'https://' ) )
  {
	$width = 640;
	$height = 380;
	// Webm
	if( strtolower( substr( $link[2], -5 ) ) == '.webm')
	return '<video width="'.$width.'" height="'.$height.'" type="video/webm" controls="controls"><source src="'.$link[0].'" ></source></video>';
	// Mp4
	if( strtolower( substr( $link[2], -4 ) ) == '.mp4')
	return '<video width="'.$width.'" height="'.$height.'" type="video/webm" controls="controls"><source src="'.$link[0].'" ></source></video>';
	// Mp3
	else if( strtolower( substr( $link[2], -4 ) ) == '.mp3' )
	return '<audio controls="controls"><source src="'.$link[0].'"></audio>';
	// images
	elseif( preg_match( '/\.([a-z]{1,5})$/i', $link[2], $matches ) && in_array( strtolower( $matches[1] ), $this->accepted_image_formats ) )
	return '<img class="auto-embedded" src="'.$link[1].$link[2].$link[3].'" alt="-image-" title="'.$link[1].$link[2].$link[3].'" />';
	// youtube
	if( strcasecmp( 'www.youtube.com/watch', $link[2] ) == 0 && $this->params( $params, $link[3], 'v' ) )
	  return '<iframe width="'.$width.'" height="'.$height.'"  src="'.$link[1].'www.youtube.com/embed/'.$params['v'].'" frameborder="0" allowfullscreen></iframe>';
	else if( preg_match( '/^(?:www\.)?youtu\.be\/([^\/]+)/i', $link[2], $matches ))
	  return '<iframe width="'.$width.'" height="'.$height.'"  src="'.$link[1].'www.youtube.com/embed/'.$matches[1].'" frameborder="0" allowfullscreen></iframe>';
	// Vimeo
	else if( preg_match( '/vimeo\.com\/(\w+\s*\/?)*([0-9]+)*$/i', $link[2], $matches ) )
	return '<iframe src="//player.vimeo.com/video/'.$matches[1].'?color=ffffff" width="'.$width.'" height="'.$height.'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
	// Dailymotion
	else if( preg_match( '/^www\.dailymotion\.com\/(?:[a-z]+\/)?video\/([^\/]+)/i', $link[2], $matches ) )
	  return '<iframe frameborder="0" width="'.$width.'" height="'.$height.'" src="http://www.dailymotion.com/embed/video/'.$matches[1].'"></iframe>';
	// LiveLeak.com
	else if( strcasecmp( 'www.liveleak.com/view', $link[2] ) == 0 && $this->params( $params, $link[3], 'i' ) )
	  return '<embed class="video" src="http://www.liveleak.com/e/'.$params['i'].'" type="application/x-shockwave-flash" wmode="transparent"  width="'.$width.'" height="'.$height.'" align="top"></embed>';
	// Twitch TV
	elseif ( preg_match('/twitch\.tv\/(\w+\s*\/?)*([0-9]+)*$/i',$link[2], $matches))
		return '<iframe src="http://www.twitch.tv/'.$matches[1].'/embed" frameborder="0" scrolling="no" height="'.$height.'" width="'.$width.'"></iframe>';
	// Vine (format like this : https://vine.co/v/ME70KX9A2X7/)
	elseif ( preg_match('/vine\.co\/(\w+\s*\/?)*([0-9]+)*$/i',$link[2], $matches))
		return '<iframe class="vine-embed" src="https://vine.co/v/'.$matches[1].'/embed/simple" width="480" height="480" frameborder="0"></iframe><script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>';
	// Metacafe
		else if( preg_match( '/^www\.metacafe\.com\/watch\/([0-9]+)\/([^\/]+)\/?$/', $link[2], $matches ) )
		return '<iframe src="http://www.metacafe.com/embed/'.$matches[1].'" width="'.$width.'" height="'.$height.'" allowFullScreen frameborder=0></iframe>';
	// RuTube
	else if( preg_match( '/rutube\.ru\/video\/(\w+\s*\/?)*([0-9]+)*$/i', $link[2], $matches ) )
		return '<iframe src="//rutube.ru/play/embed/'.$matches[1].'" width="'.$width.'" height="'.$height.'" allowFullScreen frameborder=0></iframe>';
  }


  // default to linkifying
	return '<a href="'.$link[0].'" rel="nofollow external">'.$link[0].'</a>';

}

/*Reads query parameters
params : result array as key => value
string : query string
required : array of required parameters key
@return true if required parameters are present.
*/
function params( &$params, $string, $required )
{
  $string = html_entity_decode($string);
  if( !is_array( $required ) ) $required = array( $required );
  if( substr( $string, 0, 1 ) == '?' ) $string = substr( $string, 1 );
  $params = array();
  $bits = split( '&', $string );
  foreach( $bits as $bit ) {
	$pair = split( '=', $bit, 2 );
	if( in_array( $pair[0], $required ) ) $params[ $pair[0] ] = $pair[1];
  }
  return count( $required ) == count( $params );
}

}
?>
Отредактирован:
0
А что за плагин, можете ссылку на него мне в личные сообщения скинуть?
Где купить/скачать, кто разработчик?
0
Это к другой CMS плагин, я добавил потому что подумал, что часть кода можно было бы переиспользовать, например regexp`ы, чтоб не изобретать велосипед… Или вам именно к esoTalk нужен?
0
С livestream.com не помешало бы встраивание.
0
А как же Coub-ы? Их нужно обязательно добавить, как и Vine
0
Чем все закончилось то в итоге ? Мне вот тоже кубики нужно добавлять, а соответствующего плагина так и не нашла ((
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.