ブラウザの外部で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



All Articles