Spothiefy: comment passer de Yandex.Music rapidement et gratuitement

Ainsi, en juillet, la vie dans le pays a finalement commencé à changer pour le mieux, car il s'est passé quelque chose que de nombreux résidents attendaient avec impatience: Spotify a été lancé en Russie et dans plusieurs autres pays.



Mais la musique en streaming n'est pas apparue hier, et il y a probablement ceux qui sont accros à Yandex et utilisent un abonnement à Yandex.Music, qui est devenu plus tard Yandex.Plus.



Il est devenu pratique d'écouter des chansons, les sélecteurs ont appris à sélectionner de bonnes pistes, ce qui a conduit à l'accumulation d'une bibliothèque avec des listes de lecture et d'autres choses pratiques qui doivent être ajoutées à nouveau dans le nouveau service.



Si vous voulez essayer, mais que vous êtes trop paresseux, alors je vous dirai comment déplacer vos affaires rapidement, gratuitement. Vous avez juste besoin de quelques pythons avec des piles.



Couverture de Peter et le Spotifai



Attention!
, .



, . , . .

.



Spotify , . , . , - .



— , . - ., - Spotify. , - , 144 / Ogg Vorbis.



, .



/ .



À l'aide d'appareils simples, en quelques jours, j'ai réussi à créer un importateur de pistes dans Spotify et à ne pas dépenser d'argent pour soundiiz, ce qui pour une raison quelconque a soudainement augmenté la charge.



Mais il y a des nuances.



API



Spotify fournit une sorte de documentation pour son service API Web, y compris une API pour ajouter à la fois des listes de lecture et des favoris à sa bibliothèque.



À son tour, Yandex.Music n'a pas d'API publique , mais peut-être que la concurrence les incitera à fournir un accès à des développeurs tiers, car c'est nécessaire, pratique et utile.

Par conséquent, nous allons ici aller un peu le long d'un chemin courbe, et utiliser des astuces à la réputation douteuse.



Et qu'en est-il de Deezer?
Deezer, , API . Python, .





Spotify



Tout est simple ici. Pour devenir développeur, vous devez obtenir la clé d'application dans la console .

Ils proposeront d'ajouter Redirect URIpour OAuth, qui peut être installé par n'importe qui. il n'est nécessaire que pour les services qui desservent beaucoup de monde à la fois, mais dans notre cas, tout se passe localement.



Yandex.Musique



Vous avez besoin d'un identifiant et d'un mot de passe pour votre compte, mais si l'authentification à deux facteurs est activée, vous devez spécifier Yandex.Password à partir de Yandex.Key.



Fonctionnement de l'application



Je ne veux pas m'arrêter à l'exécution d'applications Python, au déploiement d'un environnement virtuel, etc., je vais donc décrire le fonctionnement de l'importation. Le lien vers le référentiel avec le code du programme se trouve à la fin de l'article .



Les pistes des API de toutes les plates-formes sont présentées dans un format différent, elles sont donc converties dans la même présentation avec l'ensemble minimum de propriétés requis:



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)


Les listes de lecture (y compris les favoris) ont également le même format et incluent un itérateur de pistes pour une utilisation facile dans les boucles:



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]


La classe est responsable de l'interaction avec les services MusicProvider:



class MusicProvider:
    favorites = property(lambda self: self.__favorites)
    playlists = property(lambda self: self.__playlists)


YandexMusic (MusicProvider)Lors de l'initialisation, la classe charge les informations sur toutes les listes de lecture et toutes les pistes de la liste de lecture «J'ai aimé».



Spotify (MusicProvider)ce n'est pas le cas, mais contient des méthodes d'importation:



class Spotify(MusicProvider):
    def import_playlist(self, playlist):
        pass  #   

    def import_favorites(self, playlist):
        pass  #   


À l'intérieur, il recherche des pistes dans la base de données Spotify à l'aide des données de chanson obtenues à partir de Yandex.Music.



Une fois que toutes les pistes de la liste de lecture ont été trouvées, celle-ci est créée (s'il ne s'agit pas de "morceaux aimés") avec le même nom et toutes les mélodies trouvées y sont ajoutées.



Les listes de lecture et les pistes enregistrées nécessitent des autorisations différentes:



  • playlist-modify-private - pour créer / modifier des listes de lecture
  • user-library-modify - pour ajouter des pistes audio aux favoris


Il y a un problème: la longueur de la chaîne de requête est limitée, donc quand il y a un grand nombre de chansons dans la playlist, la requête échoue sans même démarrer. Pour éviter cette situation, la liste des pistes est découpée en morceaux de 50 pièces et l'ajout se fait avec plusieurs demandes.



La méthode searchAPI Spotify prend en charge les mots-clés pour la recherche par albums / artistes / titres, que nous utiliserons sans vergogne.



Rechercher Spotify



Spotify a une grande base de données de pistes, mais toute la musique n'est pas là. Vous pouvez facilement deviner qu'une grande partie de la musique absente de Spotify recoupe une grande partie de la base de données de chansons Yandex.Music. Certaines des pistes musicales peuvent être des reprises / remixes et d'autres perversions, et certaines peuvent simplement être incorrectes: le mauvais album, ou l'ordre des musiciens est différent.



Un autre problème est ajouté par une approche différente de la compilation des informations sur les pistes: Spotify ne peut avoir qu'un seul album et Yandex.Music envoie un tableau d'albums. Il y a peut-être déjà plusieurs artistes là-bas et là-bas.



Deezer fournit un album et un artiste, mais c'est une autre histoire.



Par conséquent, l'approche suivante est utilisée pour manger à la fois le poisson et s'asseoir sur la chaise :



  • Pour tous les albums sont recherchées pour les mots clés exacts track:, artist:, album:.

    Plus souvent qu'autrement, cela suffit.
  • Si la piste n'est pas trouvée (ou si l'album n'est pas spécifié dans Yandex.Music), une tentative de recherche est effectuée sans album.
  • Si aucune piste n'est trouvée, il recherche avec l'artiste suivant.


Les mélodies non trouvées et les conditions de recherche de pistes audio non standard sont affichées dans le journal. Vous pouvez voir exactement ce qui a été ajouté et, si nécessaire, le traiter manuellement.



Remarque



Ce projet est généralement nécessaire pour une tâche ponctuelle, il a été développé pendant le temps libre, non pour une utilisation dans des applications industrielles, donc pour un spécialiste chevronné, le code peut sembler dégoûtant.



Cependant, tout en développant la pratique, PEP8 a plus ou moins essayé d'être suivi, et la taille globale du programme est plutôt petite.



Codes sources du programme



Version actuelle de Python au moment de la rédaction: 3.8.4



Matériaux utilisés:



  • Illustration de Peter Pig: Le livre "Peter le cochon et la machine", Petrushevskaya Ludmila
  • Logo Yandex.Music: YANDEX LLC
  • Logo Spotify: Spotify AB



All Articles