Строю очень интересный сайт, на котором можно создавать ресурсы и указывать ссылку на видео с одного из 3х популярных видео-хостингов: YouTube, Vimeo и ruTube.
Созданные страницы должны выводиться плиткой, с показом картинки от видео, причем, со своего сервера - чтобы не ждать ответа от удалённого. Задача осложняется тем, что существует минимум 8 вариантов указания ссылок на эти 3 сервиса:
https://www.youtube.com/watch?v=ITwNkwoc4J0
http://youtu.be/ITwNkwoc4J0
https://www.youtube.com/embed/ITwNkwoc4J0?rel=0
http://vimeo.com/55028438
http://player.vimeo.com/video/55028438?title=0&byline=0&portrait=0&badge=0&color=e1a931
http://rutube.ru/video/6fd81c1c212c002673280850a1c56415/#.UMQYln9yTWQ
http://rutube.ru/tracks/6032725.html
http://rutube.ru/video/embed/6032725
Это всё ссылки на один и тот же клип Rammstein - Mein Herz brennt (Piano Version). Не стоит забывать еще и про юзеров, которые обязательно вставят в форму "ссылку для блога", то есть - прям тег iframe со всеми свойствами, который отдаст сервис.
Вот исходный код моего класса, пользуйтесь на здоровье. Он абсолютно самодостаточен и не завязан на MODX, требуется только cUrl.
В ответ приходит массив содержащий или ключ error с ошибкой, или ключи со ссылками image и video.
Если картинку достать не получается - будет подставлен дефолтный url. Все ссылки на видео-хостинги приводятся к единому виду.
Обращаю ваше внимание на то, что превью-картинки сохраняются на сервер, то есть достаются ровно один раз, затем можно использовать их как угодно. При инициализации класса можно указать пути для работы.
Пример использования:
require 'videothumb.class.php';
$url = isset($_GET['url']) ? trim($_GET['url']) : '';
$class = new videoThumb(array(
'imagesPath' => dirname(__FILE__) . '/images/',
'imagesUrl' => '/assets/video/images/',
'emptyImage' => 'assets/_empty.png',
));
$video = $class->process($url);
print_r($video);
Отправите ссылку через $_GET и в ответ получите массив с результатом и картинку в указанной директории.
Какое то время назад парсинг с rutube.ru поломался, видимо там что-то поменяли.
Прекрасная работа. Я думаю многие оценят.
Думаю было бы не плохо дописать еще один тип работы класса. Создание серии превью, для последующего формирования слайдшоу видео.
Круто! Спасибо.
Заметил что ссылки начинающиеся с https парсер не понимает, а Youtube в основном все такие.
Добавил поддержку https в регулярки.
шикарно мужик
Полезная вещь.
Можно еще в докрутить чтобы проглатывала адреса из мобильной версий (http://m.youtube.com/)
Вот варианты ссылок, которые я нашел для YouTube.
Регулярка простая:
Но у меня по проекту условие, что один урл в одной строке, поэтому где-то может не работать.
Странно, но у меня не создаются картинки категорически, путь возвращает, а картинки нет в папке. Права на директории 777 выставил, всё равно пусто.
Нашёл в чём дело конкретно в моей ситуации
при указании пути вида 'imagesPath' => dirname(__FILE__) . '/images/' Картинка записывается в core/cache/includes/elements/modsnippet/images, а путь возвращается как будто она записана в правильный каталог.
Да, всё верно.
Лучше указывать
В результате у меня получился вот такой вот сниппет:
У меня оно работает, насчёт красоты исполнения и\или ресурсоёмкости - увы и ах, пока ничего не тестировал, в данны момент учитывалась только работоспособность, что бы поднять проект до альфа-версии. Если у Вас есть какие то советы по оптимизации, с радостью учту.
Не понятно, что делает этот сниппет? Зачем он и выставляет плейсхолдеры, и возвращает url картинки\видео?
У меня, например, через форму отправлялся урл, для него получалась картинка и сохранялась на сервер, записывая свой адрес в ТВ ресурса. Ну а потом уже обычный вывод страниц, через getResources, с этими картинками.
А тут какая задача?
У меня задача: есть раздел с мастерклассами, они в частности состоят из видео и тестового описания. Т.е. надо выводить видео с ютубы на самой странице и картинку в анонсе, для завлекухи. Сниппет я обозвал getVideo, он из TV получает ссылку на ютубное видео. Сниппет сохраняет резултаты в плейсхолдеры, что бы удобнее было на странице/в шаблоне пользоваться этими результатами. В разделе выводится листинг анонсов. При этом случился трабл: почему то при вызове сниппета в чанке анонса картинка выставлялась только для первого анонса, а для всех последующих - назначалась картинка последнего поста. Т.е. плейсхолдеры закешировались, хотя я и вызывал плейсхолдер некешируемо - [[!+v.image]] и сам сниппет тоже [[!getVideo?url=
\[\[+tv.studioVideo\]\]
]] Потому я сделал так, что бы сниппет мог возращать требуемое значение, а не сохранять его в плейсхолдер. Теперь вызов в чанке делается так:и всё заработало.
Выходит, у тебя каждый раз запускается сниппет, обрабатывает ссылку и потом клиент тянет картинку с youtube?
При том, что сниппет, на самом деле, сохраняет эти картинки на твой сервер. В общем, я бы добавил ТВ studioImage и переделал так:
Пишем сниппет, getImage:
Таким образом, класс videoThumb инициализируется только раз и сниппет запускается только на те записи, у которых нет ТВ с картинкой. Ну а картинки потом получаются с твоего сервера. Так быстрее и логичнее.
Писал в браузере, не проверял - могут быть опечатки.
Понял, спасибо. Сегодня попробую. Подумал вот ещ сделать кастом Tv - Video. Как считаешь надо оно?
Я бы сделал - чтобы хранить и выводить ссылки на видео в одном формате, а не как юзер ввёл.
Эээ, а фильтр тут где?
Вот так вызывать:
Пральна?
Почитал сниппет повнимательнее и сделал вот так:
Завелось =) Спасибо за такое интересное решение
Да, верно. Не знаю, куда у меня там вызов в чанке делся =(
На основе этого кода будет написан полноценный снипет? было бы не плохо. В репозитории модекса нету подобных дополнений. А установка из коробки была бы кстати.
Помогите, как быть? Я переделал немного скрипт, чтобы url видео брался из текстового поля. В итоге мне выдает:
И в чем заключается вопрос?
Ты не можешь взять из массива то, что тебе нужно?
А не знаете есть ли что-то подобное для джумла или подскажите, как сделать, чтобы превьюшки генерировались автоматически?
Это самостоятельный класс, он не привязан к MODX.
Его можно использовать где угодно.
А как сделать, чтобы класс при загрузке страниц сразу загружался и генерировал превьюшки?
Здравствуйте.Это сайт только для программистов?
Это блог им. Василия Наумкина. Так что этот блог для абсолютно всех желающих его читать.
Вы зарегистрировались и можете читать и писать. Включаем логику:
1. Если этот сайт только для программистов - то вы программист и вас не должен интересовать этот вопрос. 2. Вы не программист, но вы здесь общаетесь, а значит сайт не только для программистов. 3. Вы программист и ищите сайт только для программистов, и не можете понять - такой ли этот сайт? Учитывая, как легко вы зарегистрировались - нет, не такой.
Задача решена - этот сайт не только для программистов.
Повеселил)))
OK! Я и есть "кто угодно". Данный класс очень удобный, но хотелось бы более разжёванной документации. Потому как не являясь программистом, довольно сложно понять глубокие мысли г.Безумкина.Не понятно как передать $Get['url'].например,И что её вообще надо передовать. Закинул класс в файл. В другом файле подключил. И что далее. Как вывести всё это дело "на экран".
Куда еще разжованее?! И так постоянно документацию пополняем да вылизываем до супер доступного состояния. Читайте и просвещайтесь: http://docs.modx.pro
Если не понятно, что такое $_GET, то нужно нанять программиста или купить книжку по PHP.
Такой детcкий сад никто объяснять не будет.
Я так и думал, что програмисты.
Я не программист, скорее сетевик по профессии (будущей) и верстальщик (хобби) который знает основы почти всех основных языков программирования.
Но знать основы != быть программистом.
Я рад за тебя. Всё таки правильно говорят о вашем сообществе в инете. Одно большое раздутое тщеславие и самолюбие.
Тебя тут никто не держит.
В нашей группе есть минимальный порог, 1-ое это знание основ PHP и 2-ое это желание познавать MODX Revo. У тебя нет ни 1 ни 2 пункта. И еще и желание как то оскорбить. Так что можете не задерживаться. И в любой другой подобной группе вам скажут тоже самое.
Спасибо, что зашел - а то я тут уже больше месяца никого не банил.
Кстати на счет банов. Я так понимаю система банов будет для каждого ресурса своя, но для id.modx.pro так как он на своем движке работает то у него будет общий бан на все домены?
Верно.
Если накосячишь на modx.pro - отключен будешь от всего.
Василий есть код на вывод видео на экран по ссылке?
Обычно достаточно просто обернуть ссылку в iframe - специальный класс для этого не нужен.