Tengo unos 8 años de experiencia seleccionando código. Durante este tiempo, logré probar muchos lenguajes y tecnologías diferentes en diferentes direcciones: desde el "desarrollo" de todo tipo de chistes de phishing en PHP Devel Studio hasta aplicaciones web completas en marcos modernos y software en redes neuronales. Por cierto, mi primera inmersión en programación tuvo lugar a los 12 años gracias a
esta publicación. Ahora estoy en mi segundo año de licenciatura en informática. Hasta hace poco, es decir, hasta el primer año, durante mucho tiempo siempre tuve miedo cada vez que veía la palabra JSON. Entendido y entendido. Pero noté que muchos chicos de mi grupo todavía no trabajaban con ninguna API. Me encantan los artículos en los que el autor explica su tema en detalle, adjunta piezas de código y analiza por qué y por qué decidió hacerlo, y no se arroja a términos y tecnologías complejos. En este artículo describiré el uso de la API (usando la API de PUBG como ejemplo) con palabras simples para un novato, como dicen, sin tonterías. Vamos!

Google colab
Para completar este artículo, necesitará un conocimiento mínimo de Python. Por "mínimo", me refiero a imprimir, si, para, bueno, todo tipo de hojas, diccionarios. Trabajaremos en el entorno de colaboración de Google (en adelante, simplemente "colab"). Colab es un entorno de navegador gratuito donde los chicos inteligentes entrenan y prueban sus programas con inteligencia artificial y realizan todo tipo de investigación. Pero ahora no nos importa, estamos interesados en el formato para escribir el código allí: los archivos que se ejecutan allí se llaman "computadoras portátiles" (del inglés, una computadora portátil). En este formato, el código puede escribirse y ejecutarse en partes (una parte del código en colab se llama "celda de código") directamente en el navegador.
Probemos
- Vamos a Google Colab e iniciamos sesión con su cuenta de Google
- La página principal nos recibirá con ayuda sobre cómo usar Colab, y creamos nuestro primer portátil haciendo clic en Archivo> Nuevo cuaderno de Python 3 en la esquina superior izquierda
En unos segundos, deberíamos ver algo similar a esto:

- Recuerde los siguientes atajos de teclado:
Ctrl + Enter (Cmd + Enter para MacOS) : ejecuta la celda de código actual
ALT + Intro (Opción + Intro para MacOS) : ejecute la celda de código actual, cree y vaya a la nueva celda de código
En la celda de código, puede escribir inmediatamente el código normal de Python. Si queremos ejecutar algún comando de consola, se inserta un signo de exclamación antes de la línea, por ejemplo:
Código de Pythonprint('Hello, PUBG!')
Equipo de la consola !mkdir hello_pubg !cd hello_pubg
Intentemos ejecutar algún tipo de algoritmo simple, por ejemplo, encontrar el máximo común divisor de dos números:
- En la celda de código ingresamos:
a = 10 b = 8
- Presione Alt + Intro (Opción + Intro para MacOS) y escriba en la nueva celda de código:
while a != 0 and b != 0: if a > b: a %= b else: b %= a gcd = a + b
- Presione Alt + Intro nuevamente (Opción + Intro para MacOS) y escriba en la nueva celda de código:
print(gcd)
y presione Ctrl + Enter (Cmd + Enter para MacOS). Obtenemos la respuesta: 2

Como puede ver, trabajar en Colab es muy simple y probar algunas funcionalidades de su futura aplicación es muy conveniente aquí. Por cierto, si queremos ejecutar el algoritmo con otros números, necesitamos cambiar los valores de las variables en la primera celda de código, iniciarlo, luego comenzar el segundo y luego el tercero.
No cerramos la laptop, vamos más allá.
API PUBG
Ahora qué es una API en palabras simples. Cada vez que vamos a un sitio, el servidor de este sitio nos responde con un código HTML, es decir, al visitar, por ejemplo, google.com, el servidor de Google envía HTML a nuestro navegador, que es procesado por el propio navegador, y el navegador nos muestra un hermoso una imagen, habiendo procesado todos los estilos, etc. Pero esto no siempre sucede, por ejemplo, siguiendo
este enlace, veremos algo similar a la salida de un diccionario en python con el comando print (). Así es Este es un diccionario de información meteorológica actual que obtuvimos de
openweathermap . Y una persona nunca manejará tales respuestas del servidor por su cuenta. Los desarrolladores de este sitio nos han proporcionado dichos enlaces para que podamos usarlos en nuestros programas. En general, si necesitábamos hacer un bloqueo climático en nuestro sitio web o aplicación, entonces vamos a openweathermap (o cualquier otro análogo que proporcione una API), abrimos su documentación y la usamos. La API para decodificar y traducir al ruso suena como una "interfaz de programación de aplicaciones", es decir, una colección de solicitudes del formulario
site.com/request , que devuelve un diccionario con la información que necesitamos. Y el formato de estos diccionarios se llama JSON. También hay un formato XML, pero no lo analizaremos en este artículo.
Al principio, escribí que usaremos la
API oficial de los desarrolladores del juego PUBG. Empecemos
Aquí está el recurso con el que verificaremos la formación obtenida, la abriremos en una nueva pestaña e ingresaremos el apodo de cualquier jugador en la búsqueda de jugadores, por ejemplo, "Twitch_todol". Se abren las estadísticas de este jugador:

Abrimos su último partido (el primero en la lista) y vemos toda la información que necesitamos:

Para obtener información sobre esta coincidencia de la API de PUBG:
- Vamos a la página oficial del desarrollador de PUBG .
- Inicie sesión o regístrese en la página haciendo clic en el botón OBTENER SU PROPIA CLAVE API. Y no importa si jugamos este juego o no. Solo necesitamos obtener nuestro token de este sitio, es decir, la clave de API.
Cada vez, recurriendo al servidor PUBG para cualquier información, necesitamos proporcionarle nuestro token único. Esto se hizo por varias razones, la más obvia es que los desarrolladores del juego podrían saber quién recibe exactamente la información de su servidor y hacer restricciones para cada programador. En este caso, tenemos una limitación: no más de 10 solicitudes por minuto. Esto es más que suficiente para nosotros.
- Creamos la aplicación y obtenemos nuestro token

Por el momento, no es muy importante lo que ingresamos aquí. Hacemos clic en la aplicación Crear y vemos un conjunto largo de caracteres, sobre este tipo (use el suyo, este no funciona):
eyJ0eXAiOiJKV1QiLWFeCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5ZjIwYTJkMC0xMzYwLTAxMzgtZTFhYS03ZDVjOWM4YTdjZWUiLCJpc3MiOiJnYW1lbG9ja2VyIiwiaWF04IjoxNTc4MzkwNDQwLCJwdWIiOiJibHVlaG9sZSIsInRpdGxlIjoicHViZyIsImFwcCI6ImxlYW5jb3JlZ2ctZ21hIn0.fwFwEeEw3OghE8sACAHbpKWlJFBVo6F_DbB7dbanybLIIToJc4
- Copie su token y abra su pestaña con colab. No lo cerraste, ¿verdad?
- En la primera celda de código ingresamos este código:
import requests url = "endpoint-url" API_KEY = '< >' header = { "Authorization": "Bearer " + API_KEY, "Accept": "application/vnd.api+json" }
Y corre. En este fragmento de código, creamos un diccionario (encabezado), que contiene los parámetros básicos para acceder a la API PUBG. Enviaremos este diccionario al servidor cada vez que queramos obtener algo de él. Condicionalmente, le decimos al servidor "Hola, mi nombre es Petya", donde Petya es nuestro token: "¡Quiero recibir información tuya en formato JSON!" Obtuve el código que acabo de darle de la documentación de la API de PUBG en esta página .
- Ahora tenemos que decir qué necesitamos exactamente del servidor. En nuestro caso, queremos obtener de él el último juego del jugador Twitch_todol. Para obtener información sobre el jugador, hacemos una solicitud en
api.pubg.com/shards/steam/players?filter [playerNames] = Twitch_todol
Es decir (en la nueva celda de código):
player_name = 'Twitch_todol' r = requests.get('https://api.pubg.com/shards/steam/players?filter[playerNames]=' + player_name, headers=header) player = r.json()
donde en la segunda línea usamos la función de la biblioteca de solicitudes, donde el primer parámetro es lo que necesitamos del servidor y el segundo parámetro es nuestro diccionario de encabezado. En otras palabras, le decimos al servidor "¡Hola, soy Petya! Quiero obtener información sobre el reproductor Twitch_todol en formato JSON ".
Y en la tercera línea, traducimos la respuesta del servidor a este mismo JSON. ¿Por qué estamos haciendo esto? El hecho es que el servidor no nos devuelve una respuesta json, sino que json se traduce en una cadena. Y con el método .json (), convertimos esta cadena en un diccionario que Python entiende.
Asegurémonos de esto escribiendo en la nueva celda de código:
type(player)
La respuesta es dict . Es decir, ahora sabemos con certeza que la variable del reproductor contiene un diccionario que es entendible para Python con información sobre el reproductor.
- ¿Qué contiene exactamente este diccionario? A ver haciendo
player.keys()
Vemos la respuesta:
dict_keys (['datos', 'enlaces', 'meta'])
Estas son las claves de nuestro diccionario. Lo que cada uno de ellos contiene está escrito en esta página .
Para asegurarnos de que tenemos el reproductor que necesitamos, escribiremos lo siguiente:
player['data'][0]['attributes']
Aquí vemos la información básica sobre el jugador: cuándo se registró, su apodo, en qué plataforma juega, etc.
- Necesitamos obtener la identificación de su último partido, que podemos verificar con el sitio web pubg.op.gg, que ya está abierto en una de las pestañas de nuestro navegador. Para esto escribimos:
player['data'][0]['relationships']['matches']['data'][0]['id']
Tenemos algo similar a 'ca2c453b-649a-4556-b768-66b9e01aae63' (el tuyo puede ser diferente, porque el jugador en el momento de leer este artículo ya podría jugar varios partidos). Usa lo que tienes tú mismo. Te doy un ejemplo para que no te confundas.
Entonces, sabemos la identificación de la coincidencia, ahora obtengamos información sobre esta coincidencia, para esto creamos la variable match_id, que equiparamos a la identificación que recibimos. Y hacemos la solicitud en una dirección ligeramente diferente, pero de acuerdo con el esquema habitual, es decir, así:
match_id = player['data'][0]['relationships']['matches']['data'][0]['id']
- La variable de coincidencia, que es un diccionario, contiene toda la información sobre esta coincidencia. Para comenzar, obtenemos el rendimiento de todos los jugadores en este partido:
match_players = [item for item in match['included'] if item['type'] == 'participant'] match_players
En este caso, completamos la lista de jugadores (match_players), revisando la coincidencia del diccionario ['incluído'] ('incluído' es la clave del diccionario del diccionario que contiene los indicadores de todos los jugadores en la partida), verificando simultáneamente el valor de la clave 'tipo'. ¿Por qué verificamos si
partido ['incluido'] contiene información del jugador? El hecho es que esto no es del todo cierto, el partido ['incluido'] también contiene información sobre los equipos en los que jugaron estos jugadores (es decir, el elemento ['tipo'] puede ser igual a 'lista'). Es decir, el partido ['incluido'] se parece a esto:
[jugador, equipo, equipo, jugador, jugador, jugador, equipo, ...]
No está del todo claro por qué los desarrolladores decidieron hacer exactamente eso, pero esto no nos molesta de ninguna manera.
Entonces, obtuvimos el rendimiento de los jugadores, pero no estamos particularmente interesados en cómo otros jugadores jugaron en este partido, veremos el rendimiento de nuestro jugador Twitch_todol en este partido. Para hacer esto, realizamos:
my_player_stats = [item for item in match_players if item['attributes']['stats']['name'] == player_name][0] my_player_stats
Compare las estadísticas resultantes:

con estadísticas en pubg.op.gg

Vemos que todo coincide. Alégrate! Por cierto, mientras escribía este artículo, nuestro héroe ya ha logrado jugar varios partidos, por lo que algunas de las capturas de pantalla que proporcioné anteriormente pueden no coincidir.
Finalización
En este artículo quería decirles a nuestros programadores más pequeños que no deben temer las palabras JSON y API, que están implementadas de manera conveniente y clara y que se adjunta documentación a cada una. Traté de explicar esto en el lenguaje más accesible, sin usar términos complejos.
Y también, quiero agradecer a Habr y al autor (
ArhMax ) por ayudarme a escribir el código por primera vez hace 8 años.