Print This Post Качалка для сервиса Яндекс.Музыка

Вторник, 12. Ноябрь 2013
Раздел: Perl, автор:

Написал небольшой скрипт-качалку для сервиса Яндекс.Музыка.
Скрипт позволяет скачивать как отдельные композиции, так и альбомы или плейлисты целиком. Интерфейс консольный и выглядит следующим образом:
ya-downloader-ui
В процессе работы:
ya-downloader-work

Скрипт использует сторонние модули (умеет определять их отсутствие и сообщать об этом) и портированный с JavaScript на Perl алгоритм хэширования Яндекса (находится в отдельном файле YaHash.pm), он необходим для скачивания трека.

В общем пользуйтесь.

Скачать: ya-music
GitHub: yandex-music-download

Update (23.01.15): Вышло обновление. Версия на GitHub тоже была обновлена.
Update (27.01.15): Добавлен прогресс бар, исправлена ошибка скачивания, если трек был удален с Яндекса: скачать.
Update (30.01.15): Что-то часто мелочи меняться стали. На данный момент актуальная версия на GitHub.

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 167 к “Качалка для сервиса Яндекс.Музыка”


  1. DaRoni :

    Привет. Установил последнюю версию активперл.
    Указываю perl ya.pl -u https://music.yandex.kz/users/пользватель/playlists/3
    выходит Please, install this modules: Getopt::Long::Descriptive и ничего не происходит, а такого пакета для установки нет. getopt-long установлены

    [Ответить]

    Kaimi:

    Попробуй более старую версию ActivePerl, попробуй Strawberry Perl, на крайняк через CPAN поставь

    [Ответить]

    DaRoni:

    Отдельно треки скачиваются, а вот плейлист не скачивается.
    Для этого подписка не нужна надеюсь?
    попробовал перекинуть треки на другой публчичный плейлист так же не скачивается, пишет [ERROR] Can't get track list info

    пробую через strawberry-perl-5.20.2.1-32bit-portable, через cpan установлены не достающие модули.

    [Ответить]

    DaRoni:

    Этот трек скачивается https://music.yandex.kz/album/3144162/track/26428981
    А этот уже нет https://music.yandex.kz/album/978899/track/9277551
    выходит [ERROR] Can't get track list info

    Kaimi:

    У меня оба трека нормально скачиваются

    Kaimi:

    Плейлисты у меня нормально качаются. Версия скрипта надеюсь последняя с github?


  2. DaRoni :

    Да с гитхаба. Подскажите какая у вас версия perl?
    сейчас у меня Strawberry Perl 5.20.2.1-32bit

    [Ответить]

    Kaimi:

    5.18.2, это не связано с версией. Скорее всего блокировка или что-нибудь вроде того. Можно попробовать с --debug запустить, может что-то дельное напишет.

    [Ответить]


  3. KM :

    Запускаю скрипт в linux, просит доставить модули

    root@kali:~/Downloads/ya-music# perl ya.pl
    Please, install this modules: Mozilla::CA, MP3::Tag, Getopt::Long::Descriptive

    Подскажите пожалуйста, что это за модули? и как они правильно называется?
    Искал в репо по этим словам - не нашел

    [Ответить]

    Kaimi:

    http://search.cpan.org/~abh/Mozilla-CA-20160104/lib/Mozilla/CA.pm
    http://search.cpan.org/~ilyaz/MP3-Tag-1.13/lib/MP3/Tag.pm
    http://search.cpan.org/~rjbs/Getopt-Long-Descriptive-0.099/lib/Getopt/Long/Descriptive.pm

    Я не знаю, как они называются в линуксовых репозиториях, тем более это может от зависеть от конкретной сборки. Через cpan скорее всего поставится.

    [Ответить]

    KM:

    спасибо за быстрый ответ
    буду разбираться

    [Ответить]

    Kaimi:

    Или могу предложить вместо скрипта воспользоваться, например, https://github.com/egoroof/yandex-music-fisher

    KM:

    Все получилось, но есть один нюанс..
    пробую запустить скрипт примером из help
    Скачивает только 1 трек, так и должно быть?

    root@kali:~/Downloads/ya-music# perl ya.pl -u https://music.yandex.ru/album/215688/track/1710808
    [INFO] Fetching album info: 215688
    [INFO] Album title: A Night At The Opera
    [INFO] Tracks total: 18
    [INFO] Filtering single track: 1710808 [215688]
    [INFO] Trying to fetch track: Queen - Bohemian Rhapsody (2011 Remaster)
    [OK] Temporary saved track at ./CN5Fi9tItb
    [INFO] MP3 tags added for ./CN5Fi9tItb
    [INFO] ./CN5Fi9tItb -> ./Queen - Bohemian Rhapsody (2011 Remaster).mp3
    [OK] Done!

    Попытался натравить на свой плейлист - избранное, вылетел с:
    [INFO] Fetching playlist info: 3 [****usr login***]
    [ERROR] Can't get track list info

    [Ответить]

    KM:

    кажется разобрался,
    в первом случае была ссылка на конкретный трек
    во втором плейлист "не публичный"

    ps я хочу закинуть этот скрипт в сетевое хранилище, чтоб он мониторил нужный плейлист и при добавлении нового трека качал все треки

    отличная работа!

    pss
    недостающие пакеты для linux
    Mozilla::CA
    sudo apt-get install perl-modules
    sudo cpan -i Mozilla::CA

    MP3::Tag
    sudo apt-get install libmp3-tag-perl

    Getopt::Long::Descriptive
    sudo apt-get install libgetopt-long-descriptive-perl


  4. KM :

    Под полноценной системой работает отлично, решил упаковать все в Docker
    Запарился собирать недостающие компоненты, но в итоге скрипт запустился
    К сожалению, не отрабатывает правильно. похоже чего то не хватает.

    root@ya:/tmp/ya# perl /tmp/ya/ya.pl -u https://music.yandex.ru/users/ya.playlist/playlists/1257 --debug
    [INFO] Fetching playlist info: 1257 [ya.playlist]
    [DEBUG] main::get_playlist_tracks_info(604): Request failed
    [ERROR] Can't get track list info

    [Ответить]

    Kaimi:

    Могу предложить пустить трафик через локальный прокси (вроде Charles Web Debugging Proxy), который покажет, что происходит в этом месте.
    Либо самостоятельно взять и добавить на той строке print $request->as_string; и посмотреть, в чем дело.

    [Ответить]

    KM:

    Спасибо!! отличная работа, скрипт делает свое дело
    Проблема была в LWP::Protocol::https
    недостающий пакет для linux sudo apt-get install liblwp-protocol-https-perl

    что в итоге удалось сделать:
    после добавления трека в определенный плейлист, он скачивается и загружается в папку на яндекс.диске 8-)
    все реализовано на виртуализации в Docker на дисковом хранилище Synology, скрипт запускается каждые 15 мин.

    можно ли добавить автоматическое создание папки для скачивания, если в параметрах задана несуществующая папка?

    [Ответить]

    Kaimi:

    Не уверен, что это нужно, могу предложить изменить соответствующий фрагмент скрипта для себя, например, следующим образом:


  5. Денис :

    Самая последняя версия у меня не устанавливается на Хром. Пишет нет файла манифеста. После попытки установить предыдущую и обновить её расширение таки появилось, но объясните это нормально...

    1. Песни из плейлиста скачиваются по одной штуке! Каждый раз вылетает окно с просьбой сохранить один трек, как если бы их скачивать самому по одной штуке.

    2. Никак не указать папку для сохранения заранее. Только для каждой песни отдельно. А это неудобно ведь новые окна появляются очень быстро.

    Вопрос такой - Это действительно так задумано или у меня все не так установилось?

    [Ответить]

    Kaimi:

    О чем речь вообще? Пост про скрипт на перле, а не про расширение для хрома.

    [Ответить]


  6. Дмитрий :

    Здравствуйте!
    Проблема с последней версией:
    e:\yandex-music-download-master\src>perl ya.pl -a 3277262
    Missing right curly or square bracket at ya.pl line 299, at end of line
    syntax error at ya.pl line 299, at EOF
    Execution of ya.pl aborted due to compilation errors.

    [Ответить]

    Kaimi:

    У меня нормально запускается и на win и на nix

    [Ответить]


  7. Дмитрий :

    А есть возможность выложить прошлую версию где-то, пожалуйста?

    [Ответить]

    Kaimi:

    Прошлую это какую? На github любую версию скачать можно

    [Ответить]


  8. Дмитрий :

    Спасибо, вот эта https://github.com/kaimi-ru/yandex-music-download/tree/ac3f3dacaf80c4e8881682348b74b709a3c1e07a от 26 января эту ошибку не выдает. Пока останусь на этой.

    [Ответить]

    Kaimi:

    Может стоит перл обновить? На 5.18 и 5.22 проблем нет

    [Ответить]


  9. Андрей :

    Привет!

    Не качает, например, при попытке скачать плейлист получаю ошибку и всё ничего не качается(
    [INFO] Checking Yandex.Music availability
    [OK] Yandex.Music is available
    [INFO] Fetching playlist info: **** [uid-vmvnskay]
    [INFO] Playlist title: Медленные
    [INFO] Tracks total: 2
    [INFO] Trying to fetch track: Chris De Burgh - The Lady In Red (Album Version)
    [ERROR] Can't get track url
    [INFO] Waiting for 5 seconds
    [INFO] Trying to fetch track: Celine Dion - My Heart Will Go On (из фильма «Титаник»)
    [ERROR] Can't get track url
    [OK] Done!

    [Ответить]

    Kaimi:

    Запусти с аргументом --debug, покажи лог и залей куда-нибудь файл, который создастся в папке со скриптом

    [Ответить]

    Андрей:

    Сюда залил: https://cloud.mail.ru/public/4Jj4/Jke2CXMdZ
    Лог работы:
    [INFO] Checking Yandex.Music availability
    [OK] Yandex.Music is available
    [INFO] Fetching playlist info: **** [uid-vmvnskay]
    [INFO] Playlist title: Медленные
    [INFO] Tracks total: 2
    [INFO] Trying to fetch track: Chris De Burgh - The Lady In Red (Album Version)
    [DEBUG] main::get_track_url(480): Request failed
    [DEBUG] main::log_response(1047): Response stored at log_1459300723
    [ERROR] Can't get track url
    [INFO] Waiting for 5 seconds
    [INFO] Trying to fetch track: Celine Dion - My Heart Will Go On (из фильма «Титаник»)
    [DEBUG] main::get_track_url(480): Request failed
    [DEBUG] main::log_response(1047): Response stored at log_1459300728
    [ERROR] Can't get track url
    [OK] Done!

    [Ответить]

    Kaimi:

    С --mobile=0 скачивает, но быстро в капчу процесс упрется. Почему не качает через мобильное API - не знаю, на других плейлистах нормально работает, а на ваших - нет.


  10. Андрей :

    Спасибо, понятно, возможно, потому-что я в этот аккаунт через привязку к gmail вхожу.

    [Ответить]


Оставьте ваш комментарий