Spothiefy: Wie man schnell und kostenlos von Yandex.Music wechselt

Im Juli begann sich das Leben im Land endlich zum Besseren zu verändern, denn es geschah etwas, auf das sich viele Einwohner freuten: Spotify wurde in Russland und mehreren anderen Ländern eingeführt.



Aber Streaming-Musik ist gestern nicht erschienen, und es gibt sicherlich diejenigen, die von Yandex begeistert sind und ein Abonnement für Yandex.Music verwenden, das später zu Yandex.Plus wurde.



Es wurde bequem, Songs zu hören, die Selektoren lernten, gute Tracks auszuwählen, und dies führte zur Anhäufung einer Bibliothek mit Wiedergabelisten und anderen praktischen Dingen, die im neuen Dienst neu hinzugefügt werden müssen.



Wenn Sie es versuchen möchten, aber zu faul sind, werde ich Ihnen sagen, wie Sie Ihre Sachen schnell und kostenlos bewegen können. Sie brauchen nur ein paar Pythons mit Batterien.



Peter und das Spotifai-Cover



Beachtung!
, .



, . , . .

.



Spotify , . , . , - .



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



, .



/ .



Mit Hilfe einfacher Geräte gelang es mir in ein paar Tagen, einen Importeur von Tracks in Spotify zu erstellen und kein Geld für Soundiiz auszugeben, was aus irgendeinem Grund plötzlich die Last erhöhte.



Aber es gibt Nuancen.



API



Spotify bietet eine Art Dokumentation für seinen Web-API-Dienst, einschließlich einer API zum Hinzufügen von Wiedergabelisten und Favoriten zu seiner Bibliothek.



Yandex.Music wiederum verfügt nicht über eine öffentliche API , aber möglicherweise spornt der Wettbewerb sie an, Drittentwicklern Zugriff zu gewähren, da dies notwendig, bequem und nützlich ist.

Deshalb werden wir hier ein wenig einen gekrümmten Weg gehen und Tricks mit einem zweifelhaften Ruf anwenden.



Und was ist mit Deezer?
Deezer, , API . Python, .





Spotify



Hier ist alles einfach. Um Entwickler zu werden, müssen Sie den Anwendungsschlüssel in der Konsole abrufen .

Sie bieten an, Redirect URIfür OAuth hinzuzufügen , das von jedem installiert werden kann. Es wird nur für Dienste benötigt, die viele Menschen gleichzeitig bedienen, aber in unserem Fall geschieht alles vor Ort.



Yandex.Music



Sie benötigen einen Benutzernamen und ein Kennwort für Ihr Konto. Wenn jedoch die Zwei-Faktor-Authentifizierung aktiviert ist, müssen Sie Yandex.Password von Yandex.Key angeben.



Anwendungsbetrieb



Ich möchte mich nicht mit dem Ausführen von Python-Anwendungen, dem Bereitstellen einer virtuellen Umgebung usw. befassen. Daher werde ich beschreiben, wie der Import funktioniert. Link zum Repository mit dem Programmcode am Ende des Artikels .



Tracks von APIs aller Plattformen haben ein anderes Format, sodass sie mit den minimal erforderlichen Eigenschaften in dieselbe Präsentation konvertiert werden:



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)


Wiedergabelisten (einschließlich Favoriten) haben ebenfalls das gleiche Format und enthalten einen Track-Iterator zur einfachen Verwendung in 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]


Die Klasse ist für die Interaktion mit Diensten verantwortlich MusicProvider:



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


YandexMusic (MusicProvider)Bei der Initialisierung lädt die Klasse Informationen zu allen Wiedergabelisten und allen Titeln in die Wiedergabeliste "Ich mochte".



Spotify (MusicProvider)es tut es nicht, enthält aber Methoden zum Importieren:



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

    def import_favorites(self, playlist):
        pass  #   


Im Inneren wird anhand der von Yandex.Music erhaltenen Songdaten nach Titeln in der Spotify-Datenbank gesucht.



Nachdem alle Titel in der Wiedergabeliste gefunden wurden, wird sie mit demselben Namen erstellt (sofern es sich nicht um "Liked Songs" handelt) und alle gefundenen Melodien werden hinzugefügt.



Wiedergabelisten und gespeicherte Titel erfordern unterschiedliche Berechtigungen:



  • playlist-modify-private - zum Erstellen / Ändern von Wiedergabelisten
  • user-library-modify - um Audiotracks zu Favoriten hinzuzufügen


Es gibt ein Problem: Die Länge der Abfragezeichenfolge ist begrenzt. Wenn sich also eine große Anzahl von Titeln in der Wiedergabeliste befindet, schlägt die Abfrage fehl, ohne überhaupt zu starten. Um diese Situation zu vermeiden, wird die Liste der Spuren in Stücke von 50 Teilen geschnitten und die Hinzufügung mit mehreren Anfragen vorgenommen.



Die searchSpotify-API- Methode unterstützt Schlüsselwörter für die Suche nach Album / Künstler / Titel, die wir schamlos verwenden werden.



Suche Spotify



Spotify verfügt über eine große Titeldatenbank, aber nicht die gesamte Musik ist vorhanden. Sie können leicht erraten, dass sich viele in Spotify fehlende Musik mit vielen Yandex.Music-Songdatenbanken überschneidet. Einige der Musiktitel können Cover / Remixe und andere Perversionen sein, andere können einfach falsch eingefügt werden: Das falsche Album oder die Reihenfolge der Musiker ist unterschiedlich.



Ein weiteres Problem ist ein anderer Ansatz zum Zusammenstellen von Informationen zu Titeln: Spotify kann nur ein Album enthalten, und Yandex.Music sendet eine Reihe von Alben. Möglicherweise gibt es dort und dort bereits mehrere Künstler.



Deezer bietet ein Album und einen Künstler, aber das ist eine andere Geschichte.



Daher wird der folgende Ansatz verwendet, um sowohl den Fisch zu essen als auch auf dem Stuhl zu sitzen :



  • Für alle Alben für genau passende Keywords gesucht track:, artist:, album:.

    Meistens reicht dies aus.
  • Wenn der Titel nicht gefunden wird (oder das Album nicht in Yandex.Music angegeben ist), wird versucht, ohne Album zu suchen.
  • Wird kein Titel gefunden, wird mit dem nächsten Künstler gesucht.


Nicht gefundene Melodien und nicht standardmäßige Suchbedingungen für Audiospuren werden im Protokoll angezeigt. Sie können sehen, was genau hinzugefügt wurde, und es gegebenenfalls manuell verarbeiten.



Hinweis



Dieses Projekt ist im Großen und Ganzen für eine einmalige Aufgabe erforderlich. Es wurde in der Freizeit entwickelt und nicht für industrielle Anwendungen. Für einen erfahrenen Spezialisten mag der Code daher ekelhaft erscheinen.



Während der Entwicklung der Praxis hat PEP8 jedoch mehr oder weniger versucht, befolgt zu werden, und die Gesamtgröße des Programms ist eher gering.



Quellcodes des Programms



Aktuelle Python-Version zum Zeitpunkt des Schreibens: 3.8.4



Gebrauchte Materialien:



  • Illustration von Peter Pig: Buch "Peter das Schwein und die Maschine", Petrushevskaya Ludmila
  • Yandex.Music-Logo: YANDEX LLC
  • Spotify-Logo: Spotify AB



All Articles