// GetLatestModel returns the asset id of the latest model for a given user. // While this is useful for retrieving the asset id of a newly created model // that was just uploaded, it is not necessarily reliable for this purpose. func GetLatestModel(client *rbxweb.Client, userId int32) (assetId int64, err error) { if userId == 0 { return 0, errors.New("invalid user id") } query := url.Values{ "Category": {"Models"}, "SortType": {"RecentlyUpdated"}, "IncludeNotForSale": {"true"}, "ResultsPerPage": {"1"}, "CreatorID": {client.I32toa(userId)}, } resp, err := client.Get(client.GetURL(`api`, `/catalog/json`, query)) if err = client.AssertResp(resp, err); err != nil { return 0, err } defer resp.Body.Close() dec := json.NewDecoder(resp.Body) var asset []struct { AssetId int64 } if err = dec.Decode(&asset); err != nil { return 0, errors.New("JSON decode failed: " + err.Error()) } return asset[0].AssetId, nil }
// Search is used to perform a search query for Roblox assets. func Search(client *rbxweb.Client, query Query) (result []Result, err error) { values := convertQuery(query) resp, err := client.Get(client.GetURL(`www`, `/catalog/json`, values)) if err = client.AssertResp(resp, err); err != nil { return nil, err } defer resp.Body.Close() dec := json.NewDecoder(resp.Body) dec.Decode(&result) return }
// GetInfo returns information about an asset, given an asset id. func GetInfo(client *rbxweb.Client, id int64) (info Info, err error) { query := url.Values{ "assetId": {client.I64toa(id)}, } resp, err := client.Get(client.GetURL(`api`, `/marketplace/productinfo`, query)) if err = client.AssertResp(resp, err); err != nil { return Info{}, err } defer resp.Body.Close() dec := json.NewDecoder(resp.Body) dec.Decode(&info) return }