VK APIとPython3を使用してVKから音楽をダウンロードする

最近では、6月1日でしたが、9月1日です。 秋は庭にあります。



はい、最近も、彼は背を向けて目を覚ました-メールはVKを吸収しました。 そして始まりました。広告なしで動画を見たり、音楽を聴いたりすることはできません-著作権者は禁止されています。 噂によれば、彼らはまったく禁止するという。 何かがおかしいと感じました。 そして、ここはまさにそのような時期です。 予備金を集めてみませんか? 私は自分の音楽をコンピューターに保存し、ディスクに転送します-それはどんなジャムよりも甘いでしょう! そして、これは奇妙ではないにしても、VK自体、またはむしろそのAPIを助けてください。 また、3番目のpython、組み込みurllibライブラリ、およびjson形式のデータを操作するためのライブラリ。



api vkを使用すると、ユーザーのオーディオ録音に関する情報を要求できます。 回答はjson形式で提供され、ユーザーのオーディオ録音の数と、そのような情報が利用可能な場合、各曲に関する拡張情報が含まれます。 そして最も重要なこととして、各曲には、VKサーバー上にあるURLがあります。 必要なものだけです。



ほとんどのapiメソッドを使用するには、vkがアプリケーションに発行する特別なキー(以降、access_tokenと呼びます)が必要です。 入手方法-少し後で説明します。



アプリケーションがページの情報へのアクセスを要求するとすぐに表示されるウィンドウを覚えていますか? [許可]をクリックすると、あなたの名前でaccess_tokenを受け取る権利がアプリケーションに与えられます。これには、ページからの情報へのアクセスが含まれます。



さあ、始めましょうか?



開発者 」タブを開き、新しいアプリケーションを作成します。



画像



アプリケーションの名前を入力し、そのタイプを選択します:standalone-application:



画像



SMSを介してアクションを確認します。SMSはモバイルに該当します。



画像



すべての手続きを完了するとすぐに、アプリケーションのIDを取得します。これは、access_token-aを取得するために使用します。 クライアントスタンドアロンアプリケーションの承認に特化したドキュメントの一部を開きましょう。



画像



画像



重要です

この場合のredirect_uriは等しくなければなりません oauth.vk.com/blank.html



oauth.vk.com/blank.html



。ブラウザベースのJavaScriptアプリケーションを開発している場合にのみ、異なるアドレスを指定する必要があるためです。



このアプリケーションではオーディオレコーディングを使用するため、オーディオパラメーターをscope属性に渡します。 通常、access_tokenはしばらく発行されます。 無期限に取得するには、オフラインパラメーターをスコープ属性に渡すことができます。



注:



スコープ属性パラメーターの完全な表については、 リンクをご覧ください



その結果、アドレスバーで次のように操作します。

  https://oauth.vk.com/authorize/client_id=YOUR_CLIENT_ID&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token 


すべてがうまくいった場合、このウィンドウが表示されます。



画像



認証に成功し、アクセス権を取得すると、次の場所にリダイレクトされます oauth.vk.com/blank.html



oauth.vk.com/blank.html



アドレスバーに属性access_token= YOUR_ACCESS_TOKEN



が表示されます。 今後このキーを紛失しないように、このキーを保存してください。 APIにリクエストを書き込むときに使用します。



ユーザーのオーディオ録音のリストを取得するには、api audio.getメソッドを使用します。 上で言ったように、audio.getメソッドはjson形式で応答を返します。 このメソッドを返すjsonオブジェクトの例を次に示します。

 {
	 「応答」:
		 [712、
			 {
			 「援助」:393825624、
			 「owner_id」:59223044、
			 「アーティスト」:「聖アソニア」、
			 「title」:「Blow Me Wide Open」、
			 「期間」:224、
			 url:http:\ / \ / cs9-11v4.vk.me \ / p13 \ /39a25fcb2c8ce0.mp3
			 「lyrics_id」:「274446714」、
			 「ジャンル」:18
			 }、
			 {「援助」:392782493、
			 「owner_id」:59223044、
			 「アーティスト」:「コンゴ」、
			 「タイトル」:「私は冗談です」、
			 「期間」:225、
			 url:http:\ / \ / cs9-12v4.vk.me \ / p15 \ /b4d77a6a010d08.mp3
			 「lyrics_id」:「184734619」
			 、「ジャンル」:21
			 }
		 ]
 }


ご覧のとおり、オブジェクトは応答キーを持つ辞書で構成されており、これには曲の配列が格納されています。



最初のオブジェクトは、ユーザーのページにある曲の数であり、後続のオブジェクトはすべて、曲に関する情報を含む辞書です。 urllibライブラリのrequest.urlopenメソッドを使用します。これにより、インターネット上のURLアドレスで保存されたデータを取得できます。



urllib.requestからurlopenをインポート



urlopen関数には、必須パラメーター(開くURL)が必要です。 私たちの場合、これはaudio.getメソッドです。



画像



api vkメソッドにアクセスするには、次の場所にあるメソッドをプルする必要があります
  https://api.vk.com/method/METHOD_NAME? 
メソッドが必要とするすべての引数をそこに渡します。



したがって、開くURLを記述します。

アドレス= 'https://api.vk.com/method/audio.get?owner_id=YOUR_OWNER_ID&access_token=YOUR_ACCESS_TOKEN'


そしてそれを開きます:



データ= urlopen(アドレス)



デコードされていない情報を受信するため、受信したデータを読み取ってデコードする必要があります。 そして、これはすべてjson形式でラップされているため、辞書をPythonオブジェクトとして処理するには、jsonライブラリを使用する必要があります。



JSONをインポート



ロード()メソッドを使用して、json形式のオブジェクトを含む文字列をPythonオブジェクトに変換します。



decode_response = data.read()。decode()

final_data = json.loads(decoded_response)



やった! これで、final_data変数に含まれるデータにアクセスできます。 歌に関する情報を含むすべての辞書を取得します。



曲= final_data ['response'] [1:]



この行を使用して、応答配列のすべての要素を1から最終まで取得しました。 次に、各曲を個別に処理します。

歌の歌の場合:
	 song_artist = song ['アーティスト']
	 song_title =歌['タイトル']
	 song_url =歌['url'] 




song_urlに保存されている情報を取得します。



cached_song = urlopen(song_url).read()



そして、ファイルに書き込みます。 どこで作成しますか? このためには、osライブラリが必要になります。 ループの外側に記述します。

輸入OS



C関数ディスクに音楽フォルダーを作成します
os.mkdir( 'C://音楽')



これで、曲を録音するフォルダができました。



曲を整然と保つために、アーティストごとにグループを作成します。 そして、フォルダーを作成する必要があるかどうかを理解するために、os.listdir関数を使用します。この関数は、指定されたパスにあるオブジェクトのリストを返します。

 song_artistがos.listdirにない場合( 'C:// Music'):
	 os.mkdir( 'C://音楽/%s'%(song_artist)) 




次に、ファイルを作成し、そこに曲を録音します。

filename = 'C://Music/%s/%s.mp3'%(song_artist、song_title)

ファイル=オープン(ファイル名、「w​​b」)

file.write(cached_song)

file.close()



やったー 美しいコードをもう一度見て、「実行」をクリックするだけです。 まあ、そしてもちろん、歌は録音するのに時間が必要なので、ちょっと待ってください。



プログラムの全文
 urllib.requestからurlopenをインポート
 JSONをインポート
輸入OS
 os.mkdir( 'C://音楽')

アドレス= 'https://api.vk.com/method/audio.get?owner_id=MY_ID&access_token=MY_TOKEN'
データ= urlopen(アドレス)
 decode_response = data.read()。decode()
 final_data = json.loads(decoded_response)
曲= final_data ['response'] [1:]
歌の歌の場合:
        song_artist = song ['アーティスト']
        song_title =歌['タイトル']
        song_url =歌['url']
        cached_song = urlopen(song_url).read()
        song_artistがos.listdirにない場合( 'C:// Music'):
               os.mkdir( 'C://音楽/%s'%(song_artist))
        filename = 'C://Music/%s/%s.mp3'%(song_artist、song_title)
       ファイル=オープン(ファイル名、「w​​b」)
        file.write(cached_song)
        file.close()




音楽を楽しみ、プログラミングが大好きです。 接続へ!



All Articles