Mas o streaming de música não apareceu ontem, e provavelmente existem aqueles que são viciados em Yandex e usam uma assinatura de Yandex.Music, que mais tarde se tornou Yandex.Plus.
Tornou-se conveniente ouvir as músicas, os seletores aprenderam a selecionar boas faixas, e isso levou ao acúmulo de uma biblioteca com listas de reprodução e outras coisas convenientes que precisam ser adicionadas novamente no novo serviço.
Se você quiser tentar, mas é muito preguiçoso, vou lhe ensinar como mover seus pertences rapidamente, de graça. Você só precisa de algumas pythons com baterias.
Atenção!
, .
, . , . .
.
Spotify , . , . , - .
— , . - ., - Spotify. , - , 144 / Ogg Vorbis.
, .
/ .
, . , . .
.
Spotify , . , . , - .
— , . - ., - Spotify. , - , 144 / Ogg Vorbis.
, .
/ .
Com a ajuda de aparelhos simples, em alguns dias consegui fazer um importador de faixas no Spotify e não gastar dinheiro com soundiiz, o que por algum motivo de repente aumentou a carga.
Mas existem nuances.
API
O Spotify fornece algum tipo de documentação para seu serviço de API da Web, incluindo uma API para adicionar listas de reprodução e favoritos à sua biblioteca.
Por sua vez, Yandex.Music não tem uma API pública , mas talvez a competição os estimule a fornecer acesso a desenvolvedores terceirizados, porque é necessário, conveniente e útil.
Portanto, aqui iremos um pouco por um caminho curvo, e usaremos truques de reputação duvidosa.
E o Deezer?
Deezer, , API . Python, .
Spotify
Tudo é simples aqui. Para se tornar um desenvolvedor, você precisa obter a chave do aplicativo no console .
Eles se oferecerão para adicionar
Redirect URI
para OAuth, que pode ser instalado por qualquer pessoa. só é necessário para serviços que atendem muita gente ao mesmo tempo, mas no nosso caso tudo acontece localmente.
Yandex.Music
Você precisa de um nome de usuário e senha para sua conta, mas se a autenticação de dois fatores estiver ativada, você precisará especificar Yandex.Password de Yandex.Key.
Operação do aplicativo
Não quero me alongar em executar aplicativos Python, implantar um ambiente virtual, etc., então vou descrever como funciona a importação. Link para o repositório com o código do programa no final do artigo .
As trilhas de APIs de todas as plataformas vêm em formatos diferentes, portanto, são reduzidas à mesma apresentação com o conjunto mínimo de propriedades necessário:
class Track:
title = property(lambda self: self.__title)
album = property(lambda self: self.__albums[0] if len(self.__albums) > 0 else None)
artist = property(lambda self: self.__artists[0] if len(self.__artists) > 0 else None)
albums = property(lambda self: self.__albums)
artists = property(lambda self: self.__artists)
Listas de reprodução (incluindo favoritos) também têm o mesmo formato e incluem um iterador de faixa para fácil uso em loops:
class Playlist:
class __iterator:
def __init__(self, playlist):
pass #
def __next__(self):
pass #
title = property(lambda self: self.__title)
tracks = property(lambda self: self.__tracks)
is_public = property(lambda self: self.__is_public)
def __len__(self):
return len(self.__tracks)
def __iter__(self):
return Playlist.__iterator(self)
def __getitem__(self, index):
return self.__tracks[index]
A classe é responsável por interagir com os serviços
MusicProvider
:
class MusicProvider:
favorites = property(lambda self: self.__favorites)
playlists = property(lambda self: self.__playlists)
YandexMusic (MusicProvider)
Na inicialização, a
classe carrega informações sobre todas as listas de reprodução e todas as faixas da lista de reprodução "Gostei".
Spotify (MusicProvider)
não faz, mas contém métodos para importar:
class Spotify(MusicProvider):
def import_playlist(self, playlist):
pass #
def import_favorites(self, playlist):
pass #
Dentro, ele procura faixas no banco de dados do Spotify usando dados de música obtidos no Yandex.Music.
Depois que todas as faixas da lista de reprodução são encontradas, ela é criada (se não for "Músicas favoritas") com o mesmo nome e todas as melodias encontradas são adicionadas a ela.
Listas de reprodução e faixas salvas requerem permissões diferentes:
- playlist-modify-private - para criar / modificar playlists
- user-library-modify - para adicionar faixas de áudio aos favoritos
Há um problema: o comprimento da string de consulta é limitado, então, quando há um grande número de músicas na lista de reprodução, a consulta falha mesmo antes de começar. Para evitar esta situação, a lista de faixas é cortada em pedaços de 50 e o acréscimo é feito com vários pedidos.
O método da
search
API do Spotify oferece suporte a palavras-chave para pesquisar álbuns / artistas / títulos, que usaremos descaradamente.
Pesquisar Spotify
O Spotify tem um grande banco de dados de trilhas, mas nem todas as músicas estão lá. Você pode facilmente adivinhar que muitas músicas ausentes no Spotify se sobrepõem a muitas do banco de dados de músicas Yandex.Music. Algumas das faixas de música podem ser covers / remixes e outras perversões, e algumas podem simplesmente estar inseridas incorretamente: o álbum errado ou a ordem dos músicos é diferente.
Outro problema é adicionado por uma abordagem diferente para compilar informações sobre as faixas: o Spotify pode ter apenas um álbum e o Yandex.Music envia uma série de álbuns. Pode já haver vários performers lá e lá.
Deezer fornece um álbum e um artista, mas isso é outra história.
Portanto, a seguinte abordagem
- Para todos os álbuns são pesquisados por palavras-chave de correspondência exata
track:
,artist:
,album:
.
Na maioria das vezes, isso é o suficiente. - Se a faixa não for encontrada (ou o álbum não estiver especificado em Yandex.Music), será feita uma tentativa de busca sem um álbum.
- Se nenhuma faixa for encontrada, ele procura o próximo artista.
Melodias não encontradas e condições de busca de faixa de áudio fora do padrão são exibidas no registro. Você pode ver o que exatamente foi adicionado e, se necessário, processá-lo manualmente.
Nota
Este projeto é em geral necessário para uma tarefa única, ele foi desenvolvido em tempo livre, não para uso em aplicações industriais, então para um especialista experiente o código pode parecer nojento.
No entanto, ao desenvolver a prática, o PEP8 mais ou menos tentou ser seguido, e o tamanho geral do programa é bastante pequeno.
Códigos-fonte do programa
Versão atual do Python no momento da escrita: 3.8.4
Materiais usados:
- Ilustração de Pedro, o Porco: O livro "Pedro, o Porco e a Máquina", Petrushevskaya Ludmila
- Yandex.Music logo: YANDEX LLC
- Logotipo do Spotify: Spotify AB