Здравствуйте, дорогие пользователи хабра! Сегодня я расскажу как используя python можно скачивать треки со спотифая. Основано это на загрузки видео с ютуба. Да-да мы будем искать песни на ютубе и качать их оттуда. Ссылка на GitHub с репозиторием и интересным бонусом в конце.

Пример работы
Пример работы

Подготовка

Так как мы будем писать на языке программирования python его сначала нужно установить. Сделать это можно на официальном сайте. После установки питона нам нужно установить необходимые библиотеки. Для этого в консоли пропишем такую команду: pip install spotipy youtubesearchpython youtube_dl. Также нам нужно установить ffmpeg. Как его установить вы можете найти в интернете.
Далее идем на эту страницу.

Панель spotify
Панель spotify

Нажимаем на кнопочку LOG IN и заходим через свой spotify аккаунт. Зашли? Создаем новое приложение нажав на кнопочку CREATE AN APP

Панель Spotify
Панель Spotify

Вводим любое название и описание. Создаем приложение нажав CREATE. После нажатия мы попадаем на страницу с информацией о приложении. Отсюда мы копируем Client ID и Client Secret. Записываем их куда-нибудь.

Пишем код

Для начала нам нужно импортировать библиотеки:
from __future__ import unicode_literals
import spotipy
from spotipy.oauth2 import SpotifyOAuth, SpotifyClientCredentials
from youtubesearchpython import VideosSearch
import youtube_dl

Добавляем переменные с нужными нам данными:
url = input("Введи ссылку на трек: ")
client_id = "" # Сюда вводим полученные данные из панели спотифая
secret = "" # Сюда вводим полученные данные из панели спотифая

Начнем писать код:
1. Подключаемся к спотифаю
auth_manager = SpotifyClientCredentials(client_id=client_id, client_secret=secret)
spotify = spotipy.Spotify(auth_manager=auth_manager)

2. Функция для получения информации
def music(result):
performers = ""
music = result['name']
for names in result["artists"]:
performers = performers + names["name"] + ", "
performers = performers.rstrip(", ")
video = search(music, performers)
name = f"{performers} - {music}"
print(name)
ydl_opts = {'format': 'bestaudio/best', 'postprocessors': [{'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192',}], 'outtmpl': f'./{name}.webm'}
download(video, ydl_opts)
print("Готово!")

3. Функция для поиска трека
def search(music, performers):
  videosSearch = VideosSearch(f'{performers} - {music}', limit = 1)
  videoresult = videosSearch.result()["result"][0]["link"]
  return videoresult

4. Функция для загрузки трека
def download(videoresult, ydl_opts):
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([videoresult])


5. Передаем ссылку и запускаем поиск.
result = spotify.track(url)
music(result)

Вот пример работы кода:

Пример работы
Пример работы

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

Конец

Вот и подошла моя первая статейка к концу. Не забывайте что код и бонус есть в этом репозитории на гитхабе. Удачного использования!

Комментарии (11)


  1. randomm
    07.10.2021 14:30

    Ещё недавно был бот в телеграме, но что-то он опять не работает. А было так удобно.


  1. gudvinr
    07.10.2021 14:39
    +10

    Но ведь вы не со спотифая их загружаете...


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


    Если вы кавер или ремикс ищете, тут вообще получится как повезёт.


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


    1. LinCat Автор
      07.10.2021 15:59

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


  1. k3NGuru
    07.10.2021 14:59
    +4

    У меня главный вопрос - А зачем?

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


    1. tommyangelo27
      07.10.2021 15:53
      +1

      Особенно учитывая, что скачивается не то, что мы слушали в Spotify, а всего лишь трек с таким же названием.


  1. moonz
    07.10.2021 16:00

    Не ну это смешно.. А как же битрейт, а как же эксклюзивные треки. Надо заголовок статьи переписать. Идея неплохая конечно, но реализация требует доработки однозначно.


    1. LinCat Автор
      07.10.2021 16:01
      -1

      Статьи пишу впервые, да и программист я не очень. Просто хотелось показать как это можно реализовать.


      1. avg
        07.10.2021 22:33

        Впервые - это да, ощущается недостаток опыта ...

        Так как мы будем писать на языке программирования python его сначала нужно установить. Сделать это можно на официальном сайте.

        Наверное, всё-таки сделать это можно ПО ИНСТРУКЦИИ, РАЗМЕЩЕННОЙ на официальном сайте. Ибо не только лишь все, а очень даже немногие способны на том сайте взять да и установить-таки питон )


  1. sklart
    07.10.2021 16:22
    +3

    https://github.com/spotDL/spotify-downloader

    • не требует создания приложения

    • добавляет в скачанный трек метаданные из Spotify: название, исполнителя, обложку и т.д.


  1. tangro
    07.10.2021 16:50
    +1

    Аха-ха, какой же тупняк. Скрипт, который скачает с ютюба чёрти-что, похожее по названию на название трека в Спотифае. О качестве можно вообще забыть - Youtube не даст не то, что lossless, а даже качества уровня AAC/320 Kbps.

    Скрипт подойдёт людям, которым медведь на ухо наступил, да и песни нужны не конкретные, а так, в подобном стиле.


  1. Stantin
    07.10.2021 19:08
    -1

    А зачем здесь вобще про Спотифай?

    Почему не "загрузка песен с Youtube"?