"beatmap-v2", "id" => $beatmap, ); } if (!empty($_GET["u"])) { if (!empty($_GET["u"])) { $user = $_GET["u"]; } $url = $base_url_v2 . "/users/{$user}/osu"; $cache_as = array( "type" => "user", "id" => $user, ); } $legacy_mode = false; // y = [y] u do dis if (!empty($_GET["y"])) { $beatmap = $_GET["y"]; $cross_mode = true; $legacy_mode = true; $url = $base_url_v1 . "/get_beatmaps?k={$api_key}&b={$beatmap}"; $cache_as = array( "type" => "beatmap", "id" => $beatmap, ); } $filter_diffs = false; // f = difficulty id only [f]ilter if (!empty($_GET["s"]) || !empty($_GET["f"])) { if (!empty($_GET["f"])) { $beatmapset = $_GET["f"]; $filter_diffs = true; } else { $beatmapset = $_GET["s"]; } $url = $base_url_v1 . "/get_beatmaps?k={$api_key}&s={$beatmapset}"; $cache_as = array( "type" => "beatmapset", "id" => $beatmapset, ); } // m = [m]ultiplayer match if (!empty($_GET["m"])) { $lobby = $_GET["m"]; $url = $base_url_v1 . "/get_match?k={$api_key}&mp={$lobby}"; } if (strtolower($id) == "~unalike") { $token = "not-v2-so-no-key-needed-sry-peppy-for-including-this-field"; $online = true; } else { $token_file = getcwd() . "/../tokens/{$id}.json"; if (file_exists($token_file)) { $token_json = json_decode(file_get_contents($token_file), true); if (!empty($token_json["access_token"])) { $token = $token_json["access_token"]; $online = true; } } } // t = [t]est api access if (!empty($_GET["t"])) { if (!empty($token_json["expires_at"]) && $token_json["expires_at"] > (time()+3600)) { echo "YES"; } else if (!empty($token_json["expires_at"]) && $token_json["expires_at"] > time()) { echo "YES+EXPIRING"; } else { echo "NO"; } exit(0); } if (!empty($cache_as["type"]) && !empty($cache_as["id"])) { $cache_type = $cache_as["type"]; $cache_id = $cache_as["id"]; $cache_location = "./cache/{$cache_type}/{$cache_id}.json"; } if (!empty($cache_location) && file_exists($cache_location)) { $data = file_get_contents($cache_location); } else if ($online && isset($url) && !empty($token)) { // echo '
';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer {$token}", "Content-type: application/json" ]);
$data = curl_exec($ch);
curl_close($ch);
if (!empty($cache_location) && ($data != "{\"authentication\":\"basic\"}"))
{
if (!file_exists(dirname($cache_location)))
{
mkdir(dirname($cache_location), 0777, true);
}
file_put_contents($cache_location, $data);
}
}
if (!empty($data))
{
if ($diffs_redirect || $cross_mode)
{
$json = json_decode($data, true);
if ($legacy_mode)
{
if (!empty($json[0]["beatmapset_id"]))
{
$json["beatmapset"] = array("id" => $json[0]["beatmapset_id"]);
}
}
if (!empty($json["beatmapset"]["id"]))
{
$beatmapset = $json["beatmapset"]["id"];
if ($cross_mode)
{
echo $beatmapset;
exit(0);
}
else if ($diffs_redirect)
{
header("Location: " . "../f/" . strval($beatmapset));
}
}
}
header("Content-type: application/json");
if ($filter_diffs)
{
$output = array(
"id" => $beatmapset,
"artist" => "",
"title" => "",
"creator" => "",
"beatmaps" => [],
);
$modes = array(
"0" => "osu",
"1" => "taiko",
"2" => "fruits",
"3" => "mania",
);
$temp_beatmaps = array();
$json = json_decode($data, true);
foreach ($json as $map)
{
if (!empty($map["beatmap_id"]) &&
!empty($map["approved"]) &&
!empty($map["difficultyrating"]) &&
!empty($map["artist"]) &&
!empty($map["title"]) &&
!empty($map["version"]) &&
!empty($map["max_combo"]))
{
$output["artist"] = $map["artist"];
$output["title"] = $map["title"];
$output["creator"] = $map["creator"];
$map_output = array(
"id" => intval($map["beatmap_id"]),
"ranked" => intval($map["approved"]),
"difficulty_rating" => floatval($map["difficultyrating"]),
"version" => $map["version"],
"artist" => $map["artist"],
"title" => $map["title"],
"creator" => $map["creator"],
"max_combo" => $map["max_combo"],
);
if (in_array($map["mode"], array_keys($modes))) // v2 compliance
{
$map_output["mode"] = $modes[$map["mode"]];
}
$temp_beatmaps[] = $map_output;
}
}
usort($temp_beatmaps, function($a, $b) {
return $a["difficulty_rating"] > $b["difficulty_rating"] ? 1 : ($a["difficulty_rating"] < $b["difficulty_rating"] ? -1 : 0);
});
$output["beatmaps"] = $temp_beatmaps;
echo json_encode($output);
}
else
{
echo $data;
}
}
else
{
echo json_encode([]);
}
}
else
{
echo "No authentication method was defined.";
}