-
Notifications
You must be signed in to change notification settings - Fork 1
/
audio-fetcher.py
51 lines (42 loc) · 1.6 KB
/
audio-fetcher.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/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