インベントリ API は、Roblox の マイインベントリーページ と同じ情報のほとんどにアクセスでき、ユーザーが個々のアイテムを所有しているかどうかをチェックし、プレイヤーが所有するアイテムの全リストを取得できます。
インベントリ API からの返答には、次のカテゴリからのアイテムが含まれます:
- 衣服 (アクセサリ、ボトム、クラシック衣装、靴、トップ)
- 購入と報酬 (バッジ、パス、購入された場所、プライベートサーバー)
- アバターアイテム (アバターアニメーション、クラシックな頭、エモート、顔、髪、頭)
インベントリAPI を使用する前に、アプリに対してAPIキーを生成するか、OAuth 2 を構成する必要があります。このページの例では、APIキーを使用しています。
アイテムの所有権をチェック
ユーザーが特定のアイテムを所有しているかどうかをチェックしたい (たとえば、制限付き、バッジ、パス、またはプライベートサーバー) 場合は、filter パラメータを使用して、コンマで区切られたリストの 1つまたは複数のIDをチェックします。このコードサンプルは、3つのアセットIDをチェックします:
const https = require('node:https');
const userId = 11111111111;
const hostname = 'apis.roblox.com';
const path = `/cloud/v2/users/${userId}/inventory-items`;
const params = '?filter=assetIds=62724852,1028595,4773588762';
const url = 'https://' + hostname + path + params;
const apiKey = '123456789012345678901234567890123456789012345678';
const options = {
headers: {
'x-api-key': `${apiKey}`,
},
};
https
.get(url, options, (response) => {
console.log('statusCode:', response.statusCode);
let data = '';
response.on('data', (d) => {
data += d;
});
response.on('end', () => {
if (response.statusCode === 200) {
const jsonData = JSON.parse(data);
console.log('Response Data:', JSON.stringify(jsonData, null, 2));
} else {
console.error('Error:', response.statusCode, response.statusMessage);
}
});
})
.on('error', (e) => {
console.error(e);
});
次の応答は、ユーザーが 3つのアイテムの1つを所有していることを示します:
{
"inventoryItems": [
{
"path": "users/11111111111/inventory-items/VVNFUl9BU1NFVF9JRD0yMDAxMDUxMTkzODg",
"assetDetails": {
"assetId": "1028595",
"inventoryItemAssetType": "CLASSIC_TSHIRT",
"instanceId": "200105119388"
}
}
],
"nextPageToken": ""
}
アイテムをフィルタする
たとえば、ユーザーが所有するコレクションのみを表示したい場合は、上記と同じコードを使用し、異なる filter パラメータを使用します。
const params = '?filter=onlyCollectibles=true;inventoryItemAssetTypes=*';
セミコロンで区切られたリストを使用して、フィルターをミックスしてマッチさせます。以下はいくつかの例です:
filter=onlyCollectibles=true;inventoryItemAssetTypes=HAT,CLASSIC_PANTSfilter=badgeIds=111111,222222;gamePassIds=777777;privateServerIds=999999filter=gamePasses=true;badges=true
API へのほとんどの呼び出しには特定の権限は必要ありませんが、複数のフィルターが在庫読み取り権限を必要とします。詳しくは、フィルタリングを参照してください。
ページネート結果
応答に nextPageToken の値が含まれている場合、次のリクエストの pageToken パラメータにその値を使用して、次のページを取得します。詳しくは、ページネーション を参照してください。
結果の数が maxPageSize (例えば、50の結果と25のmaxPageSizeがある場合)に割り算できる場合、応答に nextPageToken の値が含まれる状況に遭遇する可能性がありますが、そのトークンを使用したリクエストは結果を返しません:
GET /cloud/v2/users/{userId}/inventory-items?maxPageSize=25&pageToken=cccDDD
{
"inventoryItems": [],
"nextPageToken": ""
}
アプリでページネーションを実装するとき、ベストプラクティスは、非空の nextPageToken だけでなく、非空の inventoryItems 配列もチェックすることです。