Last active
August 19, 2021 21:38
-
-
Save kuznetsov-m/c628fb8d860d6146ddc7d56f5116f425 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# requirements.txt | |
# vk-api==11.9.4 | |
# bs4 | |
# | |
import vk_api | |
from vk_api.audio import VkAudio | |
import requests | |
import shutil | |
from requests.packages.urllib3.exceptions import InsecureRequestWarning | |
requests.packages.urllib3.disable_warnings(InsecureRequestWarning) | |
def captcha_handler(captcha): | |
""" При возникновении капчи вызывается эта функция и ей передается объект | |
капчи. Через метод get_url можно получить ссылку на изображение. | |
Через метод try_again можно попытаться отправить запрос с кодом капчи | |
""" | |
f = open('image.png', 'wb') | |
f.write(captcha.get_image()) | |
f.close() | |
key = input("Enter captcha code {0}: ".format(captcha.get_url())).strip() | |
# Пробуем снова отправить запрос с капчей | |
return captcha.try_again(key) | |
login, password = '', '' | |
vk_session = vk_api.VkApi(login, password, captcha_handler=captcha_handler) | |
try: | |
vk_session.auth() | |
except vk_api.AuthError as error_msg: | |
print(error_msg) | |
vkaudio = VkAudio(vk_session) | |
user_id = 12345678 | |
tracks_path = 'tracks' | |
def make_safe_filename(filename): | |
keepcharacters = (' ','.','-','_','(',')',',','[',']','&','\'') | |
return "".join(c for c in filename if c.isalnum() or c in keepcharacters).rstrip()[:255] | |
for track in vkaudio.get_iter(): | |
try: | |
original_filename = f'{track.get("artist")} - {track.get("title")}.mp3' | |
filename = make_safe_filename(original_filename) | |
print(f'{"!!! " if original_filename != filename else ""}{original_filename} -> {filename}') | |
r = requests.get(track.get('url'), verify=False, stream=True) | |
r.raw.decode_content = True | |
with open(f'{tracks_path}/{filename}', 'wb') as f: | |
shutil.copyfileobj(r.raw, f) | |
except Exception as e: | |
print(f'Exception: {e}') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment