---
title: ค้นหาข้อมูลเกี่ยวกับสิ่งของที่ผู้ใช้เป็นเจ้าของ
slug: world-sdk-guide-th/qMu745877k_mdce3-XdYJ
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

คุณสามารถใช้ ZEPETO.Module.Shop API เพื่อดึงข้อมูลรายการของผู้ใช้ที่เชื่อมต่ออยู่ในปัจจุบันตามหมวดหมู่ได้



## ติดตั้ง

Window → Package Manager → กรุณาติดตั้ง ZEPETO.World Package เวอร์ชัน 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;**&#xE42;ปรดดูคู่มือต่อไปนี้. \[[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 is used as an argument in the ShopService.GetMyContentItemListAsync function
                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;
                // รหัสรายการและคุณสมบัติของรายการ
                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() เพื่อทราบหมวดหมู่รายการในแท็บรายการของฉัน
    - เมื่อคุณได้รับการตอบกลับสำเร็จ คุณสามารถเข้าถึงอ็อบเจ็กต์ CategoryResponse ผ่านคุณสมบัติ responseData ได้
    - CategoryResponse.category.categories ถูกเรียกดูและรายการหมวดหมู่รายการในแท็บรายการของฉันถูกส่งออก
  - ดึงรายการสินค้า
    - เรียกใช้ ShopService.GetMyContentItemListAsync(ItemKeyword.all, null) เพื่อดึงรายการสินค้าสำหรับทุกหมวดหมู่
      - คุณสามารถเลือกที่จะดึงรายการจากหมวดหมู่เฉพาะได้ ตัวอย่างเช่น คุณสามารถใช้ ItemKeyword.hair แทน ItemKeyword.all เพื่อดึงเฉพาะรายการเกี่ยวกับผม
      - พารามิเตอร์ที่สองจะถูกใช้เฉพาะเมื่อคุณทราบโทเค็นหน้าถัดไปที่จะขอ ตั้งค่าเป็น null ในครั้งแรกที่คุณเรียก API
        - สำหรับตัวอย่างที่เกี่ยวข้องกับ nextPageToken โปรดตรวจสอบข้อมูลด้านล่าง
      - เมื่อคุณได้รับการตอบกลับที่สำเร็จ คุณสามารถเข้าถึงอ็อบเจ็กต์ ContentItemListResponse ผ่านคุณสมบัติ responseData ได้
      - 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 {
            // Request the list of the user's content items.
            const requestItemList = ShopService.GetMyContentItemListAsync(ItemKeyword.all, nextPageToken);
            yield new WaitUntil(() => requestItemList.keepWaiting == false);

            if (requestItemList.responseData.isSuccess) {
                // Get the content items from the response.
                const contentItems: Item[] = requestItemList.responseData.items;
                nextPageToken = requestItemList.responseData.nextPageToken;

                // Iterate through the content items.
                for (let i = 0; i < contentItems.length; ++i) {
                    const property: ZepetoPropertyFlag = contentItems[i].property;
                    // Check if the item ID matches the specified ID.
                    if (contentItems[i].id == this.checkItemID) {
                        // Activate the matched item message.
                        this.ActivateMatchedItem();
                        break;
                    }
                }
            }
            else {
                break;
            }
        } while (nextPageToken != null);
    }

    ActivateMatchedItem() {
        // Show the matched item message.
        this.resultText.gameObject.SetActive(true);
        this.resultText.text = "ว้าว คุณมีไอเทมที่ฉันทำ!";
    }
}
```



- คำอธิบายสคริปต์
  - นี่คือสคริปต์ที่เรียกดูรายการ 'รายการของฉัน' (ทุกหมวดหมู่) ของผู้ใช้ที่เข้าสู่ระบบในโลกและค้นหา ID รายการที่ตรงกันที่ป้อนใน Inspector.
  - หากมีหลายรายการ ค่า nextPageToken จะไม่เป็น null ดังนั้นกระบวนการจะทำซ้ำด้วยคำสั่ง do-while จนกว่าค่าจะเป็น null.
    - สังเกตว่า nextPageToken ถูกจัดเตรียมเป็นพารามิเตอร์ที่สองของ ShopService.GetMyContentItemListAsync(ItemKeyword.all, nextPageToken).
  - เมื่อคุณได้รับการตอบสนองที่สำเร็จ คุณสามารถเข้าถึงวัตถุ ContentItemListResponse ผ่านคุณสมบัติ responseData.
  - ItemResponse.items ถูกเรียกดูเพื่อค้นหาความตรงกันสำหรับ ID รายการที่ป้อน.
  - หากพบรายการที่ตรงกัน จะมีการเรียกใช้ ActivateMatchedItem() เพื่อแสดงข้อความบนหน้าจอของผู้ใช้และสิ้นสุดลูป.
- หลังจากที่คุณเขียนสคริปต์เสร็จแล้ว ให้เพิ่มสคริปต์ไปยังวัตถุในฉาก.
- ป้อน ID ของรายการที่คุณต้องการตรวจสอบว่าผู้ใช้ในโลกมีใน Inspector หรือไม่.

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



- กดปุ่มเล่นเพื่อเริ่มกระบวนการ ข้อความจะปรากฏบนหน้าจอหากผู้ใช้ที่เข้าสู่ระบบในโลกมีรายการที่ตรงกับรหัสรายการที่ป้อนเข้าไป

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



คุณสามารถใช้ตัวอย่างนี้เพื่อสร้างเนื้อหาที่น่าสนใจทุกประเภท
