-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
108 lines (92 loc) · 3.09 KB
/
main.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import requests
import shutil
import os
from tkinter import *
import json
import urllib.request
def setup():
# Create dl directory
direct = os.path.isdir("dl")
if not direct:
os.mkdir("dl")
root = Tk()
root.geometry("500x200")
gui = GUI(root)
root.mainloop()
def getMapperID(mapper: str):
# Create url to check mapper id
url = "https://beatsaver.com/api/search/advanced?q=uploader.username:" + mapper.lower()
response = urllib.request.urlopen(url)
data = json.loads(response.read())
# Parse through json to find proper data
mapperID = data["docs"][0]["uploader"]["_id"]
lastPage = data["lastPage"]
print(mapper.upper(), "ID:")
print(data["docs"][0]["uploader"]["_id"])
print(lastPage + 1, "Total pages")
return mapperID, lastPage
def DLPage(mapperID: str, page: int, totalPages: int):
url = "https://beatsaver.com/api/maps/uploader/"
url += mapperID + "/" + str(page)
response = urllib.request.urlopen(url)
data = json.loads(response.read())
if page < totalPages:
i = 0
while True:
try:
name = data["docs"][i]["name"]
key = "https://beatsaver.com" + data["docs"][i]["downloadURL"]
r = requests.get(key, stream=True)
print("Downloading", name)
if r.status_code == 200:
name = fixName(name)
directory = os.getcwd() # Get working directory
directory = directory + r"/dl//"
path = directory + name + ".zip"
print("Saving to ", path)
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
i += 1
except IndexError:
print("END OF PAGE")
DLPage(mapperID, page + 1, totalPages)
else:
print("Download Complete")
sys.exit()
# fixName() accepts a string and removes certain characters that cause problems
# in Windows file names
def fixName(name: str):
name = name.replace(r"\\", "")
name = name.replace("/", "")
name = name.replace("*", "")
name = name.replace(":", "")
name = name.replace("?", "")
name = name.replace(">", "")
name = name.replace("<", "")
name = name.replace('"', "")
name = name.replace('|', "")
return name
class GUI:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.label = Label(frame, text="Input Mapper Name")
self.label.pack()
self.button = Button(frame, text="DOWNLOAD!", fg="red", command=self.beginDL)
self.button.pack()
self.input = Entry(frame)
self.input.pack()
def beginDL(self):
mapper = self.input.get()
data = getMapperID(mapper.lower())
mapperID = data[0]
lastPage = data[1]
DLPage(mapperID, 0, lastPage)
def begin(self):
root = Tk()
root.geometry("500x200")
gui = GUI(root)
root.mainloop()
if __name__ == "__main__":
setup()