vmd — консольное приложение для скачивания музыки из vk.com

    У вас в vk.com есть любимые музыкальных группы или друзья, с которыми ваши музыкальные вкусы совпадают? У меня да. И хотелось иметь актуальную локальную копию музыки этих групп и друзей, чтобы слушать её, например в машине, телефоне, плейере или где-нибудь ещё. Так родилась идея создания консольного open source приложения vmd (vkontakte music downloader), которое я обещал выложить на github вот в этом посте. Программа мультиплатформенная работает под linux, windows и mac os x. Скачать бинарные сборки под эти ОС можно скачать на домашней странице проекта. Под хабракатом рассказано, как vmd использовать и некоторые технические подробности.

    Как vmd пользоваться?


    Для использования программы надо получить api_id, перейдя по ссылке: http://vk.com/apps.php?act=add. Если у вас есть api_id существующего приложения — можете использовать его.

    После этого надо создать файл с сессией.
    Используйте следующею команду для его генерации:

    $ vmd --login <ваш email или номер телефона> --password <ваш пароль> --api_id <ID приложения>
    


    vmd не хранит ваш пароль на жестком диске, используя файл с сессией для авторизации. Эту команду надо выполнить всего один раз!

    Теперь можно скачивать музыку.

    Скачивание музыки у пользователей

    Если страница пользователя vk.com/genaev или vk.com/id2302071, то для того что бы скачать его музыку надо запустить:

        $ vmd --uid genaev
        $ vmd --uid 2302071

    Скачивание музыки из групп

    Если страница группы vk.com/teamfly, то надо запустить
        $ vmd --gid teamfly


    Загрузка музыки происходит в текущею директорию. Имеет смысл скопировать vmd куда-нибудь в PATH.

    Синхронизация происходит автоматически по имени файла, если трек уже скачан, второй раз он скачиваться не будет. Имена файлов соответствуют шаблону: исполнитель-название_трека-id_трека.mp3. Зачастую в vk.com файлы называют как попало, включая в названия всякие смайлики, сердечки и прочий мусор. Для его удаления была написана функция clean_name().

    ToDo


    Я рад, что программа и модуль VK::App оказался полезен не только мне. Уже составлен не большой ToDo лист.

    • Добавить возможность скачивать плей листы и альбомы
    • Добавить возможность поиска музыки
    • Добавить возможность скачивания в многопоточном режиме
    • Добавить поддержку proxy
    • Добавить возможность скачивания сразу у нескольких пользователей или из нескольких групп
    • Создание GUI интерфейса на QT


    Буду рад любым фитбекам!

    UPDs
    В новой версии vmd исправлена ошибка с неправильной кодировкой некоторых треков.

    Режим рекомендации (опция доступна начиная с версии 0.03):
    Этот режим дает возможность скачать в некотором смысле «пересечение» аудиозаписей ваших друзей. На самом деле, наши друзья скорее всего имеют схожие с нами музыкальные вкусы. Можно получить дамп аудиозаписей всех друзей и скачивать только те, которые встречаются минимум у 2-х или у 3-х друзей. Изменяя коэффициент можно получать разные наборы. Пример. Если мы хотим скачать все mp3 которые пересекаются не менее 5 раз:
    $ vmd --rec 5
    
    Спасибо хаброюзеру spiff за идею!

    версия для Mac OS доступна для скачивания
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 59

      +20
      Не надо делать GUI! Это прекрасно!
        0
        Почему нельзя api_id получить из приложения? Тем более, если в него всё равно вводится логин и пароль?
          0
          А, понял, api_id это несколько другое. Но зачем вообще регистрировать каждую копию приложения как отдельное?
            +3
            Потому что формально из vk.com запрещено скачивать mp3. Можно только слушать. По этой причине я не решился прописывать в vmd свой api_id. Тем более получить свой api_id — дело одной минуты.
              0
              Это странно, учитывая что в стандартном приложении для андроида можно сохранить выбранный трек.
                0
                можно попробовать создать отдельное приложение и посмотреть как быстро его забанят =)
            0
            LazyTool для любителей gui
              0
              Еще один велосипед для скачивания вконтактовской музыки. Я все же своим пользуюсь, на основе jQuery + wget для скачивания. Мне пока хватает )
                –9
                <зануда>А вы правила вКонтакте нарушили...</зануда>
                  0
                  Какой конкретно пункт?
                    0
                      +1
                      Тут вопрос в том, что считать приложением. В терминах vk приложение — это то, у чего есть API_id. У vmd API_id нет, поэтому как создатель vmd, я правила не нарушаю. А вот, как его пользователь — нарушаю :-)
                      0
                      5.3. Пользователю при использовании Сайта запрещается:
                      5.3.9. использовать без специального на то разрешения Администрации Сайта автоматизированные скрипты (программы) для сбора информации на Сайте и(или) взаимодействия с Сайтом и его сервисами;

                      Ну и пункт 12, как выше сказали.
                        0
                        Да, с пунктом 5.3.9 не поспоришь.
                          0
                          А на что вобще даны нам API, как не для взаимодействия с Сайтом и его сервисами? Естественно взаимодействия автоматизированного, но запущенного с ведома пользователя о_О
                            +1
                            Это ваше «взаимодействие» называется «пиратство». Апи дано для прослушивания, просмотра, но не сохранения аудио/видео контента на пк пользователя.
                            Спасибо всем за слитую карму.
                              +1
                              Вы так говорите, будто весь контент в контакте лицензионный
                      0
                      Каждый д… т как хочет) А я вот писал себе для такого Chrome-расширение :D
                        +3
                        мой велосипед можно прописать cron и забыть, лишь время от времени заливая mp3-ки на девайсы с которых слушаешь музыку. unix way…
                          +1
                          Согласен, ваше приложение удобнее использовать для систематического скачивания) А мне нужно было скорее единичное использование, время от времени, вообще, круто получилось, удачи:)
                            0
                            а вы публиковали приложение в web store? Можно название?
                              0
                              Публиковал. vk.audio.dw :)
                        0
                        Иногда бывают проблемы с кодировкой :( Win8RP
                        d.pr/i/TJmn
                          0
                          Спасибо за баг репорт :-) разрабатывал под linux. Под Windows просто проверилил, что работает. Буду разбираться, в свободное время.
                            0
                            Та же история (Windows 7)
                            goo.gl/16goX
                              0
                              да там даже в линуксе проблемы с кодировкой =(
                                0
                                ребята, я только что сделал fix с для кодировок под windows ccылка на дистрибутив с exe: docs.google.com/open?id=0B7Pins5hbeBpRnBQYk9oUFlPN0k

                                у меня в windows 7 работает. вот эту команду можно использовать для проверки, она скачает 1 mp3 который до этого у меня именовался криво:
                                vmd --aid 32746404_155796709
                                  0
                                  Проблема с кракозябрами осталась.
                              0
                              в версии 0.02-1 быть не должно. она на home page.
                              0
                              >Создание GUI интерфейса на QT

                              Для гуя на Qt у меня уже есть прекрасный биндинг vkit, если кто хочет его юзать, то стукните, я тогда сделаю oauth авторизацию для сторонних приложений.
                                0
                                Искал решение, чтобы скачивать плейлисты, около полугода.Даунлодеры есть, но они виндовые и под вайном работают откровенно коряво.В итоге пару недель назад остановился на вот этом решении(ютуб).Там хоть и в 3 этапа, хоть и необходим фаерфокс, но работает без проблем.
                                Нужно будет при следующем обновлении музыки попробовать ваше приложение)
                                  +1
                                  Open-source
                                    0
                                    еще бы со стен групп сливать… порой там гораздо интереснее музыка, нежели у конкретного пользователя…
                                      0
                                      за приложение спасибо! попробую на мак ос
                                        0
                                        бинарник пока под mac не собрал :-( но сам скрипт проверил — работает.
                                          0
                                          еще бы узнать как собрать VK::App под макось
                                          0
                                          бинарная версия для Mac OS доступна для скачивания!
                                        0
                                        Михалков вас настигнет, иноверцы! :)
                                          0
                                          VkOpt + Download Master — почти тот же эффект. И скачивается быстро за счет многопоточности Master'а. Но телодвижений больше, да. :)
                                            0
                                            Спасибо. Консольное как раз нужно.

                                            Плюс: возможность апдейта треков.
                                            Минус: пароль светится в shell history.
                                            Хотелось бы: чтобы программа раскидывала файлы по директориям (аналогично вконтактовским альбомам) + возможность выкачать конкретный альбом с ВК.

                                            А вобще гляну исходники, может сам и сделаю.
                                              0
                                              Ещё хотелка: пущай по команде программа выдаёт в stdout список прямых ссылок (это ведь возможно, да), а пользователь уже качает в 5 потоков или как захочется. Unix-way всё же.
                                                0
                                                записал в ToDo. Возможность выкачивать альбомы точно будет.
                                                0
                                                Вы не хотите развить проект до амароковского vksearch? Чтобы была вся логика в «демоне», а «клиентами» были бы аудиопроигрыватели. Я сейчас пользуюсь clementine, очень не хватает vksearch.
                                                0
                                                Есть некоторые ошибки, автор принимай pull-request'ы на github ;)
                                                  0
                                                  Ну, кто поделится api_id с товарищами, у которых аккаунт не привязан к телефону? :)
                                                    0
                                                    А я написал скрипт который ищет музыку и сразу проигрывает её в mpd.
                                                    Исходники на github.com/alesguzik/vkpd

                                                    vkpd Beatles # replaces current mpd playlist with The Beatles' songs and starts playing 
                                                    vkpd play Beatles # the same
                                                    vkpd add Beatles # adds found songs to playlist and starts playing 
                                                    vkpd -c 5 Beatles # get just first five search results 
                                                    vkpd -c 5 -o 5 beatles # get second five results 
                                                    vkpd --count 5 --offset=5 beatles # the same
                                                    vkpd user 3885655 # plays user's songs
                                                    vkpd user 3885655 -c 3 # plays last three songs added by user 
                                                    vkpd user # current user's songs
                                                    vkpd user -c 1 # current user's last added song
                                                    vkpd group 1 # plays songs from group with id = 1
                                                    vkpd --no-fix Beetles # prevents from searching for Beatles 
                                                    vkpd -nf Beetles # same as above
                                                    vkpd -s 1 Beatles # sorted by length. 0 to sort by popularity, 2 to sort by upload date
                                                    
                                                      0
                                                      По дороге на работу придумал следующее.

                                                      Было бы неплохо иметь возможность скачать в некотором смысле «пересечение» аудиозаписей ваших друзей. На самом деле, наши друзья скорее всего имеют схожие с нами музыкальные вкусы. Можно получить дамп аудиозаписей всех друзей и скачивать только те, которые встречаются минимум у 2-х или у 3-х друзей. Изменяя коэффициент можно получать разные наборы. Можно пойти дальше «друзья друзей».

                                                      Потом я понял, что все это очень похоже на «Рекомендации». Что скажите, можно/нужно такое реализовывать в вашем туле?
                                                        0
                                                        да, идея очень нравится. до такой степени, что бросил рабочие дела и сел писать. реализация без всяких print заняла ровно 20 строчек.
                                                        использовать ровно так, как вы описали
                                                        ./vmd.pl --rec 3
                                                        скачает музыку, которая есть у 3 друзей включая себя самого.
                                                        реализация заняла строчек 30. Исходники на github выложил. Только похоже один и тот-же трек может иметь разные aid. А я пересечения считал как раз по aid. Получил следующие результаты:
                                                        у 236 друзей получено 30032 трека и найдено всего 2 пересечения при --rec 2
                                                          0
                                                          извиняюсь про противоречивые сведения про количество строчек, просто писал программу и комментарий одновременно.
                                                          если вместо aid использовать
                                                          my $aid = $track->{artist}.'-'.$track->{title}; то результат при тех же параметрах:
                                                          Всего получено 30032 треков
                                                          И найдено 2115 пересечений
                                                          т.е. все работает! ура!
                                                          на hitgub выложил. еще при вызове --res
                                                          в начало имени файла добавляется кол-во пересечений. т.е. потом, когда скачаешь можно сортировать по популярности.
                                                            0
                                                            Супер! Не думал, что вы так быстро возьметесь за реализацию :) Если у меня еще появятся идеи — буду открывать новые issue в гитхабе.
                                                              0
                                                              Просто сама идея очень понравилась :-)
                                                              0
                                                              BTW, опцию -rec можно использовать для конкретного юзера (не для себя)? Т.е. найти пересечения другого пользователя с его друзьями.
                                                                0
                                                                Сейчас сделано, что только для себя.
                                                                  0
                                                                  уже можно
                                                                0
                                                                вот только документацию писать и бинарные сборки делать, у меня времени нет. если кто-то help допишет, буду признателен.
                                                                0
                                                                Пытаюсь использовать этот скрипт, а он говорит «Willie_Colon_amp_Hector_Lavoe-Todo_Tiene_Su_Final-158135205.mp3 — 404 Not Found». Как пофиксить проблему?
                                                                  0
                                                                  Спасибо за приложение. Почему вы на сайте предлагаете только один способ помочь проекту? Прицепите хотя бы еще paypal.
                                                                    0
                                                                    Не будет цены тому, кто напишет формулу для HomeBrew

                                                                    Only users with full accounts can post comments. Log in, please.