示例#1
0
    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
示例#3
0
 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
示例#4
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)
示例#5
0
 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)
示例#6
0
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.")
示例#8
0
    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)
示例#9
0
 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)
示例#10
0
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]
示例#11
0
文件: main.py 项目: Rikhus/PyVkMusic
    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()
示例#12
0
文件: vkdl.py 项目: S4RX/boty
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
示例#13
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()
示例#14
0
# | | | | | | | | | | | | | | | | | | | | | | | | | | | | |  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)
示例#16
0
 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()