52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import json
|
|
import sys
|
|
import time
|
|
|
|
import vk_api
|
|
|
|
|
|
def captcha_handler(captcha):
|
|
key = input("Enter Captcha {0}: ".format(captcha.get_url())).strip()
|
|
return captcha.try_again(key)
|
|
|
|
# getting pazans
|
|
pazanIds = None
|
|
pazansFileName = sys.argv[1]
|
|
with open(pazansFileName, "r") as pazans_file:
|
|
jsonData = json.loads(pazans_file.read())
|
|
pazanIds = [item[0] for item in sorted(jsonData.items(), key=lambda item: len(item[1]), reverse=True)]
|
|
|
|
vk = vk_api.VkApi(token=sys.argv[3], app_id=sys.argv[4], captcha_handler=captcha_handler)
|
|
|
|
for index, pazanId in enumerate(pazanIds, start=(int(sys.argv[5]) if len(sys.argv) > 5 else 0)):
|
|
done = False
|
|
while not done:
|
|
try:
|
|
pazanSongs = []
|
|
|
|
print(index, pazanId)
|
|
|
|
jsonData = vk.method("execute.getMusic", {"id": pazanId})
|
|
for audio in jsonData["items"]:
|
|
pazanSong = {
|
|
"artist" : audio["artist"],
|
|
"title" : audio["title"],
|
|
"genre_id": audio.get("genre_id", None),
|
|
"url" : audio["url"],
|
|
}
|
|
pazanSongs.append(pazanSong)
|
|
with open(sys.argv[2], "a", encoding="utf-8") as f_out:
|
|
f_out.write(json.dumps({pazanId: pazanSongs}, ensure_ascii=False) + "\n")
|
|
done = True
|
|
except vk_api.ApiError as e:
|
|
if e.code == 9:
|
|
print("waiting")
|
|
time.sleep(60)
|
|
elif e.code == 201 or e.code == 15:
|
|
done = True
|
|
else:
|
|
raise e
|