Aplikacje API otwartej chmury silnika pozwalają zarządzać Instance obiektami w swoich doświadczeniach Roblox z witryny internetowej.
Ograniczenia beta
Te API są obecnie w wersji beta i mają następujące ograniczenia:
Możesz czytać i aktualizować tylko Script , LocalScript i ModuleScript obiekty.
Nie możesz aktualizować skryptów, które są obecnie otwarte w Roblox Studio.
Nie możesz aktualizować skryptów, które są częścią pakietu pakietu.
Możesz używać tylko autoryzacji klucza API. Stwórz klucz API z instancjami miejscowymi wszechświata dodanymi jako system API.
Musisz określić doświadczenia, do których klucz ma mieć dostęp, a także zakresy uprawnień odczytu i zapisu, które chcesz mieć.
Musisz mieć włączoną sesję współpracy dla doświadczenia, do którego chcesz uzyskać dostęp.
Żądania ciał, takie jak do Aktualizacja instancji, są ograniczone do 200 KB.
Wyświetl dzieci
Wyświetl wszystkie dzieci określonej instancji, określając identyfikator instancji i wywołując metodę Listuj dzieci instancji.
import requests
# Generuj w https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Znajdź na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
universeId = "<UNIVERSE_ID>"
# Znajdź ID miejsca startu na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
placeId = "<PLACE_ID>"
# Domyślny ID dla korzenia modelu danych dowolnego miejsce
instanceId = "root"
# Prośba o nagłówek
apiKeyHeaderKey = "x-api-key"
# Adres URL końcowy dla metody 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)
# Zanalizuj ścieżkę obiektu operacji, aby później uzyskać zasób Instancji. Zobacz sekcję Polling for Results dla więcej informacji.
operationPath = response.json()['path']
Zamiast po prostu wymieniać dzieci, odpowiedź zawiera obiekt Operation z innym punktem końcowym.Zapytaj ten punkt końcowy o asynetyczne odzyskanie rzeczywistej listy dzieci.Bardziej kompletny przykład kodu wygląda tak:
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)
# Zanalizuj ścieżkę obiektu operacji do użycia w celu głosowania na zasób instancji.
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)
Ostateczna odpowiedź może wyglądać tak:
{
"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": {}
}
},
...
]
}
}
Następnie możesz powtarzać JSON, aby znaleźć określoną identyfikator instancji:
instances = response.json()['response']['instances']replicatedStorageId = ""for i in instances:if i['engineInstance']['Name'] == "ReplicatedStorage":replicatedStorageId = i['engineInstance']['Id']if replicatedStorageId:# Masz teraz ID instancji i możesz ją uzyskać lub zaktualizować.else:# The name wasn't found.
Skrypty zawierają dodatkowe informacje w obiekcie Details, takie jak wpisywaćskryptu, kod źródłowyi to, czy są włączone.
Zdobądź instancja
Ta metoda zwraca pojedynczą Instancję.
import requests
# Generuj w https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Znajdź na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
universeId = "<UNIVERSE_ID>"
# Znajdź ID miejsca startu na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
placeId = "<PLACE_ID>"
# Domyślny ID dla korzenia modelu danych dowolnego miejsce
instanceId = "<INSTANCE_ID>"
# Prośba o nagłówek
apiKeyHeaderKey = "x-api-key"
# Adres URL końcowy dla metody GetInstance
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)
# Zanalizuj ścieżkę obiektu operacji z odpowiedzi. Zobacz sekcję Polling for Results dla więcej informacji.
operationPath = response.json()['path']
Podobnie jak metoda List Institute Children, odpowiedź zawiera obiekt Operation, który sprawdzasz, aby odzyskać rzeczywistą instancja.Zobacz Ankietę o wynikach po więcej informacji.
Aktualizuj instancje
Po uzyskaniu odpowiedniego ID instancji możesz ją zaktualizować. Zagłosuj na wyniki po dokonaniu pierwotnego prośbaaktualizacji.
import json
import requests
# Generuj w https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Znajdź na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
universeId = "<UNIVERSE_ID>"
# Znajdź ID miejsca startu na https://create.roblox.com/dashboard/creations w menu przepięcia przekładki doświadczenia
placeId = "<PLACE_ID>"
instanceId = "<INSTANCE_ID>"
instanceType = ""
propertyName = ""
propertyValue = ""
# Prośba o nagłówek
apiKeyHeaderKey = "x-api-key"
contentTypeHeaderKey = "Content-type"
contentTypeHeaderValue = "application/json"
# Adres URL końcowy dla metody Update Instance
updateInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
# Klucze JSONowe
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)
# Zinterpretuj ścieżkę obiektu operacji z odpowiedzi. Zapytaj o wyniki do wykonania
# aktualizacja.
operationPath = response.json()['path']
Ankieta o wyniki
Wszystkie obecne metody Instancji zwracają obiekt Operation zamiast zasobu, o który poprosiłeś.Ten obiekt pozwala na asynchroniczne wykonanie oryginalnej operacji.Użyj ścieżki obiektu Operation (włączonej w pierwszą odpowiedź) do zapytań o to, kiedy zasób będzie gotowy.
Możesz używać różnych strategii ankiet, takich jak używanie wykładniczego odrzucenia lub stały opóźnienie między żądaniami.Następujący przykład ankietuje co pięć sekund, do 10 razy.
import requests
import time
# Generuj w https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Użyj ścieżki operacji z pierwotnego prośba
# Przyjmuje formę "universes/<UNIVERSE_ID>/places/<PLACE_ID>/instances/<INSTANCE_ID>/operations/<OPERATION_ID>"
operationPath = "<OPERATION_PATH>"
# Konstytucje głosowania
numberOfRetries = 10
retryPollingCadence = 5
# Prośba o nagłówek
apiKeyHeaderKey = "x-api-key"
# Adres URL końcowy do długotrwałego pollingu operacji
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
# Klucze JSONowe
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)
Demonstracja sklepu z eliksirami
Demo sklepu z eliksirami Google Sheets pokazuje, jak zaktualizować skrypt doświadczenia z witryny. Demo składa się z obserwujeelementów:
- Miejsce bez blokady kopiowania z mockiem interfejsu, który wyświetla różne mikstury i ich ceny.
- Plik .ods, który importujesz do arkuszy Google. Ta tabela umożliwia określenie i aktualizowanie wartości dla właściwości w ramach doświadczenia.
- Kod dla skryptu Google Apps, który czyta dane z arkusza Google i aktualizuje skrypt ReplicatedStorage > ItemList w doświadczeniu Potion Shop.
Ustaw konfigurację demo
Przejdź do strony Demo sklepu z eliksirami Odkryj.Kliknij menu przepięcia, a następnie Edytuj w Studio .Studio otwiera się z kopią miejsce.
Kliknij Plik → Zapisz do Roblox i wypełnij niezbędne informacje, aby zapisać Demo sklepu z eliksirami jako domyślne miejsce dla twojego doświadczenia.Przetestuj doświadczenie.Powinieneś zobaczyć interfejs użytkownika dla Demo sklepu z eliksirami.Zapisz nazwę, koszt i kolory eliksirów.Zmienisz je później za pomocą Open Cloud!
Ustaw arkusz
- Pobierz arkusz rozliczeniowy sklepu z eliksirami.
- Idź do arkuszy Google i kliknij pusty arkusz .
- W arkuszu, który się pojawia, kliknij Plik > Import i kliknij zakładkę Prześlij .
- Przeciągnij plik arkusza sklepu z eliksirami do okna przesyłania.
- Wybierz Zastąp arkusz kalkulacyjny i następnie Importuj dane .
- Na zakładce AppScript arkusza skopiuj kod w komórce A1.
- Kliknij menu Rozszerzenia > Skrypt aplikacji i wklej kod do pliku Code.gs. Następnie zapisz projekt.
- Wróć do arkusza kalkulacyjnego i wybierz zakładkę Aktualizuj sklep z eliksirami .Kliknij przycisk Aktualizuj skrypt , kliknij menu przepięcia, a następnie wybierz Nadaj skrypt .
- W oknie Przydział skryptu wpisz UpdateScript i kliknij OK .
Stwórz klucz API
Przejdź na stronę Creator Hub Open Cloud API Keys i kliknij Utwórz klucz API .
Wypełnij formularz z następującymi informacjami.
- Nazwa : PotionShop
- System API : Dodaj system API uniwersalnych miejsc .Dodaj swoje doświadczenie sklepu z eliksirami do systemu.Dla Operacji doświadczeń , dodaj dostęp odczytu i zapisu.
- Akceptowane adresy IP : Dodaj 0.0.0.0/0 jako adres IP
- Wygasanie : Bez wygaścia
- Kliknij Zapisz i wygeneruj klucz i następnie Skopiuj klucz do schowka .
Wklej klucz API do komórki klucza API (D2) na zakładce Intro w arkuszu Google Sheet.
Zdobądź wszechświat i ID miejsca
- Przejdź na stronę tworów w centrum twórców, przewiń pasek doświadczenia sklepu z eliksirami i kliknij menu przepięcia.
- Wybierz Kopiuj ID wszechświata i wklej go do komórki ID wszechświata (E2) na zakładce Intro w arkuszu Google Sheet.
- Wybierz ID początkowego miejsca kopiowania i wklej je do komórki ID miejsca (F2) na zakładce Intro w arkuszu Google.
Zaktualizuj wartości skryptu
- Na zakładce Aktualizuj sklep z eliksirami arkusza zmodyfikuj dowolne wartości, które chcesz i kliknij przycisk Aktualizuj skrypt .
- Jeśli Google Sheets poprosi Cię o autoryzację, kliknij OK i pozwól, aby Twoje konto uruchomiło skrypt.
- W Studio przetestuj sklep z eliksirami, aby zobaczyć wszelkie odzwierciedlone zmiany.Z okna Eksploratora możesz również otworzyć skrypt ReplicatedStorage > ItemList , aby sprawdzić zmiany.