kamikaze 30.06.2011 04:24
Coding — синхронизация музыки в произвольной директории с плейлистом vkontakte
Наткнулся тут на пост, побудило на "покопаться".Исходные данные:
- аккаунт вконтакте, куда добавляется понравившаяся музыка
- машина с магнитолой, жующей usb
- флэшка с музыкой, в том числе папкой с этакой солянкой, совпадающей на 99% с плейлистом вконтакте.
Цель:
С масимальным удобством поддерживать эту самую папку с солянкой в актуальном состоянии.
Есть множество решений по скачиванию музыки с контакта, удобных и не очень, но все они абсолютно не подходят под поставленную цель.
Уже готовые решения грубо можно разделить на 2 группы
1)закачка по 1 файлу - кликать по каждому треку, выбирать куда сохранять, потом перемещать на флэшку, трудоемко это(утрирую конечно, половину из этого можно сократить, но как бы то ни было)
2)массовая закачка всего списка(как в вышеуказанном посте) - удобно, для больших списков просто незаменимо, но каждый раз выкачивать всё? Пожалуй, хватит и 1 раза, а дальше уже вступит в силу наша задача, синхронизация, поддержание актуальности, что-то вроде того.
Итак. Актуальность актуальностью, а начальная база быть должна, потому воспользуемся уже дважды упомянутым способом.
Способы могут немного вариьироваться, можно с помощью хрома с расширением VKontakte Tools скачать плейлист(не забыть прокрутить страницу аудиозаписей до самого низа), и парсить полученное
1 |
|
Можно просто исходники страницы парсить
1 |
|
В любом случае мы получаем файлик с прямыми ссылками на каждый трек нашего плейлиста, скармливаем его wget'у, при желании сразу на флешку и идем пить кофе/чай.
1 |
|
Ну вот, пора бы уже и задуматься о поддержании этой музыкальной коллекции в актуальном виде.
В KDE4 появился плазмоид "подключаемые устройства", имеющий вполне достаточные для наших целей возможности.
Соответственно создаем действие "синхронизировать с vk", чтобы оно появлялось при подключении устройств хранения данных и выполняло скрипт, по вкусу приправляем иконками контакта в png, дабы было красиво.
На этом с плазмоидом заканчиваем и приступаем к созданию самого скрипта.
Из-за того что аудиозаписи подгружаются постепенно, мы можем получить прямые ссылки только на первые 50 файлов аудиозаписей. Но это не беда, при добавлении аудиозаписи, ссылка на нее будет появляться в начале файла и выбивать из этого списка последнюю. Всё сказочно просто, diff двух файлов будет давать нам добавленные и удаленные из нового списка ссылки, grep'аем только добавленные, скармливаем wget'у. Всё. Для красоты и до кучи сделано ведение этакого лога добавляемых аудиозаписей, всплывающий диалог оповещающий об успешной загрузке.
Предыдущие версии кода, которые были вставлены для истории, были безнадежно испорчены местным парсером.
Последняя версия v0.4
Лишняя, да, даже не представляю когда закралась.
Не получается почему-то поправить.
Не получается почему-то поправить.
Парсер автодополняет кагбе html entity? Типа оно же на & начинается. Попробуй & в урле заменить на & amp; (без пробела, у меня это съедается)
Мне нравится, как и у этого, и у предыдущего сообщение баллов 0, но голосов 4 и 6. Баланс, однако.
Контакт удобно использовать для поиска и прослушивания/выкачивания музыки...
Всегда так нравилось как люди путают свое скромное мнение с непререкаемой истиной :)
Вы наверное еще и предпочитаете слушать вокалоиды, пить безалкогольное пиво и пользоваться резиновой женщиной? Конечно всегда будут те, кто уверен в пользе наркотиков, нормальности педерастии и других девиаций. Непререкаемая истина заключается в том, что в настоящей жизни все должно быть настоящим - и друзья, и общение, и женщины. Если вы сами хотите жить в мире иллюзий, это ваше личное дело. Но пропаганда и популяризация подобных клоак недопустима.
http://www.youtube.com/watch?v=CKI9n98Rnrk
http://www.youtube.com/watch?v=CKI9n98Rnrk
Ну, вы в праве думать как угодно.
Но коли уж я "не понимаю", можете пояснить, на чем основано предположение о моем предпочтении суррогатов, мгновенный переход к наркотикам и педерастии, без какой-либо связующей мысли с прошлым пред(по)ложением и такой же внезапный возврат к суррогатам. Это я и понимал под несвязным потоком мыслей.
Умолчим что также не вижу никакой связи с написанным мной, кроме использования двух связующих слов, "непререкаемая истина".
Сразу раскрою более подробно написанное мной выше про "скромное мнение и истину", дабы было меньше вопросов, многие из как раз сейчас подрастающего поколения привыкли путать свое мнение с фактом, как и вы. То что вы считаете что контакт не нужен, какой-то фильм говно не означает что это так, это лишь означает что вы так считаете, более ничего. Это мнение может совпасть с реальностью также как и не совпасть.
Вопросы?
Но коли уж я "не понимаю", можете пояснить, на чем основано предположение о моем предпочтении суррогатов, мгновенный переход к наркотикам и педерастии, без какой-либо связующей мысли с прошлым пред(по)ложением и такой же внезапный возврат к суррогатам. Это я и понимал под несвязным потоком мыслей.
Умолчим что также не вижу никакой связи с написанным мной, кроме использования двух связующих слов, "непререкаемая истина".
Сразу раскрою более подробно написанное мной выше про "скромное мнение и истину", дабы было меньше вопросов, многие из как раз сейчас подрастающего поколения привыкли путать свое мнение с фактом, как и вы. То что вы считаете что контакт не нужен, какой-то фильм говно не означает что это так, это лишь означает что вы так считаете, более ничего. Это мнение может совпасть с реальностью также как и не совпасть.
Вопросы?
Спасибо, одно время интересовался, но не было желания долго копаться.
не знаю откаментил уже кто или нет, но вконтакте периодически меняет названия муз файлов. в скрипт не заглядывал, как победили?
Опа, а вот об этом был не в курсе. Периодически, или просто при определенных нововведениях?
не знаю после нововведений или нет. у меня было два скрипта: один вытягивал, другой переименовывал по мп3 тегам. примерно через месяц после первой загрузки мой скрипт вытянул все песни с новыми именами. наверное если переименовывать сразу (по названию песни, а не по тегам, потому что у некоторых песенок нет тегов) после загрузки и только потом копировать на флешку, то проблему можно решить.
Немного допилил скрипт. Теперь он умеет переименовывать скачанные файлы и завершается, если новых песенок нет:
~
~
~
~
Есть небольшой баг: если у трека есть слова, то имя этого трека не распарсится. Не могу пока придумать правильный регэксп)
Отлично, переименование треков было только в планах.
Поправил регэксп, теперь с треками со словами проблем не наблюдается.
Поправил регэксп, теперь с треками со словами проблем не наблюдается.
Чукча не читатель, чукча писатель? Не судьба сначала прочитать чуть выше видимо.
Решил добавить сюда своих 5 копеек, хоть и не по теме скрипта.
раньше я этим вопросом интересовался, даже было дело на хабре задавал вопрос, но вариант с вгетом у меня регулярно тупил, недокачивал список, вконтакт менял названия файлов, после чего скрипт заново качал уже скачанные файлы... теперь я забил на возню и поставил для Оперы расширение. Пользуюсь так - оно распарсивает, после чего прогой fatman (менеджером закачек с GUI) все вытягиваю.
Речь не о СИНХРОНИЗАЦИИ, конечно, способ одноразовый.
раньше я этим вопросом интересовался, даже было дело на хабре задавал вопрос, но вариант с вгетом у меня регулярно тупил, недокачивал список, вконтакт менял названия файлов, после чего скрипт заново качал уже скачанные файлы... теперь я забил на возню и поставил для Оперы расширение. Пользуюсь так - оно распарсивает, после чего прогой fatman (менеджером закачек с GUI) все вытягиваю.
Речь не о СИНХРОНИЗАЦИИ, конечно, способ одноразовый.
попробовал. автору спасибо.
мысли:
1. некоторые имена файлов не переименовываются, т.к. есть недопустимые символы такие как слеш.
2. как бы сделать так что бы порядок файлов уже в в локальной папке был такой же как в плейлисте вконтакте? Думаю это можно сделать простым счетчиком с ведущими нулями, причем начать с последнего трека и дать ему номер например 9999
предпоследний 9998 и т.д.
3. Я запускал скрипт от kamikaze http://welinux.ru/post/6143/#cmnt107800
он видит только первые 50 треков. Как инициировать прокрутку страницы до конца, что бы скрипт увидел все треки?
мысли:
1. некоторые имена файлов не переименовываются, т.к. есть недопустимые символы такие как слеш.
2. как бы сделать так что бы порядок файлов уже в в локальной папке был такой же как в плейлисте вконтакте? Думаю это можно сделать простым счетчиком с ведущими нулями, причем начать с последнего трека и дать ему номер например 9999
предпоследний 9998 и т.д.
3. Я запускал скрипт от kamikaze http://welinux.ru/post/6143/#cmnt107800
он видит только первые 50 треков. Как инициировать прокрутку страницы до конца, что бы скрипт увидел все треки?
Кроме пункта 3 всё вполне реализуемо, есть проблема поинтереснее, завязано всё на именах файлов, а они меняются периодически и всё перестает работать. Вот передо мной лежит лист а4 с примерным алгоритмом как поправить, да всё реализовать руки не доходят.
vkmusic видит весь плейлист. думаю надо по аналогии. Скорее всего через API но я еще не смотрел.
А Вы бы купили такой скрипт скажем за 50 рулбей в год? Я думаю будет много желающих...
А Вы бы купили такой скрипт скажем за 50 рулбей в год? Я думаю будет много желающих...
потыкал api php. пишет:
SimpleXMLElement Object
(
[error_code] => 4
[error_msg] => Incorrect signature: sid & secret authorization
[request_params] => SimpleXMLElement Object
(.........
ну ево нахрен - распарзю m3u по первому варианту
SimpleXMLElement Object
(
[error_code] => 4
[error_msg] => Incorrect signature: sid & secret authorization
[request_params] => SimpleXMLElement Object
(.........
ну ево нахрен - распарзю m3u по первому варианту
Правильно, это уже тот случай, когда временные затраты на создание "автоматизации" десятикратно перекрывают затраты на "вручную" =)
На днях может займусь да допилю до ума наконец синхронизацию.
На днях может займусь да допилю до ума наконец синхронизацию.
насчёт уникальности каждого файла.
Имя файла на сервере уникально - см ссыль
http://cs4653.vkontakte.ru/u2061878/audio/2f2e3e8e8ca0.mp3
думаю надо как-то записывать (сохранять) оригинальное имя файла, например в лог и потом сравнивать. Или в какой-то id3 тег. Или куда там еще можно записать.
Имя файла на сервере уникально - см ссыль
http://cs4653.vkontakte.ru/u2061878/audio/2f2e3e8e8ca0.mp3
думаю надо как-то записывать (сохранять) оригинальное имя файла, например в лог и потом сравнивать. Или в какой-то id3 тег. Или куда там еще можно записать.
вот. значит качаем m3u. кладем в папку muzvk.
дальше файлик со следующим содержимым:
содержимое выложил docs.google.com html-версия т.к. тут глючит
#!/bin/bash
plst=$(ls | grep '\.m3u')
if [ -z $plst ]; then
echo не ни одного файла с плейлистом с расширением m3u. выходим - не счем работать.;
exit 0; fi # Если файла с плейлистом нет, то выходим. Не счем работать.
if [ -z $(ls | grep links.old) ]; then
echo нет файла links.old создаю....;
touch links.old;
fi;
if [ -z $(ls | grep names.old) ]; then
echo нет файла names.old создаю....;
touch names.old;
fi
#echo чекаем;
#exit 0;
mv links links.old
mv names names.old
cat $plst | grep -o "http://.*\.mp3" | sed 's/\(http:.*\.mp3\)\(?.*\)/\1/' > links
cat $plst | grep EXTINF | sed 's/^#EXTINF:[0-9]*,\(.*\)$/\1/' | sed 's/\(
дальше файлик со следующим содержимым:
содержимое выложил docs.google.com html-версия т.к. тут глючит
#!/bin/bash
plst=$(ls | grep '\.m3u')
if [ -z $plst ]; then
echo не ни одного файла с плейлистом с расширением m3u. выходим - не счем работать.;
exit 0; fi # Если файла с плейлистом нет, то выходим. Не счем работать.
if [ -z $(ls | grep links.old) ]; then
echo нет файла links.old создаю....;
touch links.old;
fi;
if [ -z $(ls | grep names.old) ]; then
echo нет файла names.old создаю....;
touch names.old;
fi
#echo чекаем;
#exit 0;
mv links links.old
mv names names.old
cat $plst | grep -o "http://.*\.mp3" | sed 's/\(http:.*\.mp3\)\(?.*\)/\1/' > links
cat $plst | grep EXTINF | sed 's/^#EXTINF:[0-9]*,\(.*\)$/\1/' | sed 's/\(
вобщем поплыл форум...
pass;=$PASS, где точка с запятой лишняя.
И спасибо за скрипт. Протестировал, понравилось. Может, продолжу дело.