Juego Yu-Gi-Oh!, un juego de cartas coleccionables, desde los 12 años. Había jugado antes a Pokémon, pero por el animé, que se había vuelto muy popular, empezaron a llegar cartas “truchas” a los kioscos. Y me volaba la cabeza: era fácil de entender pero difícil de dominar.
Fueron pasando los años y ese juego se volvió lo opuesto a esas épocas: entre distintas formas de juegos y arquetipos, se volvió difícil de aprender, y aún más difícil de dominar. Espanta a jugadores nuevos, y con mucha razón.
Este juego es ideal para análisis de datos por la cantidad masiva de arquetipos y jugadores que tiene. Además, de Pokémon ya se hizo todo lo conocido. Voy a hacer varias entregas de un pequeño proyecto para analizar aspectos relacionados a las cartas. Y quizás puedas descubrir algunas cosas para tus scripts. Hoy, puntualmente, quiero obtener información de cartas que tengo en una lista de Excel, y usar una API para obtener su información.
Premisas
Tengo un archivo llamado “cartasaobtener.xlsx”, que contiene un listado de cartas con nombres concretos:
Deseo entonces obtener de todos ellos, la data relacionada: ataque, defensa, tipo, atributo, texto, entre otros. Todo ello, guardado en otro archivo, llamado cartas.xlsx.
Para ello vamos a usar un script de Python, que va a meter todas las cartas nombradas en una cadena, esperará una respuesta de una API pública (YGO Pro Deck, una maravilla). Para ello, empezamos con este código:
import requests import pandas as pd dfCartas = pd.read_excel("C:/Python/Cartasaobtener.xlsx","Sheet1") listaCartas = dfCartas["Nombre"].to_list()
Requests es totalmente necesario para usar la API, mientras que Pandas es muy útil para manipular la data que necesitamos. Leo el archivo necesario (Cartasaobtener) mediante el método correspondiente de pandas, y siendo sólo una lista, transformo el dataframe a una lista.
Esta transformación es importante, porque la Api pide separar cada nombre de carta con un pipe (|), por lo que deberemos crear una cadena iterando sobre tal lista:
strAppend = "" for carta in listaCartas: strAppend = strAppend + carta + "|" strAppend = strAppend.removesuffix('|')
Por último, hacemos finalmente el llamado para obtener los datos:
url = f"https://db.ygoprodeck.com/api/v7/cardinfo.php?name={strAppend}" response = requests.get(url) data = response.json() card_data = pd.DataFrame(data["data"])
Si exploramos el dataframe resultante, veremos que devuelve todas las imágenes posibles para nuestras cartas: cada carta tiene arte alternativo. Para hacer más simple mi trabajo luego, voy a separar en otro campo la primer imagen de ese arreglo, usando una función lambda sobre el campo “card_images” del dataframe para traer sólo la primer imágen:
card_data["main_image"] = card_data['card_images'].apply(lambda x: x[0]["image_url"])
Por último, al dataframe resultante lo voy a guardar, como está, en un archivo Excel:
card_data.to_excel("C:/Python/cartas.xlsx")
Y el resultado no puede ser más lindo:
Este código lo subí a mi GitHub, que pueden encontrar acá: GitHub.
Próximamente, el Power BI basado en este archivo.