Spothiefy:Yandex.Musicからすばやく無料で移動する方法

それで、7月に、多くの住民が楽しみにしていた何かが起こったので、国の生活はようやく良くなり始めました:Spotifyはロシアと他のいくつかの国で発売されました



しかし、ストリーミング音楽は昨日登場しませんでした。おそらく、Yandexに夢中になって、後にYandex.PlusになったYandex.Musicのサブスクリプションを使用している人がいるでしょう。



曲を聴くのが便利になり、セレクターは良いトラックを選択することを学びました。これにより、新しいサービスに新たに追加する必要のあるプレイリストやその他の便利なものを含むライブラリが蓄積されました。



試してみたいけど怠け者なら、持ち物をすばやく無料で移動する方法を説明します。バッテリー付きのパイソンがいくつか必要です。



PeterとSpotifayのカバー



注意!
, .



, . , . .

.



Spotify , . , . , - .



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



, .



/ .



シンプルなデバイスの助けを借りて、数日で私はSpotifyでトラックのインポーターを作成し、soundiizにお金をかけずに、何らかの理由で突然負荷が増加しました。



しかし、ニュアンスがあります。



API



Spotifyは、プレイリストとお気に入りの両方をライブラリに追加するためのAPIを含む、WebAPIサービスに関するある種のドキュメント提供しています。



同様に、Yandex.MusicにパブリックAPIがありませんが、必要であり、便利で便利なため、競合によってサードパーティの開発者にアクセスを提供するようになります。

したがって、ここでは少し曲がった道を進み、疑わしい評判のテクニックを使用します。



そして、ディーザーはどうですか?
Deezer, , API . Python, .





Spotify



ここではすべてが簡単です。開発者になるには、コンソールでアプリケーションキーを取得する必要があります以来、誰でもインストールできるOAuth

を追加することを提案します。Redirect URI一度に多くの人にサービスを提供するサービスにのみ必要ですが、私たちの場合、すべてがローカルで行われます。



Yandex.Music



アカウントにはユーザー名とパスワードが必要ですが、2要素認証が有効になっている場合は、Yandex.KeyからYandex.Passwordを指定する必要があります。



アプリケーション操作



Pythonアプリケーションの実行、仮想環境の展開などにこだわるつもりはないので、インポートがどのように機能するかを説明します。プログラムコードを含むリポジトリへのリンクは、記事の最後にあります



すべてのプラットフォームのAPIからのトラックは異なる形式で提供されるため、必要最小限のプロパティセットを使用して同じプレゼンテーションに変換されます。



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)


プレイリスト(お気に入りを含む)も同じ形式で、ループで簡単に使用できるようにトラックのイテレーターが含まれています。



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]


クラスはサービスとのやり取りを担当しますMusicProvider



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


YandexMusic (MusicProvider)初期化時に、 クラスは「いいね」プレイリストのすべてのプレイリストとすべてのトラックの情報をロードします。



Spotify (MusicProvider)含まれていませんが、インポートするためのメソッドが含まれています。



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

    def import_favorites(self, playlist):
        pass  #   


内部では、Yandex.Musicから取得した曲データを使用してSpotifyデータベース内のトラックを検索します。



プレイリスト内のすべてのトラックが見つかると、同じ名前で作成され(「いいね曲」でない場合)、見つかったすべてのメロディーが追加されます。



プレイリストと保存されたトラックには、異なる権限が必要です。



  • プレイリスト-変更-プライベート-プレイリストを作成/変更します
  • user-library-modify-お気に入りにオーディオトラックを追加します


問題があります。クエリ文字列の長さが制限されているため、プレイリストに膨大な数の曲があると、クエリを開始せずに失敗します。この状況を回避するために、トラックのリストは50個に分割され、いくつかのリクエストで追加が行われます。Spotify API



メソッドsearchは、恥知らずに使用するアルバム/アーティスト/タイトルで検索するためのキーワードをサポートしています。



Spotifyを検索



Spotifyには大規模なトラックデータベースがありますが、すべての音楽がそこにあるわけではありません。 Spotifyから欠落している多くの音楽が、多くのYandex.Musicソングデータベースと交差していることは簡単に推測できます。いくつかの音楽トラックはカバー/リミックスや他の倒錯であるかもしれません、そしていくつかは単に間違っているかもしれません:間違ったアルバム、またはミュージシャンの順序が異なっています。



トラックに関する情報をコンパイルするための別のアプローチによって、別の問題が追加されます。Spotifyは1つのアルバムしか持てず、Yandex.Musicは一連のアルバムを送信します。あちこちにすでに何人かのパフォーマーがいる可能性があります。



Deezerは1つのアルバムと1つのアーティストを提供していますが、それは別の話です。



したがって、次のアプローチを使用して、魚を食べて椅子に座ります。



  • すべてのアルバムのために完全一致のキーワードで検索されていますtrack:artist:album:

    多くの場合、これで十分です。
  • トラックが見つからない場合(またはアルバムがYandex.Musicで指定されていない場合)、アルバムなしで検索が試行されます。
  • トラックが見つからない場合は、次のアーティストで検索します。


見つからなかったメロディーと非標準のオーディオトラック検索条件がログに表示されます。正確に何が追加されたかを確認し、必要に応じて手動で処理できます。



注意



このプロジェクトは、概して1回限りのタスクに必要であり、産業用アプリケーションで使用するためではなく、自由時間に開発されたため、経験豊富なスペシャリストにとって、コードは不快に思えるかもしれません。



ただし、プラクティスを開発している間、PEP8は多かれ少なかれ従おうとし、プログラムの全体的なサイズはかなり小さいです。



プログラムのソースコード



執筆時点での現在のPythonバージョン:3.8.4



使用材料:



  • Peter Pigによるイラスト:本「Peterthe Pig and the Machine」、Petrushevskaya Ludmila
  • Yandex.Musicロゴ:YANDEX LLC
  • Spotifyロゴ:Spotify AB



All Articles