83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
import json
|
|
from urllib.parse import quote
|
|
|
|
import requests
|
|
from common.log import logUtils as log
|
|
from common import generalUtils
|
|
from objects import glob
|
|
from constants import exceptions
|
|
|
|
|
|
def osuApiRequest(request, params, getFirst=True):
|
|
"""
|
|
Send a request to osu!api.
|
|
|
|
request -- request type, string (es: get_beatmaps)
|
|
params -- GET parameters, without api key or trailing ?/& (es: h=a5b99395a42bd55bc5eb1d2411cbdf8b&limit=10)
|
|
return -- dictionary with json response if success, None if failed or empty response.
|
|
"""
|
|
# Make sure osuapi is enabled
|
|
if not generalUtils.stringToBool(glob.conf.config["osuapi"]["enable"]):
|
|
log.warning("osu!api is disabled")
|
|
return None
|
|
|
|
# Api request
|
|
resp = None
|
|
try:
|
|
finalURL = "{}/api/{}?k={}&{}".format(glob.conf.config["osuapi"]["apiurl"], request, glob.conf.config["osuapi"]["apikey"], params)
|
|
log.debug(finalURL)
|
|
resp = requests.get(finalURL, timeout=5).text
|
|
data = json.loads(resp)
|
|
if getFirst:
|
|
if len(data) >= 1:
|
|
resp = data[0]
|
|
else:
|
|
resp = None
|
|
else:
|
|
resp = data
|
|
finally:
|
|
glob.dog.increment(glob.DATADOG_PREFIX+".osu_api.requests")
|
|
log.debug(str(resp).encode("utf-8"))
|
|
return resp
|
|
|
|
def getOsuFileFromName(fileName):
|
|
"""
|
|
Send a request to osu! servers to download a .osu file from file name
|
|
Used to update beatmaps
|
|
|
|
fileName -- .osu file name to download
|
|
return -- .osu file content if success, None if failed
|
|
"""
|
|
# Make sure osuapi is enabled
|
|
if not generalUtils.stringToBool(glob.conf.config["osuapi"]["enable"]):
|
|
log.warning("osuapi is disabled")
|
|
return None
|
|
response = None
|
|
try:
|
|
URL = "{}/web/maps/{}".format(glob.conf.config["osuapi"]["apiurl"], quote(fileName))
|
|
req = requests.get(URL, timeout=20)
|
|
req.encoding = "utf-8"
|
|
response = req.content
|
|
finally:
|
|
glob.dog.increment(glob.DATADOG_PREFIX+".osu_api.osu_file_requests")
|
|
return response
|
|
|
|
def getOsuFileFromID(beatmapID):
|
|
"""
|
|
Send a request to osu! servers to download a .osu file from beatmap ID
|
|
Used to get .osu files for oppai
|
|
|
|
beatmapID -- ID of beatmap (not beatmapset) to download
|
|
return -- .osu file content if success, None if failed
|
|
"""
|
|
# Make sure osuapi is enabled
|
|
if not generalUtils.stringToBool(glob.conf.config["osuapi"]["enable"]):
|
|
log.warning("osuapi is disabled")
|
|
return None
|
|
response = None
|
|
try:
|
|
URL = "{}/osu/{}".format(glob.conf.config["osuapi"]["apiurl"], beatmapID)
|
|
response = requests.get(URL, timeout=20).content
|
|
finally:
|
|
glob.dog.increment(glob.DATADOG_PREFIX+".osu_api.osu_file_requests")
|
|
return response |