Las API abiertas de nube del motor te permiten administrar Instance objetos en tus experiencias de Roblox desde la web.
Restricciones beta
Estas API están actualmente en beta y tienen las siguientes restricciones:
Solo puedes leer y actualizar Script , LocalScript , y ModuleScript objetos.
No puedes actualizar los scripts que están actualmente abiertos en Roblox Studio.
No puedes actualizar los scripts que forman parte de un paquete de.
Solo puedes usar la autenticación de clave de API. Crea una clave de API con instancias de lugar del universo agregadas como sistema de API.
Debes especificar las experiencias a las que quieres que la clave tenga acceso, así como los alcances de permiso de lectura y escritura deseados.
Debes tener una sesión colaborativa habilitada para la experiencia que quieres acceso.
Los cuerpos de solicitud, como para actualizar la instancia, están limitados a 200 KB.
Lista de hijos
Lista todos los hijos de una instancia específica especificando una ID de instancia y llamando el método Listar hijos de instancia.
import requests
# Generar en https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Encuentra en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
universeId = "<UNIVERSE_ID>"
# Encuentra el ID del lugar de inicio en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
placeId = "<PLACE_ID>"
# El ID predeterminado para el raíz de cualquier aplicación de modeladode datos de un lugar
instanceId = "root"
# Cabeza de solicitud
apiKeyHeaderKey = "x-api-key"
# URL final para el método 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)
# Analice el camino del objeto de operación para obtener más tarde la instancia de recursos. Vea la sección de Resultados de encuesta para obtener más información.
operationPath = response.json()['path']
En lugar de simplemente enumerar los hijos, la respuesta incluye un objeto Operation con un punto final diferente. Poll this endpoint para recuperar de forma asíncrona la lista real de hijos.Un ejemplo de código más completo se parece a esto:
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)
# Analiza el camino del objeto de operación para usar en la encuesta para la instancia de recursos.
operationPath = response.json()['path']
response = PollForResults(operationPath)
print("Response:", response.status_code, response.text)
La respuesta final podría verse algo así:
{
"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": {}
}
},
...
]
}
}
Luego puedes iterar sobre el JSON para encontrar una ID de instancia particular:
instances = response.json()['response']['instances']replicatedStorageId = ""for i in instances:if i['engineInstance']['Name'] == "ReplicatedStorage":replicatedStorageId = i['engineInstance']['Id']if replicatedStorageId:# Ahora tiene una identificación de instancia y puede obtenerla o actualizarla.else:# The name wasn't found.
Los scripts contienen información adicional en el objeto Details, como el introducirde script, la de origeny si están habilitados.
Obtener una instancia
Este método devuelve una sola Instancia.
import requests
# Generar en https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Encuentra en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
universeId = "<UNIVERSE_ID>"
# Encuentra el ID del lugar de inicio en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
placeId = "<PLACE_ID>"
# El ID predeterminado para el raíz de cualquier aplicación de modeladode datos de un lugar
instanceId = "<INSTANCE_ID>"
# Cabeza de solicitud
apiKeyHeaderKey = "x-api-key"
# URL final para el método Obtener instancia
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)
# Analiza el camino del objeto de operación desde la respuesta. Ve a la sección de Resultados de encuesta para obtener más información.
operationPath = response.json()['path']
Al igual que el método List Instance Children, la respuesta incluye un objeto Operation que usted consulta para recuperar la instancia real.Vea Encuesta para obtener resultados para más información.
Actualizar instancias
Una vez que obtenga la ID de instancia apropiada, puede actualizarla. Encuesta de resultados después de hacer la solicitud de actualización inicial.
import json
import requests
# Generar en https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Encuentra en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
universeId = "<UNIVERSE_ID>"
# Encuentra el ID del lugar de inicio en https://create.roblox.com/dashboard/creations en el menú de desbordamiento de una mosaicode experiencia
placeId = "<PLACE_ID>"
instanceId = "<INSTANCE_ID>"
instanceType = ""
propertyName = ""
propertyValue = ""
# Cabeza de solicitud
apiKeyHeaderKey = "x-api-key"
contentTypeHeaderKey = "Content-type"
contentTypeHeaderValue = "application/json"
# URL del punto final para el método Update Instance
updateInstanceUrl = "https://apis.roblox.com/cloud/v2/universes/%s/places/%s/instances/%s"
# Claves 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)
# Analiza el camino del objeto de operación desde la respuesta. Vota por los resultados a realizar
# la actualización.
operationPath = response.json()['path']
Encuesta para obtener resultados
Todos los métodos actuales de Instancia devuelven un objeto Operation en lugar de la recurrencia que solicitaste.Este objeto te permite realizar de forma asíncrona la operación original.Usa el camino del objeto Operation para solicitar cuándo está lista la recurrencia.
Puedes usar una variedad de estrategias de encuesta, como usar un retroceso exponencial o un retraso fijo entre solicitudes.El siguiente ejemplo encuesta cada cinco segundos, hasta 10 veces.
import requests
import time
# Generar en https://create.roblox.com/ashboard/credentials
apiKey = "<API_KEY>"
# Usa el camino de operación desde tu solicitud inicial
# Toma la forma de "universos/<UNIVERSE_ID>/places/<PLACE_ID>/instances/<INSTANCE_ID>/ operations/<OPERATION_ID>"
operationPath = "<OPERATION_PATH>"
# Constantes de encuesta
numberOfRetries = 10
retryPollingCadence = 5
# Cabeza de solicitud
apiKeyHeaderKey = "x-api-key"
# URL del punto final para la encuesta de operaciones de larga duración
getOperationUrl = "https://apis.roblox.com/cloud/v2/%s"
# Claves 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)
Demostración de la tienda de pociones
La demostración de Google Sheets de la tienda de pociones te muestra cómo actualizar el script de una experiencia desde la web. La demostración consiste en lo siguiendo:
- Un lugar desbloqueado sin copia con una interfaz de usuario falsa que muestra varias pociones y sus precios.
- Un archivo .ods que importas a Google Sheets. Esta hoja de cálculo te permite especificar y actualizar valores para propiedades dentro de la experiencia.
- Código para un script de Google Apps que lee datos de la hoja de Google y actualiza el script de ReplicatedStorage > ItemList en la experiencia de la tienda de pociones.
Configura la demostración
Ve a la página de demostración de la Tienda de pociones.Haga clic en el menú de desbordamiento, y luego Editar en Studio .Studio se abre con una copia del lugar.
Haga clic en Archivo → Guardar en Roblox y complete la información necesaria para guardar la demostración de la tienda de pociones como el lugar predeterminado para su experiencia.Prueba la experiencia.Deberías ver la interfaz de usuario para la demostración de la tienda de pociones.Toma nota del nombre, costo y colores de las pociones.¡Los cambiarás más tarde usando Open Cloud!
Configurar la hoja
- Descargar la hoja de cálculo de la tienda de pociones.
- Ve a Hojas de Google y haz clic en Hoja de cálculo en blanco .
- En la hoja que aparece, haga clic en Archivo > Importar , y haga clic en la pestaña Subir .
- Arrastra el archivo de hoja de cálculo de la tienda de pociones a la ventana de carga.
- Elige Reemplazar hoja de cálculo y luego Importar datos .
- En la pestaña AppScript de la hoja, copia el código en la celda A1.
- Haga clic en el menú extensiones > script de aplicaciones y pegue el código en el archivo Code.gs. Luego guarde el proyecto.
- De vuelta en la hoja de cálculo, seleccione la pestaña Actualizar tienda de pociones .Haga clic en el botón actualizar script , haga clic en el menú de desbordamiento y seleccione asignar script .
- En la ventana Asignar script , ingrese UpdateScript y haga clic en OK .
Crear una clave de API
Ve a la página API de nube abierta del centro de creadores y haz clic en Crear clave de API .
Llena el formulario con la siguiente información.
- Nombre : PotionShop
- Sistema de API : Añade el sistema de API universal-place-instances .Añade tu experiencia de tienda de pociones al sistema.Para Operaciones de experiencia , agregue acceso de lectura y escritura.
- Direcciones IP aceptadas : Añade 0.0.0.0/0 como dirección IP
- Expiración : Sin expiración
- Haga clic en Guardar y generar clave y luego Copiar clave a portapapeles .
Pega la clave de API en la celda de clave de API (D2) en la pestaña de Intro de tu hoja de Google.
Obtener el ID del universo y el lugar
- Ve a la página Creaciones del Centro de Creadores, pasa el mosaicosobre la experiencia de la tienda de pociones y haz clic en el menú de desbordamiento.
- Seleccione Copiar ID del universo y péguelo en la celda ID del universo (E2) en la pestaña de introducción de su hoja de Google.
- Seleccione Copiar ID de inicio de lugar y péguelo en la celda ID de lugar (F2) en la pestaña de introducción de su hoja de Google.
Actualizar los valores del script
- En la pestaña Tienda de pociones de actualización de la hoja, modifique cualquier valor que desee y haga clic en el botón Actualizar guión .
- Si Google Sheets te solicita la autorización, haz clic en OK y permite que tu cuenta ejecute el script.
- En Studio, prueba la tienda de pociones para ver cualquier cambio reflejado.Desde la ventana Explorador , también puedes abrir el script ReplicatedStorage > ItemList para inspeccionar los cambios.