Перейти к содержанию
CMSTOOLS.org - форум поддержки и развития CMS

[FIX]Добавление видео 2022


Рекомендуемые сообщения

В силу того что старый метод добавления видео уже не актуален. Решил выложить новый.

Зайти в файл profile.js

Найти там

//VIDEOS
var videos = {

 

Заменить код который ниже на новый

	load: function(){
		video_lnk = $('#video_lnk').val();
		good_video_lnk = $('#good_video_lnk').val();
		if(videos.serviece(video_lnk)){
			if(video_lnk != 0){
				if(video_lnk != good_video_lnk){
					$('#box_loading').show();
					$.post('/index.php?go=videos&act=load', {video_lnk: video_lnk}, function(data){
						if(data == 'no_serviece'){
							$('#no_serviece').show();
						} else {
							row = data.split(':|:');
							$('#result_load').show();
							$('#photo').html('<img src="'+row[0]+'" alt="" id="res_photo_ok" />');
							$('#title').val(row[1]);
							$('#descr').val(row[2]);
							$('#good_video_lnk').val(video_lnk);
							$('#no_serviece').hide();
						}
						$('#box_but').show();
						$('#box_loading').hide();
					});
				} else
					$('#no_serviece').hide();
			} else
				$('#result_load').hide();
		} else
			$('#no_serviece').show();
	},
	serviece: function(request){
		var pattern = new RegExp(/http(?:s)?:\/\/www.youtube.com|http(?:s)?:\/\/youtube.com|http(?:s)?:\/\/rutube.ru|http(?:s)?:\/\/www.rutube.ru|http(?:s)?:\/\/www.vimeo.com|http(?:s)?:\/\/vimeo.com|http(?:s)?:\/\/smotri.com|http(?:s)?:\/\/www.smotri.com/i);
		return pattern.test(request);
	},

 

Зайти в файл videos.php

Найти там  //################### Добавление видео в БД ###################//

Заменить код полностью

case "send":
			NoAjaxQuery();
			
			if($config['video_mod_add'] == 'yes'){
				$good_video_lnk = ajax_utf8(textFilter($_POST['good_video_lnk']));
				$title = ajax_utf8(textFilter($_POST['title'], false, true));
				$descr = ajax_utf8(textFilter($_POST['descr'], 3000));
				$privacy = intval($_POST['privacy']);
				if($privacy <= 0 OR $privacy > 3) $privacy = 1;

				//Если youtube то добавляем префикс src=" и составляем ответ для скрипта, для вставки в БД
				if(preg_match("/src=\"https:\/\/www.youtube.com|src=\"https:\/\/youtube.com/i", 'src="'.$good_video_lnk)){
					$good_video_lnk = str_replace(array('#', '!'), '', $good_video_lnk);
					$exp_y = explode('v=', $good_video_lnk);
					$exp_x = explode('&', $exp_y[1]);
					$result_video_lnk = '<iframe width="770" height="420" src="https://www.youtube.com/embed/'.$exp_x[0].'" frameborder="0" allowfullscreen></iframe>';
				}
				
				//Если rutube, То добавляем префикс value="
				if(preg_match("/value=\"https:\/\/www.rutube.ru|value=\"https:\/\/rutube.ru/i", 'value="'.$good_video_lnk)){
					$exp_frutube = explode('?v=', $good_video_lnk);
					$result_video_lnk = '<OBJECT width="770" height="420"><PARAM name="movie" value="https://video.rutube.ru/'.$exp_frutube[1].'"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="https://video.rutube.ru/'.$exp_frutube[1].'" type="application/x-shockwave-flash" wmode="window" width="770" height="420" allowFullScreen="true" ></EMBED></OBJECT>';
				}
				
				//Если vimeo, То добавляем префикс src="
				if(preg_match("/src=\"https:\/\/www.vimeo.com|src=\"https:\/\/vimeo.com/i", 'src="'.$good_video_lnk)){
					$exp_frutube = explode('com/', $good_video_lnk);
					$result_video_lnk = '<iframe src="https://player.vimeo.com/video/'.$exp_frutube[1].'" width="770" height="420" frameborder="0"></iframe>';
				}
				
				//Если smotri, То добавляем префикс src="
				if(preg_match("/src=\"https:\/\/www.smotri.com|src=\"https:\/\/smotri.com/i", 'src="'.$good_video_lnk)){
					$exp = explode('id=', str_replace('#', '', $good_video_lnk));
					$result_video_lnk = '<object id="smotriComVideoPlayer'.$exp[1].'_1314557535.5897_7726" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="770" height="420"><param name="movie" value="https://pics.smotri.com/player.swf?file='.$exp[1].'&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="bgcolor" value="#ffffff" /><embed src="http://pics.smotri.com/player.swf?file='.$exp[1].'&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" quality="high" allowscriptaccess="always" allowfullscreen="true" wmode="opaque"  width="770" height="420" type="application/x-shockwave-flash"></embed></object>';
				}
				
				//Формируем данные о фото
				$photo = $db->safesql(ajax_utf8(htmlspecialchars(trim($_POST['photo']))));
				$photo = str_replace("\\", "/", $photo);
				$img_name_arr = explode(".", $photo);
				$img_format = totranslit(end($img_name_arr));
				$image_name = substr(md5(time().md5($good_video_lnk)), 0, 15);
				
				//Разришенные форматы
				$allowed_files = array('jpg', 'jpeg', 'jpe', 'png', 'gif');

				//Загружаем картинку на сайт
				if(in_array(strtolower($img_format), $allowed_files) && preg_match("/https:\/\//i", $photo) && $result_video_lnk){
							
					//Директория загрузки фото
					$upload_dir = ROOT_DIR.'/uploads/videos/'.$user_id;
							
					//Если нет папки юзера, то создаём её
					if(!is_dir($upload_dir)){ 
						@mkdir($upload_dir, 0777);
						@chmod($upload_dir, 0777);
					}
							
					//Подключаем класс для фотографий
					include ENGINE_DIR.'/classes/images.php';

					@copy($photo, $upload_dir.'/'.$image_name.'.'.$img_format);

					$tmb = new thumbnail($upload_dir.'/'.$image_name.'.'.$img_format);
					$tmb->size_auto('175x131');
					$tmb->jpeg_quality(100);
					$tmb->save($upload_dir.'/'.$image_name.'.'.$img_format);
				}
				
				if($result_video_lnk AND $title){
					$photo = $config['home_url'].'uploads/videos/'.$user_id.'/'.$image_name.'.'.$img_format;
					$db->query("INSERT INTO `".PREFIX."_videos` SET owner_user_id = '{$user_id}', video = '{$result_video_lnk}', photo = '{$photo}', title = '{$title}', descr = '{$descr}', add_date = NOW(), privacy = '{$privacy}'");
					$dbid = $db->insert_id();
					
					$db->query("UPDATE `".PREFIX."_users` SET user_videos_num = user_videos_num+1 WHERE user_id = '{$user_id}'");
					
					$photo = str_replace($config['home_url'], '/', $photo);
					
					//Добавляем действия в ленту новостей
					$generateLastTime = $server_time-10800;
					$row = $db->super_query("SELECT ac_id, action_text FROM `".PREFIX."_news` WHERE action_time > '{$generateLastTime}' AND action_type = 2 AND ac_user_id = '{$user_id}'");
					if($row)
						$db->query("UPDATE `".PREFIX."_news` SET action_text = '{$dbid}|{$photo}||{$row['action_text']}', action_time = '{$server_time}' WHERE ac_id = '{$row['ac_id']}'");
					else
						$db->query("INSERT INTO `".PREFIX."_news` SET ac_user_id = '{$user_id}', action_type = 2, action_text = '{$dbid}|{$photo}', action_time = '{$server_time}'");

					//Чистим кеш
					mozg_mass_clear_cache_file("user_{$user_id}/page_videos_user|user_{$user_id}/page_videos_user_friends|user_{$user_id}/page_videos_user_all|user_{$user_id}/profile_{$user_id}|user_{$user_id}/videos_num_all|user_{$user_id}/videos_num_friends");
					
					if($_POST['notes'] == 1)
						echo "{$photo}|{$user_id}|{$dbid}";
				}
			} else
				echo 'error';
			
			die();
		break;

 

Чуть ниже найти //################### Парсер . Загрузка данных о видео ###################//

Заменить код полностью

case "load":
			NoAjaxQuery();
			
			$video_lnk = $_POST['video_lnk'];
			
			if(preg_match("/https:\/\/www.youtube.com|https:\/\/youtube.com|https:\/\/rutube.ru|https:\/\/www.rutube.ru|https:\/\/www.vimeo.com|https:\/\/vimeo.com|https:\/\/smotri.com|https:\/\/www.smotri.com/i", $video_lnk)){
			
				//Открываем ссылку
				
				//Если ссылка youtube, то формируем xml ссылку для получения данных
				if(preg_match("/https:\/\/www.youtube.com|https:\/\/youtube.com/i", $video_lnk)){
					$exp_y = explode('v=', $video_lnk);
					$exp_x = explode('&', $exp_y[1]);
					$sock = fopen('https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v='.$exp_x[0].'&format=xml', 'r');
				} elseif(preg_match("/https:\/\/www.vimeo.com|https:\/\/vimeo.com/i", $video_lnk)){
					$sock = fopen('https://vimeo.com/api/oembed.xml?url='.$video_lnk, 'r');
				} else {
					$sock = fopen($video_lnk, 'r');
				}
				
				if(!$sock){
					echo 'no_serviece';
				} else {
					$html = '';
					
					//Если сервис youtube, rutube, smotri то просто выводи
					if(preg_match("/https:\/\/www.youtube.com|https:\/\/youtube.com|https:\/\/rutube.ru|https:\/\/www.rutube.ru|https:\/\/smotri.com|https:\/\/www.smotri.com/i", $video_lnk)){
						while(!feof($sock)){
							$html .= fgets($sock);
						}
					}
					
					//Если сервис Vimeo, то сразу применяем кодировку utf-8, win-1251
					if(preg_match("/https:\/\/www.vimeo.com|https:\/\/vimeo.com/i", $video_lnk)){
						while(!feof($sock)){
							$html .= ajax_utf8(fgets($sock));
						}
					}
					
					fclose($sock);
					
					//Если сервис Vimeo, то выводим без кодировки
					$data = str_replace(array('[', ']'), array('&iqu;', '&iqu2;'), $html);
					
					//Если сервис youtube применяем кодировку utf-8, win-1251
					$data_all = ajax_utf8(str_replace(array('[', ']'), array('&iqu;', '&iqu2;'), $html));

					//Если видеосервис youtube
					if(preg_match("/https:\/\/www.youtube.com|https:\/\/youtube.com/i", $video_lnk)){
						preg_match_all('`(<title>[^\[]+\</title>)`si', $data_all, $parse);
						$res_title = rn_replace(str_replace(array('<title>', '</title>'), '', $parse[1][0]));

						//Делаем фотку для youtube
						$parse_start = explode('v=', $video_lnk);
						$parse_end = explode('&', $parse_start[1]);
						$res_img = "https://img.youtube.com/vi/{$parse_end[0]}/0.jpg";
					}
					
					//Если видеосервис rutube
					if(preg_match("/https:\/\/rutube.ru|https:\/\/www.rutube.ru/i", $video_lnk)){
						$data_rutube = iconv('koi8-u', 'windows-1251', str_replace(array('[', ']'), array('&iqu;', '&iqu2;'), $html));
						
						preg_match_all('`(<meta property="og:title" content="[^\[]+\<meta property="og:description")`si', $data_rutube, $parse_rutube);
						$res_title = rn_replace(str_replace(array('<meta property="og:title" content="', '<meta property="og:description"', '" />'), '', $parse_rutube[1][0]));
						
						preg_match_all('`(<meta property="og:description" content="[^\[]+\<meta property="og:image")`si', $data_rutube, $parse_rutube_descr);
						$res_descr = rn_replace(str_replace(array('<meta property="og:description" content="', '<meta property="og:image"', '" />'), '', $parse_rutube_descr[1][0]));
						
						$exp_rutube_img = explode('v=', $video_lnk);
						$exp_img_dir = substr($exp_rutube_img[1], 0, 2);
						$exp_img_dir_2 = substr($exp_rutube_img[1], 2, 2);
						$res_img = "https://tub.rutube.ru/thumbs/{$exp_img_dir}/{$exp_img_dir_2}/{$exp_rutube_img[1]}-1.jpg";
					}
					
					//Если видеосервис vimeo
					if(preg_match("/https:\/\/www.vimeo.com|https:\/\/vimeo.com/i", $video_lnk)){
						preg_match_all('`(<title>[^\[]+\</title>)`si', $data, $parse);
						$res_title = str_replace(array('<title>', '</title>'), '', $parse[1][0]);
						
						preg_match_all('`(<thumbnail_url>[^\[]+\</thumbnail_url>)`si', $data, $parse_img);
						$res_img = str_replace(array('<thumbnail_url>', '</thumbnail_url>'), '', $parse_img[1][0]);
						
						preg_match_all('`(<description>[^\[]+\</description>)`si', $data, $parse_descr);
						$res_descr = myBrRn(rn_replace($parse_descr[1][0]));
					}
					
					//Если видеосервис smotri
					if(preg_match("/https:\/\/smotri.com|https:\/\/www.smotri.com/i", $video_lnk)){
						$html = iconv('utf-8', 'windows-1251', $html);
					
						preg_match_all('`(<meta property="og:title" content="[^\[]+\<meta property="og:image")`si', $html, $parse_title);
						$res_title = rn_replace(str_replace(array('<meta property="og:title" content="', '<meta property="og:image"', '" />'), '', $parse_title[1][0]));
						
						preg_match_all('`(<link rel="image_src" href="[^\[]+\<!-- Open Graf Protocol. Facebook/Yandex -->)`si', $html, $parse_img);
						$res_img = rn_replace(str_replace(array('<link rel="image_src" href="', '<!-- Open Graf Protocol. Facebook/Yandex -->', '" />'), '', $parse_img[1][0]));
					}

					$result_img = $res_img;
					$result_title = trim(strip_tags(strtr($res_title, array('&#39;' => "'", '&quot;' => '"', '&iqu;' => '[', '&iqu2;' => ']'))));
					$result_descr = trim(strip_tags($res_descr));
					
					if($result_img && $result_title)
						echo "{$result_img}:|:{$result_title}:|:{$result_descr}";
					else
						echo 'no_serviece';
				}
			} else
				echo 'no_serviece';
			
			die();
		break;

 

Вот и всё.

От плюса в репу не откажусь.

  • Upvote 5
Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

Доброго времени суток! Есть проблема с добавлением видео с https:// RuTube.Ru отвечает 

Цитата

Видеосервис не поддерживается либо ссылка является неправильной

  Остальное видео с https:// YouTube.Com, Vimeo.Com добавляются без проблем. Кто то сможет помочь исправить эту проблему?

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...