рд╕рдВрдЧреАрдд VKontakte рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рдиред


рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рд╕рдВрдЧреАрдд VKontakte рд╕реЗ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВред рдереЛрдбрд╝рд╛ рдЧреБрдЧрд▓реА рдХрд░рдирд╛ рдФрд░ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд▓рдЧрдирд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЕрднрд┐рдирдп рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдзреЗ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реАред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ vk_api рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:


import os import pickle import vk_api import requests from vk_api import audio from time import time vk_file = "vk_config.v2.json" REQUEST_STATUS_CODE = 200 path = 'vk_music/' 

рдЕрдм рд╣рдо рдЖрдкрдХреЗ VKontakte рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВрдЧреЗ:


 def Auth(new=False): try: USERDATA_FILE = r"AppData/UserData.datab" #  ,   id global my_id #   ,         # ,     ?  ,   if (os.path.exists(USERDATA_FILE) and new == False): with open(USERDATA_FILE, 'rb') as DataFile: LoadedData = pickle.load(DataFile) login = LoadedData[0] password = LoadedData[1] my_id = LoadedData[2] else: #  ,     ,        if (os.path.exists(USERDATA_FILE) and new == True): os.remove(USERDATA_FILE) login = str(input(" \n> ")) password = str(input(" \n> ")) my_id = str(input(" id \n> ")) SaveUserData(login, password, my_id) SaveData = [login, password, my_id] with open(USERDATA_FILE, 'wb') as dataFile: pickle.dump(SaveData, dataFile) #    vk_session = vk_api.VkApi(login=login, password=password) try: vk_session.auth() #  ,   ,      .   . except: vk_session = vk_api.VkApi(login=login, password=password, auth_handler=auth_handler) # auth_handler=auth_handler -  , .  vk_session.auth() print('  .') vk = vk_session.get_api() global vk_audio #  ,       vk_audio = audio.VkAudio(vk_session) except KeyboardInterrupt: print('   .') 

рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд▓реЙрдЧ рдЗрди рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рддреЛ рд╡рд┐рдзрд┐ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧреА? рдпрджрд┐ рдРрд╕рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдЦрд╛рддреЗ рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреБрд░рд╛рдирд╛ рдбреЗрдЯрд╛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:


 def auth_handler(): code = input("  \n> ") remember_device = True # True -         return code, remember_device 

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо VKontakte рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ, SaveUserData () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


 def SaveUserData(login, password, profile_id): USERDATA_FILE = r"AppData/UserData.datab" if (not os.path.exists("AppData")): #    AppData -   os.mkdir("AppData") SaveData = [login, password, profile_id] #     with open(USERDATA_FILE, 'wb') as dataFile: #      pickle.dump(SaveData, dataFile) 

рдбреЗрдЯрд╛ рдмрд╛рдЗрдирд░реА рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рди рдХрд░реЗрдВред


рдпрд╣ VKontakte рд╕реЗ рдСрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЪрд▓реЛ рдпрд╣ рдХрд░рддреЗ рд╣реИрдВ:


 def main(): try: if (not os.path.exists("AppData")): os.mkdir("AppData") if not os.path.exists(path): os.makedirs(path) #  ,    -     auth_dialog = str(input(" ? yes/no\n> ")) if (auth_dialog == "yes"): Auth(new=True) elif (auth_dialog == "no"): Auth(new=False) else: print(',  .') main() print('  ...') os.chdir(path) #   audio = vk_audio.get(owner_id=my_id)[0] print(' :', len(vk_audio.get(owner_id=my_id)), '.') count = 0 time_start = time() print(" ...\n") #  , ,    . for i in vk_audio.get(owner_id=my_id): try: print(': ' + i["artist"] + " - " + i["title"]) count += 1 r = requests.get(audio["url"]) if r.status_code == REQUEST_STATUS_CODE: print(' : ' + i["artist"] + " - " + i["title"]) with open(i["artist"] + ' - ' + i["title"] + '.mp3', 'wb') as output_file: output_file.write(r.content) except OSError: print("!!!     тДЦ", count) time_finish = time() print("" + vk_audio.get(owner_id=my_id) + "   : ", time_finish - time_start + " .") except KeyboardInterrupt: print('   .') 

рдЦреИрд░, рдпрд╣ рдмрд╛рдд рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ VKontakte рд╕реЗ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдордХрд╛рдЬреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред
рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


рд╕реНрд░реЛрдд рдХреЛрдб рджрд┐рдЦрд╛рдПрдВ
 import os import pickle import vk_api import requests from vk_api import audio from time import time __version__ = 'VK Music Downloader v1.0' APP_MESSAGE = ''' _ . ___ /\\ | | | \\ | | | \\ / | / /__\\ | | | \\ | | | \\ / |/ / \\ |___| |__/ | |___| \\/ |\\ ''' vk_file = "vk_config.v2.json" REQUEST_STATUS_CODE = 200 path = 'vk_music/' def auth_handler(remember_device=None): code = input("  \n> ") if (remember_device == None): remember_device = True return code, remember_device def SaveUserData(login, password, profile_id): USERDATA_FILE = r"AppData/UserData.datab" SaveData = [login, password, profile_id] with open(USERDATA_FILE, 'wb') as dataFile: pickle.dump(SaveData, dataFile) def Auth(new=False): try: USERDATA_FILE = r"AppData/UserData.datab" #  ,   id global my_id if (os.path.exists(USERDATA_FILE) and new == False): with open(USERDATA_FILE, 'rb') as DataFile: LoadedData = pickle.load(DataFile) login = LoadedData[0] password = LoadedData[1] my_id = LoadedData[2] else: if (os.path.exists(USERDATA_FILE) and new == True): os.remove(USERDATA_FILE) login = str(input(" \n> ")) password = str(input(" \n> ")) my_id = str(input(" id \n> ")) SaveUserData(login, password, my_id) SaveData = [login, password, my_id] with open(USERDATA_FILE, 'wb') as dataFile: pickle.dump(SaveData, dataFile) vk_session = vk_api.VkApi(login=login, password=password) try: vk_session.auth() except: vk_session = vk_api.VkApi(login=login, password=password, auth_handler=auth_handler) vk_session.auth() print('  .') vk = vk_session.get_api() global vk_audio vk_audio = audio.VkAudio(vk_session) except KeyboardInterrupt: print('   .') def main(): try: if (not os.path.exists("AppData")): os.mkdir("AppData") if not os.path.exists(path): os.makedirs(path) auth_dialog = str(input(" ? yes/no\n> ")) if (auth_dialog == "yes"): Auth(new=True) elif (auth_dialog == "no"): Auth(new=False) else: print(',  .') main() print('  ...') os.chdir(path) #   audio = vk_audio.get(owner_id=my_id)[0] print(' :', len(vk_audio.get(owner_id=my_id)), '.') count = 0 time_start = time() #     print(" ...\n") #      for i in vk_audio.get(owner_id=my_id): try: print(': ' + i["artist"] + " - " + i["title"]) #         count += 1 r = requests.get(audio["url"]) if r.status_code == REQUEST_STATUS_CODE: print(' : ' + i["artist"] + " - " + i["title"]) with open(i["artist"] + ' - ' + i["title"] + '.mp3', 'wb') as output_file: output_file.write(r.content) except OSError: print("!!!     тДЦ", count) time_finish = time() print("" + vk_audio.get(owner_id=my_id) + "   : ", time_finish - time_start + " .") except KeyboardInterrupt: print('   .') if __name__ == '__main__': print(APP_MESSAGE) print(__version__ + "\n") main() 

рдореИрдВ рдЕрднреА рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреЛрдб рдХреА рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles