---
title: ユーザーが所有するアイテムに関する情報を取得する
slug: world-sdk-guide-ja/hTlbPVmCo-MtZDb2qYcA_
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

現在接続されているユーザーのアイテム情報をカテゴリ別に取得するには、ZEPETO.Module.Shop APIを使用できます。



## インストール

ウィンドウ → パッケージマネージャ → まずZEPETO.Worldパッケージのバージョン1.21.14以上をインストールしてください。

次に、ZEPETO.Moduleパッケージのバージョン1.0.7以上をインストールしてください。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-v7KT8nxqW58e5lNwVb3mB-20240904-102409.png)



## ZEPETO.Module.Shop API

ZEPETO.Module.Shop APIに興味がある場合は、ドキュメントを参照してください：

:::hint{type="info"}
**📘&#x20;**&#x4EE5;下のガイドを参照してください。 \[[ZEPETO.Module.Shop API](https://developer.zepeto.me/docs/module/namespaces/ZEPETO_Module_Shop)]
:::



## アイテム情報出力の例

- プロジェクト > 作成 > ZEPETO > TypeScriptが作成され、名前がMyItemListに変更されました。
- 以下のようにサンプルスクリプトを書いてください。

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import { ShopService, Category, ItemKeyword } from 'ZEPETO.Module.Shop'
import { ZepetoPropertyFlag } from 'Zepeto'
import { Texture2D, WaitUntil } from 'UnityEngine'
import { RawImage } from 'UnityEngine.UI'
import { Item } from 'ZEPETO.Module.Content'

export default class MyItemList extends ZepetoScriptBehaviour {

    public thumbnailImage: RawImage;

    Start() {
        this.StartCoroutine(this.CoGetMyCategory());
    }

    *CoGetMyCategory() {
        var requestCategory = ShopService.GetMyCategoryAsync();
        yield new WaitUntil(() => requestCategory.keepWaiting == false);

        if (requestCategory.responseData.isSuccess) {
            let categoryInfo = requestCategory.responseData.category;
            console.log(`[Category Info] ${categoryInfo.displayName} - length : ${categoryInfo.categories.Length}`);

            let categories: Category[] = categoryInfo.categories;

            for (const category of categories) {
                console.log(`[Category displayName] ${category.displayName} `);
                //Category KeywordはShopService.GetMyContentItemListAsync関数の引数として使用されます
                console.log(`[Category keyword] ${category.keyword} `);
            }
        }
        this.StartCoroutine(this.CoGetMyItem());
    }

    *CoGetMyItem() {
        var requestItemList = ShopService.GetMyContentItemListAsync(ItemKeyword.all, null);

        yield new WaitUntil(() => requestItemList.keepWaiting == false);

        if (requestItemList.responseData.isSuccess) {
            let items: Item[] = requestItemList.responseData.items;

            // GetMyContentItemListAsync()の結果として受け取ったアイテムの数。
            console.log(items.length);

            for (let i = 0; i < items.length; ++i) {
                const property: ZepetoPropertyFlag = items[i].property;
                // アイテムIDとアイテムプロパティ
                console.log(`[Content Item] (id): ${items[i].id} | (property): ${property}`);

                // アイテムのサムネイルをrawImageのテクスチャとして設定
                var textureReq = items[i].GetThumbnailAsync();
                yield new WaitUntil(() => textureReq.keepWaiting == false);
                let thumbnailTexture: Texture2D = textureReq.responseData.texture;
                this.thumbnailImage.texture = thumbnailTexture;

            }
        }
    }
}
```



::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-RfZmcV0XeKExGRvL2a1zw-20240904-102409.png" size="72" width="512" height="878" position="center" showCaption="false"}



- スクリプトの説明
  - マイアイテムタブの情報を取得する
    - ShopService.GetMyCategoryAsync()を呼び出して、マイアイテムタブのアイテムカテゴリを知ることができます。
    - 成功裏に応答を受け取った場合、responseDataプロパティを通じてCategoryResponseオブジェクトにアクセスできます。
    - CategoryResponse.category.categoriesを参照し、マイアイテムタブのアイテムカテゴリリストを出力します。
  - アイテムリストを取得する
    - ShopService.GetMyContentItemListAsync(ItemKeyword.all, null)を呼び出して、すべてのカテゴリのアイテムリストを取得します。
      - 特定のカテゴリからのみアイテムを取得することもできます。たとえば、ItemKeyword.allの代わりにItemKeyword.hairを使用して、髪のアイテムのみを取得できます。
      - 2番目のパラメータは、次のページトークンを知っている場合にのみ使用されます。APIを初めて呼び出すときは、nullに設定します。
        - nextPageTokenに関連する例については、以下の情報を確認してください。
      - 成功裏に応答を受け取った場合、responseDataプロパティを通じてContentItemListResponseオブジェクトにアクセスできます。
      - ItemResponse.itemsを参照し、各アイテムのIDと部分Enumコードを出力します。
      - また、アイテムのサムネイルは指定されたrawImageとして設定されます。
- スクリプトの記述が完了したら、シーン内のオブジェクトにスクリプトを追加します。
- 再生ボタンを押すと、マイアイテムタブのカテゴリリストとすべてのカテゴリのアイテム情報が表示されます。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-BVyAKmdqIv8k4UHxTlugk-20240904-102409.png)

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-783f_FvjSzOYlnW88La_s-20240904-102409.png)

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-qXLKSgt4DZu0f5pzTTrdF-20240904-102409.png)

:::hint{type="success"}
- アイテムのサムネイルプレハブを作成し、アイテムリストに基づいてサムネイルを動的に作成する場合、UIにアイテムリストのサムネイルを表示できます。
:::



## ユーザーの特定のアイテムの所有状況を確認する例

GetMyContentItemListAsync()を利用して、ワールド内の誰かが特定の服を着ているかどうかを確認できます。

以下は、特定のアイテムを所有しているユーザーのUIにメッセージを表示する簡単な例です。

- プロジェクト > 作成 > ZEPETO > TypeScriptが作成され、名前がCheckItemに変更されます。
- 以下のようにサンプルスクリプトを書きます。

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import { ShopService, ItemKeyword } from 'ZEPETO.Module.Shop'
import { ZepetoPropertyFlag } from 'Zepeto'
import { WaitUntil } from 'UnityEngine'
import { Text } from 'UnityEngine.UI'
import { Item } from 'ZEPETO.Module.Content'

export default class CheckItem extends ZepetoScriptBehaviour {

    public resultText: Text;
    public checkItemID: string;

    Start() {
        this.resultText.gameObject.SetActive(false);
        this.StartCoroutine(this.CoCheckItem());
    }

    *CoCheckItem() {
        let nextPageToken: string | null = null;
        do {
            // ユーザーのコンテンツアイテムのリストをリクエストします。
            const requestItemList = ShopService.GetMyContentItemListAsync(ItemKeyword.all, nextPageToken);
            yield new WaitUntil(() => requestItemList.keepWaiting == false);

            if (requestItemList.responseData.isSuccess) {
                // レスポンスからコンテンツアイテムを取得します。
                const contentItems: Item[] = requestItemList.responseData.items;
                nextPageToken = requestItemList.responseData.nextPageToken;

                // コンテンツアイテムを反復処理します。
                for (let i = 0; i < contentItems.length; ++i) {
                    const property: ZepetoPropertyFlag = contentItems[i].property;
                    // アイテムIDが指定されたIDと一致するか確認します。
                    if (contentItems[i].id == this.checkItemID) {
                        // 一致したアイテムメッセージをアクティブにします。
                        this.ActivateMatchedItem();
                        break;
                    }
                }
            }
            else {
                break;
            }
        } while (nextPageToken != null);
    }

    ActivateMatchedItem() {
        // 一致したアイテムメッセージを表示します。
        this.resultText.gameObject.SetActive(true);
        this.resultText.text = "わあ、私が作ったアイテムを持っている！";
    }
}
```



- スクリプトの説明
  - これは、Worldにログインしているユーザーの「マイアイテム」リスト（すべてのカテゴリ）をブラウズし、インスペクターに入力された一致するアイテムIDを見つけるスクリプトです。
  - アイテムが多い場合、nextPageTokenの値はnullではありません。したがって、値がnullになるまでdo-while文で処理が繰り返されます。
    - nextPageTokenがShopService.GetMyContentItemListAsync(ItemKeyword.all, nextPageToken)の第二引数として提供されたことに注意してください。
  - 成功したレスポンスを受け取ったら、responseDataプロパティを通じてContentItemListResponseオブジェクトにアクセスできます。
  - ItemResponse.itemsをブラウズして、入力されたアイテムIDに一致するものを見つけます。
  - 一致するアイテムが見つかった場合、ActivateMatchedItem()が呼び出され、ユーザーの画面にテキストが表示され、ループが終了します。
- スクリプトの記述が終わったら、シーン内のオブジェクトにスクリプトを追加します。
- インスペクターで、World内のユーザーが持っているか確認したいアイテムのIDを入力します。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-15Rw96mLw6kFptBX-hOzt-20240904-102409.png)



- プロセスを実行するには再生ボタンを押してください。ユーザーがログインしているワールドに、入力されたアイテムIDに一致するアイテムがある場合、画面にテキストが表示されます。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-Br0-LUpLTjrs6u07hLMte-20240904-102409.png)



この例を適用して、さまざまな興味深いコンテンツを作成できます。
