Musik herunterladen VKontakte

Guten Tag an alle.


Ich wollte meine ganze Musik von VKontakte auf einen USB-Stick herunterladen, wie in den guten alten Zeiten. Ein bisschen googeln und fast nichts mehr oder weniger akzeptabel finden, beschloss ich, alleine zu handeln. Nach einer halben Stunde haben wir ein funktionierendes Skript für uns. Also fangen wir an.


Um zu arbeiten, müssen Sie die vk_api herunterladen und Module anfordern!


Verbinden Sie zunächst die erforderlichen Module und deklarieren Sie einige Variablen:


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/' 

Jetzt schreiben wir die Autorisierungsmethode in Ihr VKontakte-Konto:


 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('   .') 

Die Methode prüft, ob wir uns bereits früher angemeldet haben? In diesem Fall können Sie in diesem Konto fortfahren oder sich erneut anmelden. In diesem Fall werden die alten Daten gelöscht.


Als Nächstes schreiben wir die auth_handler-Methode, die für die Autorisierung in Konten benötigt wird, in denen die Zwei-Faktor-Authentifizierung aktiviert ist:


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

Und jetzt können wir uns bei VKontakte anmelden. In der Auth-Methode wurde die SaveUserData () -Methode erwähnt, die zum Speichern von Daten benötigt wird. Lass es uns schreiben:


 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) 

Die Daten werden in binärer Form aufgezeichnet, um das Login und das Passwort des Benutzers nicht in klarer Form zu speichern.


Es bleibt noch eine Methode zum Herunterladen von Audio von VKontakte zu schreiben. Lassen Sie uns Folgendes tun:


 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('   .') 

Nun, das ist es. Jetzt haben wir ein funktionierendes Skript zum Herunterladen von Audioaufnahmen von VKontakte.
So sieht der gesamte Quellcode aus:


Quellcode anzeigen
 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() 

Ich lerne gerade, daher freue ich mich über alle Kommentare im Code. Vielen Dank für Ihre Aufmerksamkeit.

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


All Articles