This repository has been archived on 2022-02-23. You can view files and clone it, but cannot push or open issues or pull requests.
lets/helpers/osuapiHelper.py

83 lines
2.5 KiB
Python
Raw Normal View History

2018-12-09 05:15:56 +00:00
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