Ejemplos de Python
Esta práctica muestra cómo escribir un programa sencillo que descarga y analiza algo de contenido usando el instantáneas proporcionado por content servers.
Usaremos el server de la Decentraland Foundation en peer.decentraland.org, y Python 3 como nuestro lenguaje preferido.
Esto es lo que haremos:
Consultar el estado del content server.
Selecciona y descarga una instantánea con una lista de entities.
Imprime el tipo y el ID de todas las entities referenciadas.
Comencemos nuestro script con algunos preparativos. Usaremos solo módulos de la biblioteca estándar, pero en código real probablemente querrás un cliente HTTP más cómodo (como el requests library).
# Haz una request HTTP GET, devuelve una response HTTP similar a un archivo.
def fetch(path):
url = f"https://peer.decentraland.org/{path}"
headers = { "User-Agent": "urllib" } # importante en algunos servers (si está vacío, 403 Forbidden)
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
return responseNuestro simple helper hace un request HTTP GET request, y devuelve el objeto de response similar a un archivo. Nada sofisticado. Usemoslo para llamar al /about endpoint y comprobar el estado del server:
# Comprueba el estado del server:
about = json.load(fetch('about'))
if not about['healthy']:
print("¡Server no saludable!")
sys.exit(1)Si superamos este punto, el server está en funcionamiento (obtuvimos una 200 response) y reporta estar operativo. Podemos solicitar el conjunto actual de snapshots (que viene en formato de array JSON):
Los archivos snapshot (especialmente para los rangos de tiempo más largos) pueden ser muy grandes. Para un experimento rápido, tomemos el más pequeño de la lista por numberOfEntities:
Para descargar el contenido, necesitamos el hash campo de instantánea. Obtenemos la URL del archivo añadiéndolo a la raíz del contenido:
El archivo que seleccionamos es lo suficientemente pequeño como para almacenarlo en memoria, pero fingamos que no lo sabemos y hagamos streaming de él. La primera línea es el encabezado de la instantánea, y cada línea posterior contiene un objeto JSON.
Comprobemos el encabezado, siempre es una buena idea:
Ahora podemos procesar todas las entities en la instantánea, leyendo la response línea por línea. Para nuestros modestos propósitos, procesar significa imprimir el tipo de entity y el ID:
Este bucle comenzará a hacer streaming, parseando e imprimiendo líneas como estas hasta que termine con la instantánea:
¡Salud! Hemos usado el sistema de snapshots para explorar parte del contenido disponible en Decentraland.
Recuerda que puedes encontrar el script completo en GitHub, junto con un ejemplo más avanzado.
Última actualización