def auth(self, new=False): try: if (os.path.exists(self.USERDATA_FILE) and new == False): with open(self.USERDATA_FILE, 'rb') as DataFile: LoadedData = pickle.load(DataFile) self.login = LoadedData[0] self.password = LoadedData[1] self.user_id = LoadedData[2] else: if (os.path.exists(self.USERDATA_FILE) and new == True): os.remove(self.USERDATA_FILE) self.login = str(input("Введите логин\n> ")) self.password = str(input("Введите пароль\n> ")) self.user_id = str(input("Введите id профиля\n> ")) self.saveUserData() SaveData = [self.login, self.password, self.user_id] with open(self.USERDATA_FILE, 'wb') as dataFile: pickle.dump(SaveData, dataFile) vk_session = vk_api.VkApi(login=self.login, password=self.password) try: vk_session.auth() except: vk_session = vk_api.VkApi(login=self.login, password=self.password, auth_handler=self.auth_handler) vk_session.auth() print('Вы успешно авторизовались.') self.vk = vk_session.get_api() self.vk_audio = audio.VkAudio(vk_session) except KeyboardInterrupt: print('Вы завершили выполнение программы.')
def get_vk_songs(vk_session, user_id): vk_audio = audio.VkAudio(vk_session) songs = vk_audio.get(user_id) try: songs = vk_audio.get(user_id) return songs except (vk_api.exceptions.AccessDenied, ValueError) as error: songs = 'Введен неверный id, либо профиль или аудиозаписи пользователя закрыты\nПроверьте id и настройки приватности и попробуйте ещё раз.' return songs
def auth(self, vk_login, vk_password): vk_session = vk_api.VkApi(login=vk_login, password=vk_password) try: vk_session.auth() except: return 2 # vk = vk_session.get_api() # Теперь можно обращаться к методам API как к обычным классам self.vk_audio = audio.VkAudio(vk_session) # Получаем доступ к audio return 0
def auth(self, login, password, user_id): 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=self.inputAccessCode) vk_session.auth() self.vk = vk_session.get_api() self.vk_audio = audio.VkAudio(vk_session)
def authorization(self): from vk_api import audio login, password = self.login.text().strip(), self.password.text( ).strip() try: auth = self.auth_handler self.vk_session = vk_api.VkApi(login, password, auth_handler=auth) self.vk_session.auth() self.vk = self.vk_session.get_api() self.user_id = self.vk.users.get()[0]['id'] self.vk_audio = audio.VkAudio(self.vk_session) self.hide() self.main1 = Main(self.vk_session, self.user_id, self.vk_audio) self.main1.show() except Exception as e: e = f'Ошибка: {e}' self.statusBar().showMessage(e)
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 = pickie.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: pickie.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 run_task(login, password, my_id, path, name_dir): path_to = path + name_dir if not os.path.exists(path_to): os.makedirs(path_to) print(f"Establishing session from {str(my_id)} -> {name_dir}") vk_session = vk_api.VkApi(login=login, password=password) vk_session.auth() vk_audio = audio.VkAudio(vk_session) print("Session established.") os.chdir(path_to) a = 0 time_start = time() print("Retrieving tracks information...") tracks_info = vk_audio.get(owner_id=my_id) time_retrieving = time() print(f"Retrieved in {time_retrieving - time_start} seconds.") print(f"About {len(tracks_info)} tracks to download in current task.") for track in tracks_info: try: fetch_start_time = time() a += 1 r = requests.get(track["url"]) if r.status_code == 200: with open(clean(track["artist"]+'_'+track["title"])+'.mp3','wb') as output_file: output_file.write(r.content) fetch_finish_time = time() total_time = fetch_finish_time - fetch_start_time print(f'[{a}/{len(tracks_info)}] FETCHED: '+track["artist"]+'_'+track["title"]+'.mp3'+f' in {total_time} sec.') except OSError: print('[ERROR] Failed to load track #' + str(a) + ' - ' + track["artist"] + '_' + track["title"]) time_finish = time() print(f"Time elapsed: {time_finish - time_start} seconds.")
def auth(self, new): try: if (os.path.exists(self.USERDATA_FILE) and new == False): with open(self.USERDATA_FILE, 'rb') as DataFile: LoadedData = pickle.load(DataFile) if (self.login == ''): self.login = LoadedData[0] if (self.password == ''): self.password = LoadedData[1] if (self.user_id == ''): self.user_id = LoadedData[2] else: if (os.path.exists(self.USERDATA_FILE) and new == True): os.remove(self.USERDATA_FILE) self.login = str(input('Enter login\n> ')) self.password = str(input('Enter password\n> ')) self.user_id = str(input('Enter profile ID\n> ')) self.saveUserData() SaveData = [self.login, self.password, self.user_id] with open(self.USERDATA_FILE, 'wb') as dataFile: pickle.dump(SaveData, dataFile) vk_session = vk_api.VkApi(login=self.login, password=self.password) try: vk_session.auth() except: vk_session = vk_api.VkApi(login=self.login, password=self.password, auth_handler=self.auth_handler) vk_session.auth() print('Authorization successfull') self.vk = vk_session.get_api() self.vk_audio = audio.VkAudio(vk_session) except KeyboardInterrupt: sys.exit(2)
def session_start(self): self.session = vk_api.VkApi(login=self.login, password=self.password, auth_handler=two_factor_auth_handler, captcha_handler=captcha_handler, config_filename='vk_config.json') clear_last_log() self.set_logfile_name() Logging("Trying to start session", self.logfile) self.session.auth() Logging("Session started", self.logfile) Logging("Getting music api", self.logfile) self.api = self.session.get_api() self.music = audio.VkAudio(self.session) Logging("Complete successfully", self.logfile) self.get_id() with open('user.json', 'w') as f: user_data = { 'login': self.login, 'password': tools.encode(self.password) } json.dump(user_data, f, indent=2, ensure_ascii=False) return (self)
def get_common_audios(login: str, password: str, *ids): #пока только для 2 акков #добавить lru_cache vk_session = vk_api.VkApi(login, password, app_id=app_id, scope=scope) vk_session.auth() #vk=vk_session.get_api() vkaudio = audio.VkAudio(vk_session) users_track_list = [] for id in ids: user_track_list = set([ track['artist'] + '-' + track['title'] for track in vkaudio.get_iter(id) ]) print("I'm not dead") users_track_list.append(user_track_list) shares = [len(i) for i in users_track_list] common_audios_lst = set() while (len(users_track_list) > 1): common_audios_lst = set() users_track_list.sort(key=lambda x: len(x)) for i in users_track_list[0]: for j in users_track_list[1]: if jaro(i, j) > 0.75: common_audios_lst.add(i) users_track_list.pop(0) print("I'm not dead") users_track_list[0] = common_audios_lst print("_______________________") print(common_audios_lst) shares = [len(common_audios_lst) / i for i in shares.copy()] returnable_text = '' for i in common_audios_lst: returnable_text += (i + '\n') returnable_text += "Процент общих песен\n" for i in shares: returnable_text += (str(round(100 * i, 2)) + r'% ') return returnable_text[:-1]
def __init__(self): super(mainApp, self).__init__() self.setupUi(self) self.downloadButton.clicked.connect(self.downloadAll) self.stopButton.clicked.connect(self.stopThis) self.listWidget.itemClicked.connect(self.checkItem) self.downloadCheckedButton.clicked.connect(self.downloadChecked) #vk init self.login = config.login # Номер телефона self.password = config.password # Пароль self.my_id = config.my_id # Ваш id vk self.vk_session = vk_api.VkApi(login=self.login, password=self.password) self.vk_session.auth() self.vk = self.vk_session.get_api() # Теперь можно обращаться к методам API как к обычным классам self.vk_audio = audio.VkAudio(self.vk_session) # Получаем доступ к audio os.remove('vk_config.v2.json') #-----вывод музыки self.thread1 = QThread() self.shower = AudioShow(self,self.my_id,self.vk_audio) self.shower.moveToThread(self.thread1) self.thread1.started.connect(self.shower.run) self.thread1.start() self.thread2 = QThread()
vk_file = "vk_config.v2.json" REQUEST_STATUS_CODE = 200 name_dir = 'music_vk' # Папка, куда буду скачены песни login = '******' # Номер телефона password = '******' # Пароль my_id = 'sarxofficial' # Ваш id path = r'C:\pybot\Songs' + name_dir # Нужно прописать путь, где будет создана папка music_vk if not os.path.exists(path): os.makedirs(path) vk_session = vk_api.VkApi(login=login, password=password) vk_session.auth() vk = vk_session.get_api() vk_audio = audio.VkAudio(vk_session) os.chdir(path) i = vk_audio.get(owner_id=my_id)[10] r = requests.get(i["url"]) if r.status_code == REQUEST_STATUS_CODE: try: with open(i["artist"] + '_' + i["title"] + '.mp3', 'wb') as output_file: output_file.write(r.content) except OSError: with open(i["artist"] + '_' + i["title"] + '.mp3', 'wb') as output_file: output_file.write(r.content) a = 0
def main(): vk_login, vk_password = auth() try: vk_session = vk_api.VkApi(login=vk_login, password=vk_password, auth_handler=two_step_auth) vk_session.auth() print('Авторизация') vk = vk_session.get_api() vk_audio = audio.VkAudio(vk_session) print('Успех') # Загрузка def download(v_id): path = folder() os.chdir(path) song = 0 time_start = datetime.datetime.now() print('Начало загрузки', datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')) print('Путь загрузки:', path) for i in vk_audio.get(owner_id=v_id): try: song += 1 r = requests.get(i['url'], stream=True) size = int(r.headers['Content-Length']) if r.status_code == 200: with open(str(song) + '_' + i['artist'] + ' - ' + i['title'] + '.mp3', 'wb') as file: print('Загрузка:', i['artist'] + ' - ' + i['title']) time.sleep(0.5) for data in tqdm(iterable=r.iter_content(chunk_size=1024), total=size / 1024, unit='KB', leave=True): file.write(data) except OSError: print('Ошибка загрузки:', song, i['artist'] + ' - ' + i['title']) time_end = datetime.datetime.now() print('Загружено', len(next(os.walk(path))[2]), 'песен за', (time_end - time_start)) question = input('Выйти или продолжить?\nq/c: ') if question == 'q': print('Завершение..') sys.exit(0) elif question == 'c': main() # Загрузка своей музыки def own_music(): v_id = vk.users.get()[0]['id'] print('Анализ музыки', vk.users.get()[0]['first_name'] + ' ' + vk.users.get()[0]['last_name']) download(v_id) # Загрузка музыки друзей def friends_music(v_id): v_id_f = vk.users.get(user_ids=v_id) print('Анализ музыки', v_id_f[0]['first_name'] + ' ' + v_id_f[0]['last_name']) download(v_id) question_1 = input('Загрузить свою музыку?\ny/n: ') if question_1 == 'y': own_music() elif question_1 == 'n': question_2 = input('1 Выбрать друга\n2 Ввести id\nСделайте выбор: ') if question_2 == '1': number_of_friends = vk.friends.get(order='name') print('Друзей:', number_of_friends['count']) dictionary_friends = {} for num in range(0, int(number_of_friends['count'])): user = vk.friends.get(fields='first_name,last_name')['items'][num] print(num, user['first_name'], user['last_name']) k = str(num) dictionary_friends[k] = user['id'] try: b = input('Введите номер друга: ') friends_music(v_id=dictionary_friends[b]) except vk_api.exceptions.AccessDenied: print('У Вас нет прав для просмотра аудио пользователя') elif question_2 == '2': try: friends_music(v_id=input('Введите id: ')) except vk_api.exceptions.AccessDenied: print('У Вас нет прав для просмотра аудио пользователя') friends_music(v_id=input('Введите id: ')) except vk_api.AuthError: print('Неверный логин или пароль') main()
# | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SETTINGS login = '******' password = '******' token = '' # токен, если хотите авторизавываться по нему owner_id = 85571327 # ID владельца альбома album_id = 3 # ID Альбома # | | | | | | | | | | | | | | | | | | | | | | BODY vkapi = get_vkapi(login, password, token) if vkapi: print('Успешная авторизация') music = audio.VkAudio(vkapi) result = music.get(owner_id, album_id) ''' result = [...] {'id': 456239771, 'owner_id': 85571327, 'url': 'https://sgi1.43222.vkuseraudio.net/p3/f926da00a15f46.mp3?extra=ixmky7XjX-tWT4WIoky5Dtsw-5YotcGWyvZjQDdpMSctdBls9qhw4Hgv9npmMzsf2EC2C3KOR_7ioHAXHie8fgxbu4flMkBEclQqY5mVhIvhiDoILeKBNc7T5p-0y5tmXoW9Ss4p5G3tRx7OJHTs57g', 'artist': 'MARUV', 'title': 'Siren Song', 'duration': 171} ''' for au in result: try: args = [del_chars(au['title']), del_chars(au['artist'])] urlretrieve(au['url'], 'music/-{} - {}.mp3'.format(*args)) print('Загружено аудио -', au['title']) except Exception as E: print('Ошибка', E)
REQUEST_STATUS_CODE = 200 name_dir = 'music_vk' path = r'./audio' + name_dir login = '' # Номер телефона password = '' # Пароль my_id = '' if not os.path.exists(path): os.makedirs(path) vk_session = vk_api.VkApi(login=login, password=password) vk_session.auth() vk = vk_session.get_api( ) # Теперь можно обращаться к методам API как к обычным # классам vk_audio = audio.VkAudio(vk_session) # Получаем доступ к audio os.chdir(path) time_start = time() for i in vk_audio.get(owner_id=my_id): try: r = requests.get(i["url"]) if r.status_code == REQUEST_STATUS_CODE: with open(i["artist"] + '_' + i["title"] + '.mp3', 'wb') as output_file: output_file.write(r.content) except OSError: print(i["artist"] + '_' + i["title"]) time_finish = time() print("Time seconds:", time_finish - time_start)
def __init__(self, login, password): vk_session = VkApi(login=login, password=password) vk_session.auth() self.client = vk_session.get_api() self.vk_audio = audio.VkAudio(vk_session)
def main(): vk_login, vk_password = auth() try: vk_session = vk_api.VkApi(login=vk_login, password=vk_password, auth_handler=two_step_auth) vk_session.auth() print('Авторизация') vk = vk_session.get_api() vk_audio = audio.VkAudio(vk_session) print('Авторизация прошла успешно') # Загрузка def download(v_id): path = folder() os.chdir(path) song = 0 time_start = datetime.datetime.now() print('Начало загрузки', datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')) print('Путь загрузки:', path) print(vk_audio.get(owner_id=v_id)) for i in vk_audio.get(owner_id=v_id): try: song += 1 r = requests.get(i['url']) size = int(r.headers['Content-Length']) if r.status_code == 200: with open(str(song) + '_' + i['artist'] + ' - ' + i['title'] + '.mp3', 'wb') as file: print('Загрузка:', i['artist'] + ' - ' + i['title']) time.sleep(0.5) for data in tqdm(iterable=r.iter_content(chunk_size=1024), total=size / 1024, unit='KB', leave=True): file.write(data) except OSError: print('Ошибка загрузки:', song, i['artist'] + ' - ' + i['title']) time_end = datetime.datetime.now() print('Загружено', len(next(os.walk(path))[2]), 'песен за', (time_end - time_start)) question = input('Выйти или продолжить?\nq/c: ') if question == 'q': print('Завершение работы скрипта') sys.exit(0) elif question == 'c': main() # Загрузка своей музыки def own_music(): v_id = vk.users.get()[0]['id'] print('Анализ музыки', vk.users.get()[0]['first_name'] + ' ' + vk.users.get()[0]['last_name']) print('Будет скачано:', len(vk_audio.get(owner_id=v_id)), 'аудиозаписей.') download(v_id) question_1 = input('Загрузить свою музыку?\ny/n: ') if question_1 == 'y': own_music() except vk_api.AuthError: print('Неверный логин или пароль') main()