From ade1aa5066dd0c4aacf6d7015ba81bb07da5d38d Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Fri, 24 Nov 2017 06:02:18 +0300 Subject: [PATCH 1/2] Update audio url decryption script --- examples/get_album_audio.py | 3 +-- vk_api/audio.py | 13 +++++++------ vk_api/audio_url_decoder.py | 14 ++++++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/examples/get_album_audio.py b/examples/get_album_audio.py index 4dd3302a..ba00b464 100644 --- a/examples/get_album_audio.py +++ b/examples/get_album_audio.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -import collections +# -*- coding: utf-8 -*- import vk_api from vk_api.audio import VkAudio diff --git a/vk_api/audio.py b/vk_api/audio.py index e3ed2481..b64c6eba 100644 --- a/vk_api/audio.py +++ b/vk_api/audio.py @@ -11,9 +11,10 @@ class VkAudio: - __slots__ = ('_vk',) + __slots__ = ('_vk', 'user_id') def __init__(self, vk): + self.user_id = vk.get_api().users.get()[0]['id'] self._vk = vk def get(self, owner_id=None, album_id=None, offset=0): @@ -49,7 +50,7 @@ def get(self, owner_id=None, album_id=None, offset=0): 'You don\'t have permissions to browse user\'s audio' ) - return scrap_data(response.text) + return scrap_data(response.text, self.user_id) def get_albums(self, owner_id, offset=0): """ Получить список альбомов пользователя @@ -99,7 +100,7 @@ def search_user(self, owner_id, q=''): ) return [ - i for i in scrap_data(response.text) + i for i in scrap_data(response.text, self.user_id) if RE_AUDIO.search(i['id']) ] @@ -119,10 +120,10 @@ def search(self, q='', offset=0): } ) - return scrap_data(response.text) + return scrap_data(response.text, self.user_id) -def scrap_data(html): +def scrap_data(html, user_id): """ Парсинг списка аудиозаписей из html странцы """ soup = BeautifulSoup(html, 'html.parser') @@ -133,7 +134,7 @@ def scrap_data(html): link = audio.select('.ai_body')[0].input['value'] if 'audio_api_unavailable' in link: - link = decode_audio_url(link) + link = decode_audio_url(link, user_id) tracks.append({ 'artist': artist, diff --git a/vk_api/audio_url_decoder.py b/vk_api/audio_url_decoder.py index decdf3d8..a59b47ae 100644 --- a/vk_api/audio_url_decoder.py +++ b/vk_api/audio_url_decoder.py @@ -19,7 +19,7 @@ def splice(l, a, b, c): return l[:a] + [c] + l[a + b:], l[a:a + b] -def decode_audio_url(string): +def decode_audio_url(string, user_id): vals = string.split("?extra=", 1)[1].split("#") tstr = vk_o(vals[0]) @@ -38,12 +38,14 @@ def decode_audio_url(string): tstr = vk_xor(tstr, arg[0]) elif cmd == 's': tstr = vk_s(tstr, arg[0]) + elif cmd == 'i': + tstr = vk_i(tstr, arg[0], user_id) else: raise VkAudioUrlDecodeError( 'Unknown decode cmd: "{}"; Please send bugreport'.format(cmd) ) - return tstr + return tstr[:-151] def vk_o(string): @@ -107,8 +109,8 @@ def vk_s_child(t, e): e = int(e) for a in range(i - 1, -1, -1): - e = abs(e) + a + i - o.append(e % i | 0) + e = (i * (a + 1) ^ e + a) % i + o.append(e) return o[::-1] @@ -127,3 +129,7 @@ def vk_s(t, e): t[a] = y[0] return ''.join(t) + + +def vk_i(t, e, user_id): + return vk_s(t, int(e) ^ user_id) From db4af0426347b4208802fabc10cf0b6857a6b653 Mon Sep 17 00:00:00 2001 From: Ivan Semkin Date: Fri, 24 Nov 2017 23:52:15 +0300 Subject: [PATCH 2/2] Remove audio link formatting --- vk_api/audio_url_decoder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vk_api/audio_url_decoder.py b/vk_api/audio_url_decoder.py index a59b47ae..c03cb34b 100644 --- a/vk_api/audio_url_decoder.py +++ b/vk_api/audio_url_decoder.py @@ -45,7 +45,7 @@ def decode_audio_url(string, user_id): 'Unknown decode cmd: "{}"; Please send bugreport'.format(cmd) ) - return tstr[:-151] + return tstr def vk_o(string):