рд╕рдВрдЧреАрдд рд╕рдВрдЧреНрд░рд╣ vk.com рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рд╣рд╛рдп, рд╣рдмреНрдмрд░!

рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ vkontakte рд╕реЗ рдЕрдкрдирд╛ рд╕рдВрдЧреАрдд рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ 1000 рдЧрд╛рдиреЗ рд╣реИрдВ)ред рдореИрдВ vk.api рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ + рдЕрдиреБрд░реЛрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ - рдХрдЯ рдХреЗ рдиреАрдЪреЗ!

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╣рдо рдЕрдкрдиреЗ VKontakte рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рддреЛ рд╣рдорд╛рд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдЦреЛрд▓реЗрдВ (рдореИрдВрдиреЗ Chrome, F12 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ) рдФрд░ vk.com/audio рдкрд░ рдЬрд╛рдПрдВ ред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдЕрдиреБрд░реЛрдз рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрд░реНрде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ GET рдЕрдиреБрд░реЛрдз рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрд╡рд╛рдм рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╣рдореЗрдВ html рдкреЗрдЬ рдХреЛрдб рджреЗрддрд╛ рд╣реИред
рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ: рд╕реАрдПрд╕рдПрд╕, рдЬреЗрдПрд╕ рдФрд░ рдЫрд╡рд┐рдпрд╛рдВред
рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд░реЗрдЦрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ: рдпрд╣ рдПрдХ POST рдЕрдиреБрд░реЛрдз рд╣реИ рдЬрд┐рд╕реЗ рдСрдбрд┐рдпреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЕрдиреБрд░реЛрдз рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреЗрдЬрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдПрдХ рдкрдВрдХреНрддрд┐ рджреЗрддрд╛ рд╣реИ:

11055<!>audio.css,audio.js<!>0<!>6362<!>0<!>{"all":[ ['17738938','173762121', 'http://cs1276.userapi.com/u1040081/audio/c0e97293c5e2.mp3','300','5:00', 'Louis Prima','Sing, Sing, Sing (With A Swing)','369754','0','0','','0','1'], ['17738938','173368012', 'http://cs4372.userapi.com/u9237008/audio/5f51ceac6ca1.mp3','326','5:26', 'Look at my horse','My horse is amazing','10324035','0','0','','0','1'], ... 


рдмрд┐рдВрдЧреЛ! рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЬрд╡рд╛рдм рдореЗрдВ, рд╕рд░реНрд╡рд░ рдиреЗ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕рднреА рд░рдЪрдирд╛рдУрдВ рдХреА JSON рд╕реВрдЪреА рджреА рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдП:


рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ



рд╣рдо рд╕реНрд╡рд╛рдЧрдд рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд┐рд╕ рд╣реЗрдбрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ:

 Request Headers: Accept:*/* Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Content-Length:45 Content-Type:application/x-www-form-urlencoded Cookie:remixlang=0; remixseenads=2; audio_vol=100; remixdt=0;remixsid=************; remixflash=11.4.31 Host:vk.com Origin:http://vk.com Referer:http://vk.com/audio User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 X-Requested-With:XMLHttpRequest Form: Dataview URL encoded act:load_audios_silent al:1 gid:0 id:17738938 


рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 import requests as r def getAudio(): response = r.post(url = "http://vk.com/audio", data = { "act":"load_audios_silent", "al":"1", "gid":"0", "id":"17738938" } ) print response.content getAudio() 


Request.post рдлрд╝рдВрдХреНрд╢рди url рдХреЗ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╣ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рд╣реИрдВ:


рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛
 <!--11055<!>audio.css,audio.js<!>0<!>6362<!>3<!>230b860567731c4875 


рдкрд░рд┐рдгрд╛рдо рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдордиреЗ рдпрд╣ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдХреАрдЬрд╝ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░реЗрдВ:

 import requests as r def getAudio(): response = r.post( "http://vk.com/audio", data = { 'act':"load_audios_silent", "al":"1", "gid":"0", "id":"17738938" }, headers = { "Cookie":"remixlang=0; remixseenads=2; remixdt=0; remixsid=**************; audio_vol=96; remixflash=11.4.31" } ) print response.content[0:1000] getAudio() 


рдЕрдм рд╣рдореЗрдВ рд╡рд╣реА рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

рд╕рдм рдареАрдХ рд╣реИред рд╣рдореЗрдВ рдЬреЛ рд╕реВрдЪреА рдорд┐рд▓реА рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреАрдд рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдмрд╕ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

 #-*-coding:cp1251-*- import requests as r import re import random as ran import os import urllib as ur #    : ALLOW_SYMBOLS = " qwertyuiopasdfghjklzxcvbnm.,-()" COOKIE = "" #   cookies,    . def getAllowName(string): """    ,      ALLOW_SYMBOLS""" s='' for x in string.lower(): if x in ALLOW_SYMBOLS: s += x return s def getRandomElement(arr, delete = False): """    arr.  delete = True,      .""" index = ran.randrange(0, len(arr), 1) value = arr[index] if delete: arr.remove(value) return value def getAudio(): """     .         """ response = r.post( "http://vk.com/audio", data = { 'act':"load_audios_silent", "al":"1", "gid":"0", "id":"17738938" }, headers = { "Cookie":COOKIE } ) i=0 pat = re.compile(r"\[.+?\]") #    [.*] return pat.findall(response.content) #    already_added = [] #   id ,   . pat = re.compile(r"\'(.+?)\'") #     '.*' def OneDownload(x): """   ,   ( ['...', '...', '...', ...])   """ global already_added try: elements = pat.findall(x) #   id, url, author, name = (elements[1], elements[2], elements[5], elements[6]) #  - id, url, author, name except: return if id not in already_added: #     already_added.append(id) #    file_path = "audio/"+getAllowName(author+" - "+name)+".mp3" # ,       with open(file_path, "w"): #      pass ur.urlretrieve(url, file_path) #   print name, "downloaded" def getFirstNSongs(first=0, last = None): """,    ,         """ if not os.path.exists(os.path.join(os.getcwd(), 'audio')): #   audio   os.mkdir('audio') songs = getAudio() #   #  ,     first  last: if last!=None: songs = songs[first:last+1] else: songs = songs[first:] for x in songs: #    OneDownload(x) #  getFirstNSongs(last = 10) 


рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХрд╛рд░реНрдп OneDownload () рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЧрд╛рдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди urllib.urlretrieve (url, file_path, ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ url рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ рдФрд░ file_path рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд╕рдм рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрд░реЗ-рдзреАрд░реЗ!

рд╣рдо рдЕрдкрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡реЗ рд╡рдирдбреЙрдХ рд╣реИрдВред рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдмрдирд╛рдПрдБ:

 def Thread(f): def _inside(*a, **k): thr = threading.Thread(target = f, args = a, kwargs = k) thr.start() return _inside 


рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрд╕ рд╕реНрд╡реАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред

рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ - рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдЗрд╕ рдЪрд░ рдХреЛ рд╕реАрдзреЗ рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

рд╡реЗрддрди рд╡реГрджреНрдзрд┐, рдФрд░ рд░рд╕реАрдж:

 alive_threads = 0 def inc(x): #  global alive_threads alive_threads+=x return alive_threads def get(): #  global alive_threads return alive_threads 


рдЕрдм рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

 #-*-coding:cp1251-*- import requests as r import re import threading import time import random as ran import os import urllib as ur THREADS_COUNT = 10 ALLOW_SYMBOLS = " qwertyuiopasdfghjklzxcvbnm.,-()" COOKIE = "" #  cookies def getAllowName(string): s='' print string.lower() for x in string.lower(): if x in ALLOW_SYMBOLS: s += x return s def getRandomElement(arr, delete = False): index = ran.randrange(0, len(arr), 1) value = arr[index] if delete: arr.remove(value) return value alive_threads = 0 def inc(x): global alive_threads alive_threads+=x return alive_threads def get(): global alive_threads return alive_threads def Thread(f): def _inside(*a, **k): thr = threading.Thread(target = f, args = a, kwargs = k) thr.start() return _inside def getAudio(): response = r.post( "http://vk.com/audio", data = { 'act':"load_audios_silent", "al":"1", "gid":"0", "id":"17738938" }, headers = { "Cookie":COOKIE } ) i=0 pat = re.compile(r"\[.+?\]") return pat.findall(response.content) already_added = [] #   id ,   . pat = re.compile(r"\'(.+?)\'") #     '.*' count = 0 @Thread def OneDownload(x): global already_added inc(1) #    -    try: elements = pat.findall(x) id, url, author, name = (elements[1], elements[2], elements[5], elements[6]) except: return if id not in already_added: already_added.append(id) file_path = "audio/"+getAllowName(author+" - "+name)+".mp3" with open(file_path, "w"): pass ur.urlretrieve(url, file_path) inc(-1) #  -  def getFirstNSongs(a=0, N = None): if not os.path.exists(os.path.join(os.getcwd(), 'audio')): os.mkdir('audio') songs = getAudio() if N!=None: songs = songs[a:N] else: songs = songs[a:] previous = 0 #        cc=10 while (len(songs)>0 and len(songs)!=previous) or (len(songs) == previous and cc>0): #   ,          10  if previous != len(songs): previous = len(songs) #,    .   -  cc=10 #  - 10 else: cc-=1 #  ,     1.  -     10      print " ", len(songs), " ", alive_threads while alive_threads<THREADS_COUNT: #     x = getRandomElement(songs, delete = True) #  ,    try: OneDownload(x) #  except: songs.append(x) #   -  . while alive_threads>=THREADS_COUNT: time.sleep(10) #      -  10 . getFirstNSongs(N=3) #, ,  3  


рдЕрдм рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕реВрддреНрд░реЛрдВ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

VKmusic

#UPD
рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдмрдЧ рдерд╛, рд╕рдВрдЧреАрдд рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкреГрд╖реНрда рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг:
VKMusic

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


All Articles