ブラウザの外部でYandex Musicを使用します

最近、ブラウザを介さずにYandex Musicを使用したいと考えました。 それが判明したように、彼らはオープンAPIを持っていなかったし、ケースは些細ではありませんでした。 そして、何も準備ができていませんでした。

読むのが面倒な人はすぐに結果-python-yamusicに行くことができます。

仕事を分析します



始めるために、私はファイアバグで武装し、リクエストの行き先を追跡しました。 主な方向性が見つかりました:

最初の3つのクエリで受信したデータは、 Beautiful Soupを使用して簡単にフィルタリングできます。

コードで私のパーサーの実装を見ることができます

ダウンロードトラック



今ではすべてがシンプルに思えます。 トラック /2.xmlのstorage.music.yandex.ru/get storage dirにリクエストを行い、次の形式のxmlを取得します。
<?xml version="1.0" encoding="utf-8"?>
<track filename=" , 2.mp3" track-length=" " />

ここで、 storage.music.yandex.ru / download-info storage dir track / filename trackというリクエストを作成し、別のxml'kuを取得します
<download-info>
<host></host>
<path></path>
<ts> ts</ts>
<region></region>
<s> s</s>
</download-info>

しかし、トラックのジャンプのリクエストを見て、すべてのデータがあるわけではないことが明らかになりました。
javascriptをスクロールして、最初の文字とパラメーターなしでパスから必要なキーを作成する関数を見つけました。 この関数は、Pythonで書き換えるのが面倒なので、QScriptを介して実行するだけです。
これで、すべてのデータを取得して、トラックのurlをコンパイルできます:http:// host / get-mp3 / key / parameter ts pathTrack -id = id of track &\ region = region &from = service-search成功します。 ためらうことなく、私は1つのセッションですべてを実行しようとすることに決めました-すべてがすぐにうまくいきました。 結果はpython-yamusicライブラリです

ライブラリの使用



これは非常に簡単です。最初にQtアプリケーションを開始し、すべてのインポートを実行する必要があります。
>>> from yamusic.app import Search, cursor
>>> from PySide.QtCore import QCoreApplication
>>> import sys
>>> app = QCoreApplication(sys.argv)

検索のためにあります:
>>> cursor.search(Search.TYPE_ARTISTS, 'query')
>>> cursor.search(Search.TYPE_ALBUMS, 'query')
>>> cursor.search(Search.TYPE_TRACKS, 'query')

見つかったオブジェクトからデータを取得するには:
>>> artist.get_albums()
>>> artist.get_tracks()
>>> album.get_tracks()

そして、実際には、トラックを開くには:
>>> track.open()


PSおよび\ ion

Source: https://habr.com/ru/post/J133578/


All Articles