Перейти к содержанию

.Дзю.

Администрация
  • Публикаций

    11658
  • Зарегистрирован

  • Посещение

  • Победитель дней

    132

Весь контент .Дзю.

  1. некоторые ссылки не работают. с чем может быть связано? Не может хеш утянуть, например Пример http://akiba.club/blog/92.html http://vk.com/video75787450_171404317- не работают http://vk.com/video-63858240_456240721- работают
  2. Спасибо!! Очень сильно выручил! Моё почтение!!
  3. Отлично! Всё работает! Только можно что бы возвращал он код без <video> </video> ?
  4. Да. строка точно такая. Вот код самого файла. Я прикрутил все сервисы таким макаром, кроме ВК который не сдаётся. С твоим кодом сейчас перестало работать, выдаёт ошибку Parse error: syntax error, unexpected '}', expecting variable (T_VARIABLE) or '$' in */Text.class.php on line 168 <?php --------------------------------------------------------- */ require_once(Config::Get('path.root.engine').'/lib/external/Jevix/jevix.class.php'); /** * Модуль обработки текста на основе типографа Jevix * Позволяет вырезать из текста лишние HTML теги и предотвращает различные попытки внедрить в текст JavaScript * <pre> * $sText=$this->Text_Parser($sTestSource); * </pre> * Настройки парсинга находятся в конфиге /config/jevix.php * * @package engine.modules * @since 1.0 */ class ModuleText extends Module { /** * Объект типографа * * @var Jevix */ protected $oJevix; /** * Инициализация модуля * */ public function Init() { /** * Создаем объект типографа и запускаем его конфигурацию */ $this->oJevix = new Jevix(); $this->JevixConfig(); } /** * Конфигурирует типограф * */ protected function JevixConfig() { // загружаем конфиг $this->LoadJevixConfig(); } /** * Загружает конфиг Jevix'а * * @param string $sType Тип конфига * @param bool $bClear Очищать предыдущий конфиг или нет */ public function LoadJevixConfig($sType='default',$bClear=true) { if ($bClear) { $this->oJevix->tagsRules=array(); } $aConfig=Config::Get('jevix.'.$sType); if (is_array($aConfig)) { foreach ($aConfig as $sMethod => $aExec) { foreach ($aExec as $aParams) { if (in_array(strtolower($sMethod),array_map("strtolower",array('cfgSetTagCallbackFull','cfgSetTagCallback')))) { if (isset($aParams[1][0]) and $aParams[1][0]=='_this_') { $aParams[1][0]=$this; } } call_user_func_array(array($this->oJevix,$sMethod), $aParams); } } /** * Хардкодим некоторые параметры */ unset($this->oJevix->entities1['&']); // разрешаем в параметрах символ & if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) { $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true); } } } /** * Возвращает объект Jevix * * @return Jevix */ public function GetJevix() { return $this->oJevix; } /** * Парсинг текста с помощью Jevix * * @param string $sText Исходный текст * @param array $aError Возвращает список возникших ошибок * @return string */ public function JevixParser($sText,&$aError=null) { // Если конфиг пустой, то загружаем его if (!count($this->oJevix->tagsRules)) { $this->LoadJevixConfig(); } $sResult=$this->oJevix->parse($sText,$aError); return $sResult; } /** * Парсинг текста на предмет видео * Находит теги <pre><video></video></pre> и реобразовываетих в видео * * @param string $sText Исходный текст * @return string */ public function VideoParser($sText) { /** * youtube.com */ $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)youtube\.com\/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); /** /** * youtu.be */ $sText = preg_replace('/<video>http:\/\/(?:www\.|)youtu.be\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>', $sText); /** * twitch */ $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<iframe src="https://player.twitch.tv/?channel=$1" frameborder="0" scrolling="no" height="315" width="560" class="youtube"></iframe>', $sText); /** * twitch */ $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?\/v\/([A-Z]{1}|[0-9]{8}).*<\/video>/Ui', '<iframe src="https://player.twitch.tv/?video=v$3" frameborder="0" scrolling="no" height="315" width="560" class="youtube"></iframe>', $sText); /** * twitch chat */ $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)twitch.tv\/([a-zA-Z0-9_\-]+)(&.+)?\/chat<\/video>/Ui', '<div align="center"><iframe src="https://www.twitch.tv/$1/chat?popout=" frameborder="0" scrolling="no" height="500" width="650"></iframe></div>', $sText); /** * vimeo.com */ $sText = preg_replace('/<video>http:\/\/(?:www\.|)vimeo\.com\/(\d+).*<\/video>/i', '<iframe src="http://player.vimeo.com/video/$1" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>', $sText); /** * rutube.ru */ $sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube\.ru\/tracks\/(\d+)\.html.*<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></EMBED></OBJECT>', $sText); /** * video.yandex.ru */ $sText = preg_replace('/<video>http:\/\/video\.yandex\.ru\/users\/([a-zA-Z0-9_\-]+)\/view\/(\d+).*<\/video>/i', '<object width="467" height="345"><param name="video" value="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="noscale"></param><embed src="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect" type="application/x-shockwave-flash" width="467" height="345" allowFullScreen="true" scale="noscale" ></embed></object>', $sText); return $sText; #Регулярка для вконтакта ini_set('display_errors', 'On'); error_reporting(E_ALL); $sText="<video>http://vk.com/video-50584238_170993059</video>"; print "$sText\n"; $regExp = '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video((?:-|)[\d]+)_((?:-|)[\d]+)(?:\?[\s\S]+|)<\/video>/i'; if(preg_match($regExp, $sText)) { preg_match_all($regExp, $sText, $sTextMatches); for($i=0;$i<count($sTextMatches[1]);$i++){ $html = file_get_contents('http://vk.com/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i]); preg_match('/\\\"hash2\\\":\\\"([a-f0-9]+)\\\"/Ui', $html, $matches); $sText = preg_replace('/(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$ } } print "$sText\n"; } /** * Парсит текст, применя все парсеры * * @param string $sText Исходный текст * @return string */ public function Parser($sText) { if (!is_string($sText)) { return ''; } $sResult=$this->FlashParamParser($sText); $sResult=$this->JevixParser($sResult); $sResult=$this->VideoParser($sResult); $sResult=$this->CodeSourceParser($sResult); return $sResult; } /** * Заменяет все вхождения короткого тега <param/> на длиную версию <param></param> * Заменяет все вхождения короткого тега <embed/> на длиную версию <embed></embed> * * @param string $sText Исходный текст * @return string */ protected function FlashParamParser($sText) { if (preg_match_all("@(<\s*param\s*name\s*=\s*(?:\"|').*(?:\"|')\s*value\s*=\s*(?:\"|').*(?:\"|'))\s*/?\s*>(?!</param>)@Ui",$sText,$aMatch)) { foreach ($aMatch[1] as $key => $str) { $str_new=$str.'></param>'; $sText=str_replace($aMatch[0][$key],$str_new,$sText); } } if (preg_match_all("@(<\s*embed\s*.*)\s*/?\s*>(?!</embed>)@Ui",$sText,$aMatch)) { foreach ($aMatch[1] as $key => $str) { $str_new=$str.'></embed>'; $sText=str_replace($aMatch[0][$key],$str_new,$sText); } } /** * Удаляем все <param name="wmode" value="*"></param> */ if (preg_match_all("@(<param\s.*name=(?:\"|')wmode(?:\"|').*>\s*</param>)@Ui",$sText,$aMatch)) { foreach ($aMatch[1] as $key => $str) { $sText=str_replace($aMatch[0][$key],'',$sText); } } /** * А теперь после <object> добавляем <param name="wmode" value="opaque"></param> * Решение не фантан, но главное работает :) */ if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) { foreach ($aMatch[1] as $key => $str) { $sText=str_replace($aMatch[0][$key],$aMatch[0][$key].'<param name="wmode" value="opaque"></param>',$sText); } } return $sText; } /** * Подсветка исходного кода * * @param string $sText Исходный текст * @return mixed */ public function CodeSourceParser($sText) { $sText=str_replace("<code>",'<pre class="prettyprint"><code>',$sText); $sText=str_replace("</code>",'</code></pre>',$sText); return $sText; } /** * Производить резрезание текста по тегу cut. * Возвращаем массив вида: * <pre> * array( * $sTextShort - текст до тега <cut> * $sTextNew - весь текст за исключением удаленного тега * $sTextCut - именованное значение <cut> * ) * </pre> * * @param string $sText Исходный текст * @return array */ public function Cut($sText) { $sTextShort = $sText; $sTextNew = $sText; $sTextCut = null; $sTextTemp=str_replace("\r\n",'[<rn>]',$sText); $sTextTemp=str_replace("\n",'[<n>]',$sTextTemp); if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) { $aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]); $aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]); $aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]); $aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]); $sTextShort=$aMatch[1]; $sTextNew=$aMatch[1].' <a name="cut"></a> '.$aMatch[3]; if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) { $sTextCut=trim($aMatchCut[1]); } } return array($sTextShort,$sTextNew,$sTextCut ? htmlspecialchars($sTextCut) : null); } /** * Обработка тега ls в тексте * <pre> * <ls user="admin" /> * </pre> * * @param string $sTag Тег на ктором сработал колбэк * @param array $aParams Список параметров тега * @return string */ public function CallbackTagLs($sTag,$aParams) { $sText=''; if (isset($aParams['user'])) { if ($oUser=$this->User_getUserByLogin($aParams['user'])) { $sText.="<a href=\"{$oUser->getUserWebPath()}\" class=\"ls-user\">{$oUser->getLogin()}</a> "; } } return $sText; } } ?>
  5. надо с тегами видео, да. работоспособность тут проверяю http://akiba.club/ но он почему то ни как не хочет этот текст подменять. ни в каком виде. оставляет без изминений
  6. Ну вот в том то и дело что оно его не преобразует почему-то. ну то есть вообще не трогает. оставляет: <video>http://vk.com/video-50584238_170993059</video>
  7. Код вставки видео вконтакте http://vk.com/video17838299_171567608 Он должен получить хеш видео и на выходе полукчить что-то типа <iframe src="//vk.com/video_ext.php?oid=-107380895&id=456239063&hash=46c2c9d459c7c898&hd=2" width="853" height="480" frameborder="0"></iframe>
  8. Братцы, кто дико рубит в ПХП? Почему данный парсер может не работать? Должен забирать видео в вк по ссылке, получать хеш и менять код $regExp = '/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video([\d]+)_([\d]+)(?:\?[\s\S]+|)<\/video>/Ui'; if(preg_match($regExp, $sText)) { preg_match_all($regExp, $sText, $sTextMatches); for($i=0;$i<count($sTextMatches[1]);$i++){ $html = file_get_contents('http://vk.com/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i]); preg_match('/\\\"hash2\\\":\\\"([a-f0-9]+)\\\"/Ui', $html, $matches); $sText = preg_replace('/<video>(?:http(?:s|):|)(?:\/\/|)(?:www\.|)vk\.com\/video'.$sTextMatches[1][$i].'_'.$sTextMatches[2][$i].'(?:\?[\s\S]+|)<\/video>/Ui', '<iframe src="http://vk.com/video_ext.php?oid='.$sTextMatches[1][$i].'&id='.$sTextMatches[2][$i].'&hash='.$matches[1].'" width="560" height="315" frameborder="0"></iframe>', $sText); } }
  9. ОО! Вот это отлично!! Всегда восхищался твоими работами, дико рад что и на Акахибаре ты в деле!!
  10. Заголовки последних новостей Акихабары теперь аккуратно выводятся в сайдабаре форума, в самой нижней колонке. Пришлось к месту, как мне кажется. Никого не напрягает?
  11. Полностью согласен по этти и мату. Так и надо сделать. Функционально позже допилю это всё. парни, спасибо всем за предложения. Обязательно займусь доработкой. Но сейчас надо уделать время и наполнению ресурса, времени на всё не хватает. Но постепенно все фишки о которых вы говорите будут появляться!
  12. что бы рейтинга было достаточно, надо хотя бы профиль заполнить))))
  13. В субботу 23 Апреля, 21:00 по Москве! Угарим по стратегии в прямом эфире! Только на Акихабаре! Все дико ломимся на Акихабару! Живое общение и телеги, например!
  14. Просто авторизироватся через него сможешь. Я постараюсь включить теги и 18+ контент. Но это не так просто оказалось. После дня рождения займусь. Парни, сам понимаю что сейчас довольно скучно там. Но в планах уже есть несколько модных задумок, после чего мы дадим рекламу и надеюсь привлечём больше людей. Просто к тому времени сайт должен выглядеть более ли менее активным, так что ещё раз благодарю всех кто активно участвует в старте нашего проекта!!
  15. Похоже что сайт мог запоминать только одну уникальную сессию, таким образом авторизировавшись на другом устройстве, сессии на всех остальных закрывались. Если я прав, то сейчас эта проблема должна изчеснуть. Прикрутил возможность хранить до 10 сессии с разных устройств, как это сделано на фейсбуке. например. Так что сейчас можно авторизироваться и на айпеде и на рабочей пекарне. Но это если я правильно установил причину вылетов... пока понаблюдаем. Спасибо за отзыв! Постараюсь решить перые 2 проблемы. Бегунок мне нравиться. = ) Какая необходимость? Тематика и о чём речь и так ясна из превью. Дико не краисво выглядит, особенно если тегов много. Есть смысл в них только как в пометке 18+ контента, но это надо другими средствами реализовать. Ну прект демократичный. Этти зашел вроде не плохо. Только надо сперва продумать как всё организовать, что бы всё не скатилось к хентай борде)))
  16. Недавно началось? Раньше было норм?
  17. авторизируешься по логину или через сец.сети?
  18. а где он там? вообще не вижу что бы проверить
  19. Рубеж - сказка для детей, хотя и добротная. Но я говорил о фильмах которые пугают, удивляют и вызывают интерес у солидной аудитории. Как раньше было с КИнг-Конгом и с той же Гадзиллой. А Годзилла выехала исключительно на фанатах. Будь там другой монстр, проходняковое бы было кинцо. А что касается детей, то они на всё конечно готовы кидатся. Но те же супергерои зашли им куда больше. По "рубежу" я толком ни игрушек не видел, ни упарывающихся по франшизе детишек. На Японском наверное, да. Но я бы хотел пойти на неё в кино в родной сельский клуб. И я не уверен что наши васюки вообще возьмут её в прокат. Няшный Годзя похожный на мигку со своими плоскими пятками всегда будет в наших сердцах. Но про него, друга детей и защитника планеты было снято почти 30 фильмов. В том числе актуальная Голливудская версия. Хотелось, для разнообразия, поглядеть на страшного и жуткого монстра, вселяющего ужас всему живому))) Добряку умилятся будем на голливудской премьере =)
  20. Да ну, брось. Для короткометражки-приколюхи - это было не плохо. Но если речь идёт о кино, полномаштабном, серьёзном, то резиновые куклы - это просто смешно. Особенно учитывая, что, на секундочку, фильму предстоит конкурировать с Годзиллой от лучшей фабрики кино в мире. Кайдзю - мёртвый жанр, не интересный никому кроме престарелых гиков выросших на франшизе. Даже детям он не особо в кайф. Вернуть к нему интерес почти не реально, но то что делает Анно - это реально круто, это вдохнёт в жанр новую жизнь. Если это будет выглядеть серьёзно, как солидное кино. А не низкобюджетный фильм от киностудии Асилум со смехотворными эффектами. По трейлеру тяжело сказать насколько крутой и качественной будет графика в фильме, но она, безусловно, очень важная составляющая успеха. Есть серьёзные опасения.
×
×
  • Создать...