Вид топика - Топик с музыкой

Сделал новый вид топика. Позволяет загружать mp3 файлы на сервер drop.io и затем воспроизводить во флэш плеере.

Всё как на скриншоте:
Free Image Hosting at www.ImageShack.us

Теперь описание. Делал на основе этой статьи: livestreet.ru/blog/dev_documentation/195.html. Поэтому необходимо изменять некоторые файлы.
Принцип работы:
1. с помощью флэш загрузчика FancyUpload файлы загружаются на сервер с установленным LS. За один раз можно загружать несколько файлов. Тут пример: digitarald.de/project/fancyupload/3-0/showcase/photoqueue/. Есть проблема: заливать можно даже без авторизации как раз из-за флэша. Но заливать можно только файлы с расширением mp3. Проверка на стороне клиента и сервера.
2. колбэком вызывается другой скрипт, который загружает файл с сервера LS на сервер drop.io. Срок хранения — год, и, по идее, продлевается после каждого доступа к файлу. mp3 файл, который был залит на первом шаге удаляется. Процесс может длиться до 20-30 сек. в зависимости от размера файла, т.к. на том сервере он конвертируется.
3. Для каждого mp3 файла генерируется код флэш плеера и инпуты для редактирования информации об исполнителе.

Плюсы:
— хранение файлов на удалённом сервере, отпадает необходимость платить за место/траффик на сервере, где установлен LS;
— возможность загружать файлы пачкой;
Минусы:
— На каждый загружаемый файл генерируются 2 запроса к серверу;
— Каждый загружаемый файл генерирует входящий и исходящий траффик на сервер, где установлен LS;
— не гибкая установка/настройка.

Но если, несмотря на минусы, кому-то нужно это дело, отдам бесплатно, помогу настроить в меру сил и времени.

Upd.
Вот ссылка на скачку, детальное описание постараюсь в понедельник-вторник опубликовать.
narod.ru/disk/23869930000/topic_music.tgz.html
Кратко:
— тем, у кого не было никаких изменений в файлах ядра, просто распаковать (структура папок в архиве совпадает со структурой в релизе LS). Остальным — или сравнивать, где изменения, или ждать, пока я напишу :); Пока реализовано только для скина «new». Я опишу, как для других.
— выполняем запрос из файла topic_music.sql;
— в папке uploads создаём папку music и даём на нёе права на запись для вэб-сервера;
— в файле classes/lib/external/DropBox/drop_io_api.php меняем API на свой. Свой бесплатно получаем тут: api.drop.io/. Зачем? Ну на мой API ключ стоит лимит — 2000 requests per 15 minutes. Мне хватает, нескольким тоже будет хватать, а если не поменять, то может наступить момент, когда перестанет хватать. 2000 запросов в 15 минут у всех бесплатных ключей.

Всё, можно пользоваться. Если что-то не будет работать — пишите в личку или в комментарии, посмотрю.

81 комментарий

avatar
Здорово, только бы вы сделали это в виде модуля для всех! было бы просто замечательно!
avatar
К сожалению, пока только такой вариант. Не знаю, может быть и будет в виде модуля.
avatar
Выкладывайте конечно.
Очень удивительно видеть(в хорошем смысле) такие хаки от вчера зарегистрировавшегося новичка.
avatar
Выложил, пробуйте. А зарегистрировался я как раз с целью поделиться.
avatar
За***сь — как раз, что доктор прописал! Только думал над подобной реализацией для одного своего проекта. ещё бы с видео придумать — вообще было бы суппер. Автору респект ооогрооомный.
avatar
Поддерживаю! Автору огромный мегареспект, для видео бы такое прикрутить — было бы просто прекрасно
avatar
при регистрации API на данном ресурсе почему-то даёт лимит — 30 запросов с одного IP
avatar
Хм, попробовал новый аккаунт зарегистрировать. Тоже лимит 30 с одного айпи. Это вроде бы 15 минутный лимит. Пробую разобраться.
З.Ы. Если есть аналог drop.io с возможностью с пом. апи заливать mp3 и с возможностью его потом потоково воспроизвести, киньте пример, может добавлю тогда другие сервисы.
avatar
а нельзя ли как-то прикрутить YouTube/RuTube для заливки видео? Кстати RuTube поддерживает аудио форматы. Тогда и файл не ограниченно можно хранить было бы и с подключением проблем не было бы, да и с дисковым пространством тоже, небыло бы проблем… Может как-то можно использовать заливку через e-mail? У них есть такая функция, генерируется тайный e-mail и все файлы отправленные на него конвертируются и публикуются в вашем аккаунте.
avatar
avatar
Не обещаю в ближайшее время, хотя как знать)
avatar

Только приступил к тестированию.
В чем может быть проблема?
avatar
Ошибка «Uploading error» — проблема в загрузке на сервер с лайвстрит: файл не с расширением mp3, размер файла больше чем upload_max_filesize — это меняется в php.ini или .htaccess, папка uploads/music не открыта для записи.
Ошибка «Невозможно получить параметры удалённого сервера.» — это проблема с коммуникацией с drop.io. Yt работает curl, закрыт исходящий трафик, лежит drop.io
Ошибка «Невозможно загрузить файл на удалённый сервер.» — или проблема с drop.io, или max_execution_time поставить секунд на 300 (через php.ini или .htaccess)
avatar
Работаю локально на Denwer.
Нет включен.
Адрес локального сайта topic-music.livestreet/
avatar
может прокся мешает при запросе от денвера к внешнему сайту?
avatar
точнее, прокся не указана.
работают ли запросы с внешними серверами в других случаях?
avatar
У меня такая ошибка
Upload failed: timeout #0
Из-за чего может быть? Причем пишет Upload completed
avatar
Тут похоже таймаут при попытке загрузить на удалённый сервер. Какое значение max_execution_time?

З.Ы. Попробую довести до ума сообщения об ошибках.
avatar
А где можно поменять данный параметр, в .htaccess не нашел, а где еще можно поискать и как менять?
avatar
Это меняется в php.ini, если есть доступ.
Можно попробовать в .htaccess добавить строчку
php_value max_execution_time 300

Если ошибки не выдаст, то значит поменялось.
avatar
Ни через .htaccess ни через правку данного параметра в php.ini устранить проблему не удалось. Файлы размером больше 1,5МБ не грузятся(((
Будут еще предложения? )))
Кстати заметил еще один прикол, если зайти в сам топик, то плеер есть, а если смотреть на него с главной(например) то плеера нету.
avatar
Пример бы посмотреть… Или это на локальном сервере?
А на главной я плееры и не размещал, они как бы под катом.
avatar
Автору большой респект.
Так в итоге у кого-нибудь, кроме автора, получилось все до конца? Нормально зарегистрировать API, поставить все ручками и загрузить mp3 без ошибок на реальном проекте?
avatar
Ага, и меня интересует то же самое :-)
avatar
Ну у меня получилось. Только файлы больше 1,5 метра выбивает по таймауту при загрузке.
Глянуть можно тут
avatar
У меня получилось без проблем, все быстро загружается и лимита в 1.5 метра нет.
Вот пример.

Автору респект! Сам хотел сделать такое как раз с drop.io а тут бах и уже кто то постарался :)
avatar
Правда ошибочка есть в IE при просмотре топика, из за которой проигрыватель не показывался, но она легко устраняется, вот исправленный скрипт из шаблона topic_music.tpl


<script type="text/javascript">
		//<![CDATA[      
      var obj = new Swiff(DIR_WEB_ROOT+'/classes/lib/external/DropBox/swf/player.swf', {ldelim}
    id: 'player_{$smarty.section.audio.index}',
    width: 290,
    height: 24,
    vars: {ldelim}
        playerID: 1,
        autostart: 'no',
        buffer: 15,
        soundFile: '{$music.music_url[audio]}',
        titles: '{$music.music_name[audio]}'
    {rdelim},
    container: $('flash_{$smarty.section.audio.index}')
{rdelim});	
//]]>
	</script>
avatar
Для тех кто сразу не догнал в чем косяк был, то скажу так. IE не любит лишние запятые в объектах :)
avatar
Спасибо) В одном из объектов уже было такое, потом незначительно переделывал и опять добавил запятую.

Вопрос про drop.io. Ключ свой? Какой лимит? А то сверху жаловались на проблемы при регистрации.
avatar
Да ключ мой, я давно еще зарегился. Аккаунт у меня там стандартный.
avatar
Понятия не имею от чего ЭТО зависит, но на Вашем проекте так же не загрузился файл 4.4 метра, зато загрузка файла в 1.7 метра прошла без проблем.


А так же результат выполнения разный. У Вас после аплоада сразу показывается плэйер, а у меня ничего, хотя «Upload complite»

Ставил на sweb.ru, изменения добавлял руками, sql запрос выполнил

В чем может быть проблема?!?
avatar
Супер!!!
Только вопрос, а как сделать так, что бы вся музыка хранилась у меня на сервере(без ее заливки куда либо)?
И, второе, а можно ли будет как-то по ссылке (скажем — МУЗЫКА) отсортировать все виды топика музыка и вывести отдельно?
Спасибо!
avatar
Да! мне тоже это нужно…
avatar
супер конечно, если на своем сервере
avatar
Я на сколько понимаю сейчас доступна версия api 2.0
А решение сделано на 1.0

— не от сюда ли большое количество рабочих проблем?

П.С. у самого встало коряво и не грузит большие файлы, а малые грузит, но не вставляет плейер.
avatar
Обалденно, просто супер, автору респектище. Главное сразу поставил и все заработало на ура, хоть и руками изменения вносил. Спасибо огромное.
avatar
Маленькое пожелание, выше автор говорил: «А на главной я плееры и не размещал, они как бы под катом.» Можно ли как то сделать чтобы не под катом были, просто чтобы плеер был виден внизу топика вместе с остальным содержимым топика? Было бы круто.
avatar
Народ подскажите как избавиться от ката, чтобы плеер сразу в топике был, подскажите пожалуйста.
avatar
Открой шаблон topic_list.tpl
В нем после:


{$oTopic->getTextShort()}


Добавь:


{if $oTopic->getType()=='music'} 
	<br /><br />
	<div id="music">{include file='topic_music.tpl'}</div>
{/if}


Тогда плеер будет выводится всегда в списке топиков.

Лично я сделал так:


{$oTopic->getTextShort()}
{if $oTopic->getTextShort()!=$oTopic->getText()}
	<br /><br />
	( <a href="{$oTopic->getUrl()}" title="{$aLang.topic_read_more}">
	{if $oTopic->getCutText()}
		{$oTopic->getCutText()}
	{else}
		{$aLang.topic_read_more}
	{/if}
	</a> )
{else}
	{if $oTopic->getType()=='music'}
		<br /><br />
		<div id="music">{include file='topic_music.tpl'}</div>
	{/if}
{/if}


Так получается что плеер прячестя под кат, если сам кат существует, если же ката нету, тогда плеер выводится в списке топиков.
avatar
Во втором варианте в обычных топиках получаются двойные каты типа:

«Читать дальше»

«Читать дальше»
avatar
добавил отображение плейера и над и под катом, так сказать.
Решения swat'a рабочее и единственно-правильное =)
avatar
Заметил, что объем занимаемого места под ls рости стал геометрически.
Проблема вскрылась практически сразу.

А дело, видимо, в том, что сначала файл грузится на серв лс, потом отправляется на drop.io, потом удаляется с серва лс.

НО! Проблема в том, что если загрузка на drop.io не прошла, то файлик остается, таким образом забивается место.

Надо бы какой то чистящий мод добавить )
avatar
Не знаю с чем связано, но если под админом топик с музыкой принудительно вывести на главную, то музыка путается, во втором топике плеер пропадает, а в том что выведен на главную начинает проигрываться музыка со второго. Попробуйте сами админом принудительно вывести топики с музыкой из разных блогов, получается путанка:(
avatar
нет. ничего такого не произошло. на странице 2 топика с музыкой — оба сработали нормально. правда у меня проигрыватель другой стоит и делал до того, как swat решение дал.
avatar
Сегодня, ни с того, ни с сего начала выдаваться ошибка на странице добавления/редактирования топика с музыкой
«A required file was not found, please be patient and we fix this.»
— при этом музыка проигрывается.

Так же firebug нашел ошибку в коде
missing } after property list
[Break on this error] titles: 'Автор — Название' //[\n


это что-то новенькое.
avatar
На моем сайте при переходе по ссылке ptzonline.ru/blog плеер остается только в самом верхнем топике, во всех остальных что идут ниже плеер пропадает. Мало того, тот что в первом топике проигрывает не свою мелодию, а с другого топика. Где то ошибка, помогите люди ее решить пожалуйста.
avatar
Если перейти в сам топик, например по адресу ptzonline.ru/blog/humor/479.html то плеер появляется и проигрывает все правильно. В списке топиков по адресу ptzonline.ru/blog плеер в первом топике проигрывает другую мелодию, в тех что идут ниже плеера вообще не видно. Подскажите люди в чем косяк?
avatar
Замени все что есть в topic_music.tpl на:


{assign var='music' value=$oTopic->getMusic()}
{assign var='topicId' value=$oTopic->getId()}
{section name=audio loop=$music.music_name}
      <div id="audio_file_{$topicId}_{$smarty.section.audio.index}" class="container">
        <span>{$music.music_name[audio]}</span>
        <em>({$music.music_duration[audio]})</em>
        <div id="flash_mplayer_{$topicId}_{$smarty.section.audio.index}">
        </div>
      </div>
	<script type="text/javascript">
    var obj = new Swiff(DIR_WEB_ROOT+'/classes/lib/external/DropBox/swf/player.swf', {ldelim}
    id: 'Swiff_player_{$topicId}_{$smarty.section.audio.index}',
    width: 290,
    height: 24,
    vars: {ldelim}
        playerID: {$topicId},
        autostart: 'no',
        buffer: 15,
        soundFile: '{$music.music_url[audio]}', 
        titles: '{$music.music_name[audio]}' 
    {rdelim},
    container: $('flash_mplayer_{$topicId}_{$smarty.section.audio.index}')
	{rdelim});	
	</script>
{/section}
avatar
Супер, спасибо огромное, теперь все как надо в том числе и с принудительным выводом на главную. SWAT респект, плюсую!
avatar


На моем сайте процесс зависает на этом этапе.
secfilterengine off в .htaccess не помог, т.к. mod_security не установлен на сервере.

В чем может быть проблема?
avatar
Прошу прощения, картинку неверно вставил:
avatar
На твой сервер похоже файл загрузился нормально, а вот на drop.io нет.
Ключ свой юзал? Файл по меньше размером пробовал загрузить? А то я смотрю 10 метров…
  • SWAT
  • 0
avatar
да, на сервер файлы копируются.
ключ свой.
файлы до 2 мб грузятся нормально, больше 2х вот такая вот борода…
avatar
Вот какая у меня проблема, ерор, музика загруєаетсо, но не добавляєтсо, так гиф лоадера постоянно крутитсо. в логаг тоже ничего не пишет
avatar
Я возможно ошибаюсь, но у всех ли работает сегодня аплоад предложенный?
У меня на сайте (в ff периодически, в опере постоянно) выходит ошибка при загрузке страницы:
A required file was not found, please be patient and we fix this.

Причем при загрузке страницы, предложенной в качестве примера в теле топика, тоже вылезает эта ошибка :(
avatar
Незнаю что у вас там за проблемы, у меня все ок… И больше 2 мб грузятся файлы.
  • SWAT
  • 0
avatar
Похоже, что эта ошибка — временное явление.

Хотите верьте, хотите нет, но сегодня в течении вечера пытался более 10 раз загрузить один и тот же файл как на своем новом проекте, куда только что поставил скрипт, так и на чужом (SWATовском :) — не получалось. И вот после того как я отписал коммент выше (закон подлости) — тот же самый файл загрузился и на проекте SWATa и на моем сыром проекте.

Жесть.
avatar
Мб у тебя инет косячит?
avatar
да работает вроде как.
сейчас уже несколько раз подряд все без проблем.
вот только времени скрипту не хватает для загрузки 22 метров ;(
avatar
да и около 10 метров тоже не может проглотить (
avatar
Ну время это уже другой вопрос :)
avatar
А в IE никто не пробовал запускать? А то у меня вот что выдается:
File Upload
This form is just an example fallback for the unobtrusive behaviour of FancyUpload. If this part is not changed, something must be wrong with your code.

Upload a Photo:
и дальше идет форма загрузки фото и внизу идет флэш-загрузчик…
avatar
Никто так и не разобрался как хранить файлы на своем сервере? Интересный наворот, только не хочется зависеть от сторонних сервисов.
Было бы очень интересно.
avatar
Upload failed: Error caused a send or load operation to fail (Error #2038)

Вот такая вот ошибка вылезла, когда один из пользователей добавлял музыку. Что оно значит? :)
avatar
для четверки плагин такой не планируется? ))
avatar
Что то отвалилось все на том сервисе...:( The drop.io service has been discontinued. For inquiries please email support at dropio.com. drop.io обслуживание было прекращено. По всем вопросам пишите на поддержку dropio.com. Может кто подскажет альтернативные варианты как поправить скрипт или на худой конец грузить на свой хостинг?
avatar
Люди, никто не подскажет альтернативного сервиса?
avatar
чем не устраивает prostopleer.com/
avatar
я вставляю код плеера с сайта prostopleer а топик выводится пустой (((( в чем проблема кроетится? хэлп плиз!
п.с. в jevix.php добавил
array(
				'object',
				array('width' => '#int', 'height' => '#int', 'data' => array('#domain'=>array('youtube.com','embed.prostopleer.com','rutube.ru','vimeo.com')), 'type' => '#text')
			))
avatar
Купи плаги Xtext
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.