Задать вопрос

Linux и скачивание музыки из вконтакта — довести до ума скрипт?

Сначала предыстория, которая вполне себе тянет на миниатюрный топик.


Итак, ваша коллекция музыки находится вконтакте, и вы захотели ее стащить на харды, как захотел я. Основная масса предлагаемых в интернете решений — всякие левые утилитки под Win, которым надо скармливать данные своего аккаунта (да-да, кому-то отдавать их на блюдечке с голубой каемочкой). Эти утилитки к каждой песне добавляют кнопочку «скачать», предлагая (опять же) глупый ручной труд.


На просторах рунета был найден следующий скрипт:

<font color="black"><ol>
<li>#!/bin/bash</li>
<li>gets=`curl -s --data <font color="#A31515">&quot;email=yourmailhere@some.mail&pass=yourpassword&quot;</font> http:<font color="#008000">//login.vk.com/?act=login | egrep -o \([a-z]\|[0-9]\){20\,}`</font></li>
<li>curl -v --cookie-jar /tmp/vkcookie --data <font color="#A31515">&quot;s=$gets&op=slogin&redirect=1&expire=0&to=0&quot;</font> http:<font color="#008000">//vkontakte.ru/login.php</font></li>
<li>curl -v --cookie /tmp/vkcookie <a href="http://vkontakte.ru/audio.php">vkontakte.ru/audio.php</a> | grep -o <font color="#A31515">'http.*mp3'</font> | wget -i -</li>
</ol></font><font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



Данный скрипт всего в 3 строчки вытягивает музыку со страницы «аудиозаписи» пользователя. Вместо строчки
<a href="http://vkontakte.ru/audio.php">vkontakte.ru/audio.php</a>
можно вписать любую вконтактовскую ссылку, например, на страницу «аудиозаписи» какой-либо группы (я проверил, работает).

Ну а теперь вопрос, а точнее просьба к знающим людям — помогите довести скрипт до ума.

Дело в том, что музыку он сохраняет в файлы с именами fd8787fdsf98.mp3 (но с тегами!), и если на каком-то моменте прервалась связь, или повис wget, или был случайно закрыт терминал — придется либо заняться разбиранием «награбленного» с целью удаления из записей вконтакта тех композиций, которые уже были скачаны, либо качать все заново. А качает оно нешустро — я не спец в параметрах wget'а, но даже менеджер загрузок Оперы выдает большую скорость.


То есть, нужно добавить проверку на то, был ли уже скачан файл.


Помимо прочего, я совершенно не уверен, что скрипт лезет куда-то за пределы первой страницы со списком музыки — проверить данный факт не брался, очень уж долго оно качает даже первую страницу.


Очень неплохо было бы прикрутить какой-нибудь интерфейс с использованием gxmessage или zenity — чтобы вбивать данные аккаунта в окошке, а не вписывать в теле скрипта, т.к. последнее небезопасно (я чуть не опубликовал скрипт с моими логином и паролем, если что). Ну и выбор источника — страница аудиозаписей пользователя, или записи какой-либо группы (достаточно передавать скрипту только GID, чтобы он сформировал ссылку), или вписывать весь адрес вручную (допустим, ссылка на чью-то стену, откуда вы хотите вытащить выложенную музыку). В процессе граббинга можно выдавать завершение скачивания очередного трека через notify-send, либо использовать опцию прогресс-бара для zenity.


Может, данная задачка кого-то из линукс-гуру заинтересует?


P.S. исходный скрипт — не моя работа, авторство указать затруднительно найден на просторах рунета вот тут и является, очевидно, коллективным творчеством.
  • Вопрос задан
  • 10272 просмотра
Подписаться 13 Оценить Комментировать
Решения вопроса 1
@ufolog
а как насчет mielophone.com/?

1) имеется под линукс ибо Adobe AIR
2) в настройках можно выбрать как source — api.vk.com, не требующий никаких логинов и паролей
3) позволяет скачать всю фонотеку в 2 нажатия кнопки, при этом сохраняя оригинальные имена композиций
4) очень прост в использовании и имеет много дополнительных функций
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 12
Riateche
@Riateche
Чтобы не качались файлы по второму разу, достаточно передать wget-у ключ -c.

Могу помочь с вводом данных. Насколько я понял, нужно запросить у пользователя:
— email
— пароль
— тип интересующей его страницы
— id
Правильно?

Дайте примеры ссылок, соответствующих различным выборам пользователя. А то я в контакте не сижу, мне лень самому смотреть, где какие ссылки.
Ответ написан
Комментировать
recky
@recky
А графическим интерфейсом по условию задачи нельзя пользоваться?
Если можно, есть ещё вариант Exaile+скрипт для вконтакте. Это, конечно, не путь гуру, но с небольшим количеством треков работает неплохо. С большим я не пробовал, но, по идее, тоже должно быть нормально. Названия треков в нормальном виде пишутся. Плюс, можно выбирать, что качать, а что не качать.
Ответ написан
Комментировать
@Robotex
Я бы так делал: запустил DragonFly в опере и понажимал бы на кнопку плей у всех композиций, затем полученные ссылки поперетаскивал в качалку оперы. Да, ручной труд, но зато просто и понятно.
Ответ написан
Комментировать
alexxxst
@alexxxst
> и если на каком-то моменте прервалась связь, или повис wget, или был случайно закрыт терминал

wget -c
Ответ написан
@whynot
У меня есть рабочее решение на php+mysql, так и не доведенное до состояния сайта-сервиса. Могу поделиться, если актуально. Там и авторизация и правильное именование файлов.
Ответ написан
Комментировать
@Narical Автор вопроса
Ребят, это все те же костыли. По пунктам
— решение с exaile на первый взгляд симпатичное, но это точно не unix-way, того же exaile у меня нет (и очень не хочется ставить на мой минималистичный арчик) ну и еще несколько нареканий, начиная с того, что в задаче стоит выдирание музыки с конкретной страницы указанной. То есть, зашел ты в группу, нажал «аудиозаписи» — там их штук 20. Выделил ссылку или только group id из нее, запустил скрипт, вылезло gtk-шное окошко (gxmessage либо zenity обеспечивает такой функционал для *sh-скриптов). Ты вбиваешь туда свои логин, пароль и вставляешь в третье поле ссылку, и оно вытаскивает все треки.

— php+mysql тоже не unix-way, больше напоминает забивание гвоздей микроскопом в моем случае. То есть, на данный момент вместо этого почти справляется баш-скриптик на 3 строчки. Разумно ли сравнивать его с установкой и настройкой связки Апач+пхп+мускл?

— Насчет драгонфлай аналогично. Если у меня в записях большая подборка, то сидеть придется как краб на галерах.
Ответ написан
@Narical Автор вопроса
Чет какой-то я несобранный в 8 утра )
— насчет exaile — суть в том, чтобы не делать уже раз сделанную работу по собиранию большого трек-листа. То есть, поиск всех композиций заново это не то.

— насчет http-сервиса, если не ставить его на свою машину, то вариант с использованием посредника при логине вконтакте тоже очень плох.
Ответ написан
Комментировать
@Narical Автор вопроса
Отлично!
Вот смотрите. Аудиозаписи какой либо группы:
vkontakte.ru/audio.php?gid=9538168

Аудиозаписи текущего пользователя:
vkontakte.ru/audio.php

Если переключить на следующую/предыдущую страницу записей:
вторая страница записей текущего пользователя (в данном случае меня)
vkontakte.ru/audio.php#album_id=0&gid=0&id=1172148&offset=100

первая страница
vkontakte.ru/audio.php#album_id=0&gid=0&id=1172148&offset=0

шестая страница записей другого пользователя
vkontakte.ru/audio.php?id=4564440#album_id=0&gid=0&id=4564440&offset=500

Если поставить оффсет много-много — то грузится все равно последняя из существующих страниц, то есть если на шестой странице всего 2 композиции, и выставить оффсет 99999 — то грузится шестая страница, но в адресной строке остается 99999. По идее, этот факт можно использовать, то есть добавлять 100 к оффсету и сравнивать с предыдущей страницей скачанной wget'ом, если размер одинаков — то тогда останавливать все и сообщать через notify-send, что все скачано. Хотя более верно было бы считать хэш, а не по размеру сравнивать.

Думаю, разница между своими собственными записями и чужими отсутствует в плане формирования адреса.
Отличается только ID пользователя.
Ответ написан
stampoon
@stampoon
Сорри, вопрос задать не могу, поэтому напишу в комментариях, может сталкивались. Хотелось бы реализовать скрипт загрузки аудиофайлов в контакт (не удобно по одному), авторизацию сделал, а вот как по-человечески multipart через curl отправить — не разобрался, подскажите, если не сложно. Желательно с примером.
PS если кому нужна авторизация:

#!/bin/bash
RND=$RANDOM$RANDOM$RANDOM$RANDOM
touch /tmp/cookievk$RND
curl -c /tmp/cookievm$RND -d «email=$1&pass=$2» 'http://vkontakte.ru/login.php' 2> /dev/null
SID=$(cat /tmp/cookievk$RND | grep sid | tail -c-57)
rm -rf /tmp/cookievk$RND
if [ "$SID" != "" ]; then
echo "$1 — $2 — $SID "
fi

PPS вк проверяет у мп3х только заголовок, так что в них в конце можно хранить файлы, если кому интересно — писал небольшой скриптик преобразования (код кривой, но рабочий)
stampoon.dyndns.org/Vkfile/
Ответ написан
Комментировать
@Narical Автор вопроса
я сам в тонкостях не разбираюсь, но в приведенном мной скрипте тоже есть авторизация, причем она какая-то другая, но оно работает. по существу же ответить не могу.
Ответ написан
Комментировать
@Narical Автор вопроса
Звучит как будто это решение вопроса.
Пока что попробовать не удалось — AIR не поставился с лету, говорит нет прав доступа. Ну видимо, нужно от рута ставить просто, а я из Оперы запускал.
Но это точно не unix-way :)

В общем, если кто еще желает доработать скрипт — отпишите плз! Я пока ткну «решение», но unix-way интересней же!
Ответ написан
osj
@osj
я конечно извиняюсь, но может автор попробует скрипт от ru.savefrom.net
Как скачать музыку из контакта

1) При наведении курсора мышки на название трека, появятся ссылки «Скачать» и «Параметры». Щелкнув на ссылке «Параметры», вы сможете определить качество(битрейт) и размер mp3 файла. Битрейт определяется по размеру файла, поэтому его значение является приблизительным.
2) Для того, чтобы сразу скачать всю музыку со страницы, вызовите меню SaveFrom.net помощника и выберите пункт: «Скачать все mp3 файлы».
3) Также вы можете сохранить плейлист себе на компьютер, для последующего открытия в медиаплеере. Для этого выберите пункт: «Скачать mp3 плейлист» в меню помощника.

работает в Mozilla Firefox, Google Chrome, Opera которые и под linux работают.
Полученный список ссылок уже скармливается менеджеру загрузки…
ну это если автор не юзает сугубо консоль.
ах, скрипт сохраняет под именами вида fd8787fdsf98.mp3, жаль. нарно не подойдет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы