How do games like Obscure Game Finder work?

Hello everyone,

I’ve been intrigued with games like Place Roulette and Obscure Game Finder for a while. I don’t know much about web APIs or HTTP requests, but I’m interested in learning how something like this could be made.

I’d really appreciate any explanations or tips that could help guide me into making my own version of this!

4 Likes

I have a discovery game of my own, Game Discovery Hub

I use the following http requests:

-- // URL Examples // --

-- GetExperienceDetail  	-- https://games.roblox.com/v1/games?universeIds=[UniverseId1,UniverseId2,...]
-- GetExperiencesRating		-- https://games.roblox.com/v1/games/votes?universeIds=[UniverseId1,UniverseId2,...]
-- PlaceId -> UniverseId 	-- https://apis.roblox.com/universes/v1/places/[PlaceId]/universe

-- GetPlaceIdDetails 		-- https://games.roblox.com/v1/games/multiget-place-details?placeIds=[PlaceId1,PlaceId2,...]

-- GetExperienceGamepasses  -- https://games.roblox.com/v1/games/[UniverseId]/game-passes?limit=100&sortOrder=1&cursor=[NextPageCursor]
-- GetExperienceBadges 		-- https://badges.roblox.com/v1/universes/[UniverseId]/badges?limit=100&sortOrder=1&cursor=[NextPageCursor]

I mainly use the Games api, but here is a list of all the apis List of web APIs | Roblox Wiki | Fandom
(Note that the apis are separated into versions (ie v1, v2, …), and it’s easy to miss the little drop down to select different versions)

Notably, in the v2 games api, there are these urls:


This is probably what Obscure game finder uses. Getting the friends of a user can be done with Players:GetFriendsAsync(UserId)

You can try these out directly in swagger ui, or enter the url into your browser

What these urls return is json (instead of the usual html, css and javascript). Modern Web Browsers have built in functionality to visualize this json data, ence why it can display it

Scripting-wise, it can look like this. This is a simple example I use for my game. This code was written to work with lune, a luau runtime, which enables the use of luau for scripting applications on your pc.
I built a proxy that runs on my pc, which roblox servers call. (Since roblox servers aren’t allowed to access the roblox api directly, you need to reroute the requests to a middleman, aka a proxy. However, some apis can now be called directly from within a roblox server)

local net = require("@lune/net") -- Lune's version of HttpService I guess

function API.GetExperienceMedia(UniverseId)
	local Url = "https://games.roblox.com/v2/games/"..UniverseId.."/media"
	local Result, Error = net.request(Url)

	if not Result then error(Error) end
	local Media = net.jsonDecode(Result.body)

	if Media.errors then error(Media.errors[1].message.." URL: "..Url) end
   if not Result.ok then error(Result.statusCode.." "..Result.statusMessage) end -- Fallback error handling

	return Media.data
end

I would recommend loading the url into your browser to see its structure


Hope this helps. I did not go into the technicalities of handling all the game data to, in my case, organize them into sorts, or for place roulette’s way of finding random games (I think it just generates a random number as a UniverseId, and looks it up?). If you are interested in the technical aspect, I’d be glad to provide more information

4 Likes