คลาวด์ API เปิดเครื่องทำให้คุณสามารถจัดการวัตถุ Instance ในประสบการณ์ Roblox ของคุณจากเว็บได้
ข้อจำกัดเบต้า
API เหล่านี้อยู่ในช่วงเบต้าและมีข้อจำกัดดังต่อไปนี้:
คุณสามารถอ่านและอัปเดตวัตถุ Script , LocalScript และ ModuleScript ได้เท่านั้น
คุณไม่สามารถอัปเดตสคริปต์ที่เปิดอยู่ใน Roblox Studio ได้
คุณไม่สามารถอัปเดตสคริปต์ที่เป็นส่วนหนึ่งของแพคเกจ ได้
คุณสามารถใช้การตรวจสอบรหัส API เท่านั้น สร้าง รหัส API ด้วย instances สถานที่จักรวาล ที่เพิ่มเป็นระบบ API
คุณต้องระบุประสบการณ์ที่คุณต้องการให้กุญแจมีสิทธิ์เข้าถึงรวมถึงขอบเขตการอ่านและเขียนที่ต้องการ
คุณต้องมีเซสชัน ร่วมกัน เปิดใช้งานสำหรับประสบการณ์ที่คุณต้องการเข้าถึง
ร่างคำขอ เช่น เพื่อ อัปเดตตัวอย่าง จะถูกจำกัดเป็น 200 KB
รายการเด็ก
ระบุ ID ตัวอย่างและเรียกวิธี รายการเด็กตัวอย่างของตัวอย่าง เพื่อระบุเด็กทั้งหมดของตัวอย่างเฉพาะ
import requests
# สร้างที่ https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/ashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา ID ตำแหน่งเริ่มต้นที่ https://create.roblox.com/dashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
placeId = "<PLACE_ID>"
# ID เริ่มต้นสำหรับรากของโมเดลข้อมูลใดๆ สถานที่
instanceId = "root"
# ขอหัวข้อเฮดเดอร์
apiKeyHeaderKey = "x-api-key"
# URL จุดจบสำหรับวิธีการ List Children
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# วิเคราะห์เส้นทางของวัตถุการดำเนินการเพื่อรับทรัพยากรอินสแตนซ์ในภายหลัง ดูส่วนการสำรวจเพื่อรับข้อมูลเพิ่มเติม
operationPath = response.json()['path']
แทนที่จะแสดงรายชื่อเด็กเท่านั้น คำตอบรวมถึงวัตถุ Operation ที่มีเอนด์พอยท์ที่แตกต่างกันโหวตเอนด์พอยท์นี้ เพื่อดึงรายการเด็กที่แท้จริงอย่างไม่ซิงโครไลซ์ตัวอย่างโค้ดที่สมบูรณ์มากขึ้นดูเหมือนว่า:
import requests
import time
apiKey = "<API_KEY>"
universeId = "<UNIVERSE_ID>"
placeId = "<PLACE_ID>"
instanceId = "root"
apiKeyHeaderKey = "x-api-key"
listChildrenUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s:listChildren"
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
numberOfRetries = 10
retryPollingCadence = 5
doneJSONKey = "done"
def ListChildren():
url = listChildrenUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = ListChildren()
print("Operation Results:", response.status_code, response.text)
# แยกทางเดินของวัตถุการดำเนินการเพื่อใช้ในการสำรวจทรัพยากรของตัวอย่าง
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)
คำตอบสุดท้ายอาจดูเหมือนอะไรบางอย่างเช่นนี้:
{
"path": "universes/1234567890/places/98765432109/instances/root/operations/a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"done": true,
"response": {
"@type": "type.googleapis.com/roblox.open_cloud.cloud.v2.ListInstanceChildrenResponse",
"instances": [
{
"path": "universes/1234567890/places/98765432109/instances/b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"hasChildren": true,
"engineInstance": {
"Id": "b1b2b3b4-b1b2-b1b2-b1b2-b1b2b3b4b5b6",
"Parent": "a1a2a3a4-a1a2-a1a2-a1a2-a1a2a3a4a5a6",
"Name": "Workspace",
"Details": {}
}
},
...
]
}
}
จากนั้นคุณสามารถซ้ำไปที่ JSON เพื่อค้นหา ID ตัวอย่างเฉพาะ:
instances = response.json()['response']['instances']replicatedStorageId = ""for i in instances:if i['engineInstance']['Name'] == "ReplicatedStorage":replicatedStorageId = i['engineInstance']['Id']if replicatedStorageId:# ตอนนี้คุณมี ID ตัวอย่างและสามารถรับหรืออัปเดตได้else:# The name wasn't found.
สคริปต์มีข้อมูลเพิ่มเติมบางอย่างในวัตถุ Details เช่นประเภทสคริปต์ พิมพ์และว่าพวกเขาเปิดใช้งานหรือไม่
อินสแตนซ์
วิธีนี้จะคืน ตัวอย่างเดียว
import requests
# สร้างที่ https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/ashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา ID ตำแหน่งเริ่มต้นที่ https://create.roblox.com/dashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
placeId = "<PLACE_ID>"
# ID เริ่มต้นสำหรับรากของโมเดลข้อมูลใดๆ สถานที่
instanceId = "<INSTANCE_ID>"
# ขอหัวข้อเฮดเดอร์
apiKeyHeaderKey = "x-api-key"
# URL จุดสิ้นสุดสำหรับวิธีรับตัวอย่างของ Get Instance
getInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
def GetInstance():
url = getInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey}
return requests.get(url, headers = headerData)
response = GetInstance()
print("Response:", response.status_code, response.text)
# แยกทางเดินของวัตถุการดำเนินการจากคำตอบ ดูส่วนการสำรวจเพื่อดูผลเพิ่มเติม
operationPath = response.json()['path']
เช่นเดียวกับวิธี List Instance Children คำตอบรวมถึงวัตถุ Operation อินสแตนซ์โพลเพื่อดูผลลัพธ์ สำหรับข้อมูลเพิ่มเติม
อัปเดตตัวอย่าง
หลังจากที่คุณได้รับ ID ตัวอย่างที่เหมาะสมแล้ว คุณสามารถอัปเดตได้ โหวตสำหรับผลลัพธ์ หลังจากทำคำขออัปเดตเบื้องต้น
import json
import requests
# สร้างที่ https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# ค้นหาที่ https://create.roblox.com/ashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
universeId = "<UNIVERSE_ID>"
# ค้นหา ID ตำแหน่งเริ่มต้นที่ https://create.roblox.com/dashboard/creations ในเมนูเหลื่อมของปุ่มประสบการณ์
placeId = "<PLACE_ID>"
instanceId = "<INSTANCE_ID>"
instanceType = ""
propertyName = ""
propertyValue = ""
# ขอหัวข้อเฮดเดอร์
apiKeyHeaderKey = "x-api-key"
contentTypeHeaderKey = "Content-type"
contentTypeHeaderValue = "application/json"
# URL จุดสิ้นสุดสำหรับวิธีการ Update Instance
updateInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
# คีย์ JSON
detailsJSONKey = "Details"
engineInstanceJSONKey = "engineInstance"
def GeneratePostData():
propertiesDict = {propertyName: propertyValue}
detailsDict = {instanceType: propertiesDict}
instanceDict = {detailsJSONKey: detailsDict}
outerDict = {engineInstanceJSONKey: instanceDict}
return json.dumps(outerDict)
def UpdateInstance(postData):
url = updateInstanceUrl % (universeId, placeId, instanceId)
headerData = {apiKeyHeaderKey: apiKey,
contentTypeHeaderKey: contentTypeHeaderValue}
return requests.patch(url, headers = headerData, data = postData)
postData = GeneratePostData()
response = UpdateInstance(postData)
print("Response:", response.status_code, response.text)
# แยกทางเดินของวัตถุการดำเนินการจากคำตอบ โหวตเพื่อรับผลลัพธ์ที่จะดำเนินการ
# การอัปเดต
operationPath = response.json()['path']
โหวตเพื่อรับผลลัพธ์
วิธีการทั้งหมดปัจจุบัน ตัวอย่าง จะคืนวัตถุ Operation แทนที่ทรัพยากรที่คุณร้องขอวัตถุนี้ช่วยให้คุณดำเนินการตามอัตนิยมกับการดำเนินการเดิมได้ใช้เส้นทางของวัตถุ Operation (รวมอยู่ในคำตอบเบื้องต้น) เพื่อสอบถามเมื่อทรัพยากรพร้อม
คุณสามารถใช้กลยุทธ์การโหวตที่หลากหลาย เช่น ใช้การถอยร่นทวีคูณหรือความล่าช้าคงที่ระหว่างคำขอได้ตัวอย่างต่อไปจะสำรวจทุกๆ ห้าวินาทีจนถึง 10 ครั้ง
import requests
import time
# สร้างที่ https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# ใช้เส้นทางการดำเนินการจากคำขอเริ่มต้นของคุณ
# ใช้รูปแบบ "จักรวาล/<UNIVERSE_ID>/สถานที่/<PLACE_ID>/ตัวอย่าง/<INSTANCE_ID>/การดำเนินการ/<OPERATION_ID>"
operationPath = "<OPERATION_PATH>"
# คงตัวโพลล์
numberOfRetries = 10
retryPollingCadence = 5
# ขอหัวข้อเฮดเดอร์
apiKeyHeaderKey = "x-api-key"
# URL จุดสิ้นสุดสำหรับการสำรวจการดำเนินการที่ยาวนาน
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
# คีย์ JSON
doneJSONKey = "done"
def GetOperation(operationPath):
url = getOperationUrl % (operationPath)
headerData = {apiKeyHeaderKey: apiKey}
results = requests.get(url, headers = headerData)
return results
def PollForResults(operationPath):
currentRetries = 0
while (currentRetries < numberOfRetries):
time.sleep(retryPollingCadence)
results = GetOperation(operationPath)
currentRetries += 1
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)
การสาธิตร้านยา
การสาธิตร้านขายยา Google Sheets แสดงวิธีการอัปเดตสคริปต์ประสบการณ์จากเว็บ กำลังติดตาม:
- สถานที่ที่ไม่ถูกล็อคด้วย UI ปลอมที่แสดงยาต่างๆ และราคาของพวกเขา
- ไฟล์ .ods ที่คุณนำเข้าไปใน Google Sheets แผ่นกระจายนี้ช่วยให้คุณสามารถกำหนดและอัปเดตค่าสําหรับคุณสมบัติภายในประสบการณ์ได้
- รหัสสำหรับสคริปต์ Google Apps ที่อ่านข้อมูลจากแผ่น Google Sheet และอัปเดตสคริปต์ ReplicatedStorage > ItemList ในประสบการณ์ร้านยาเพื่อสุขภาพ
ตั้งค่าการสาธิต
ไปที่หน้า การสาธิตร้านขายยา ค้นพบคลิกที่เมนูเหลือเกินแล้วแก้ไข ในสตูดิโอ สตูดิโอเปิดด้วยสำเนาของสถานที่
คลิก ไฟล์ → บันทึกไปยัง Roblox และกรอกข้อมูลที่จำเป็นเพื่อบันทึกร้านค้ายาเป็นสถานที่เริ่มต้นสำหรับประสบการณ์ของคุณทดสอบประสบการณ์คุณควรเห็น UI สำหรับการสาธิตร้านยาทำหมายเหตุเกี่ยวกับชื่อ ค่าใช้จ่าย และสีของยาคุณจะเปลี่ยนพวกเขาในภายหลังโดยใช้ Open Cloud!
ตั้งค่าแผ่น
- ดาวน์โหลด ไฟล์แผ่นกระจายร้านยา
- ไปที่ Google Sheets และคลิก แผ่นงานว่างเปล่า 3. ในแผ่นที่ปรากฏให้คลิก ไฟล์ > นำเข้า และคลิกที่แท็บ อัปโหลด 4. ลากไฟล์แผ่นงานร้านขายยาเข้าสู่หน้าต่างอัปโหลด
- เลือก แทนการแพร่กระจายแผ่นงาน แล้ว นำเข้าข้อมูล 6. ในแท็บ AppScript ของแผ่นงาน คัดลอกโค้ดในเซลล์ A1
- คลิกที่เมนู การขยายเวลา>สคริปต์แอป และวางโค้ดลงในไฟล์ Code.gs จากนั้นบันทึกโครงการ
- กลับไปที่แผ่นงานแล้วเลือกแท็บ ร้านขายยาอัปเดต คลิกปุ่ม อัปเดตสคริปต์ คลิกเมนูเหลื่อมและเลือก กำหนดสคริปต์ 9. ในหน้าต่าง กำหนดสคริปต์ ใส่ UpdateScript และคลิก โอเค
สร้างคีย์ API
ไปที่หน้า Creator Hub Open Cloud API Keys และคลิก สร้างคีย์ API
กรอกแบบฟอร์มด้วยข้อมูลต่อไปนี้
- ชื่อ : PotionShop
- ระบบ API : เพิ่มระบบ API universal-place-instances เพิ่มประสบการณ์ร้านขายยาของคุณให้กับระบบสำหรับ การดำเนินการประสบการณ์ เพิ่มการเข้าถึงอ่านและเขียน
- ที่อยู่ IP ที่ยอมรับ : เพิ่ม 0.0.0.0/0 เป็นที่อยู่ IP
- การหมดอายุ : ไม่มีการหมดอายุ
- คลิก บันทึกและสร้างกุญแจ แล้ว คัดลอกกุญแจไปยังคลิปบอร์ด
วางคีย์ API ลงในเซลล์คีย์ API (D2) บนแท็บ Intro ของแผ่น Google Sheet ของคุณ
รับจักรวาลและรหัสสถานที่
- ไปที่หน้า Creator Hub Creations เลื่อนเหนือปุ่มประสบการณ์ของร้านค้ายา และคลิกที่เมนูเหลือเกิน
- เลือก คัดลอก ID จักรวาล และวางลงในเซลล์ ID จักรวาล (E2) ในแท็บ Intro ของแผ่น Google Sheet ของคุณ
- เลือก คัดลอก ID จุดเริ่มต้นของสถานที่ และวางลงในเซลล์ ID สถานที่ (F2) ในแท็บ Intro ของแผ่น Google Sheet ของคุณ
อัปเดตค่าสคริปต์
- ในแท็บ ร้านขายยาอัปเดต ของแผ่นกระดาษ เปลี่ยนค่าใดก็ได้ที่คุณต้องการและคลิกที่ปุ่ม อัปเดตสคริปต์ 2. หาก Google Sheets แจ้งให้คุณอนุญาต คลิก โอเค และอนุญาตให้บัญชีของคุณดำเนินการตามสคริปต์
- ในสตูดิโอ ทดสอบร้านยาเพื่อดูการเปลี่ยนแปลงที่สะท้อนออกมาจากหน้าต่าง สํารวจ คุณสามารถเปิดสคริปต์ ReplicatedStorage > ItemList เพื่อตรวจสอบการเปลี่ยนแปลงได้