Artsy API: Datos para entender el arte
Artsy es una empresa de corretaje de arte en línea con sede en Nueva York. Su página web le da servicio a numerosas galerías, museos y colecciones privadas en el mundo.
Como muchas otras páginas, Artsy API (Application Programming Interface o Interfaz de Programación de Aplicación) permite el fácil acceso a su base de datos.
Supongamos que queremos vender una obra de arte de nuestro bisabuelo, ¿dónde será mejor venderla para maximizar su precio de venta?, ¿en cuánto se venden obras de artistas similares?, ¿en qué momento del año es el mejor momento de vender? Preguntas de este tipo las podemos contestar mediante esta API.
El API de Artsy es sencillo de utilizar y accesible. Solo hay que registrarse para obtener una API key con la que podremos hacer requests utilizando las llamadas REST (REpresentational State Transfer).
En el presente artículo explicaré paso a paso cómo obtener datos de la API con Curl y Python.
Empecemos por crear una cuenta de desarrollador en la página de Artsy:
Crea y nombra tu app (¡no necesitas agregar redirect urls!), con lo que automáticamente te darán el Client ID. Al darle clic en edit veremos también el Client Secret. Estos dos campos son los más importantes para obtener tu token para consultas.
En la página Public API Documentation -> General -> Getting Started igualmente verás los datos de tu API y en el punto 4 te dirán cómo obtener el token.
Abre terminal o el command prompt en Windows (necesitas haber instalado Curl previamente) y copia y pega el link:
Hasta abajo de la respuesta se lee: xapptoken, token: XXXX hasta donde dice expires_at.
Copia y pega el token en tu notebook en Python para tenerlo guardado, el cual expirará en la fecha anunciada.
Para hacer consultas, necesitaremos conseguir un endpoint, el cual dependerá de los datos que queramos consultar. Todos los endpoints disponibles están en la documentación de Artsy.
Empecemos cargando las librerías que vamos a utilizar:
import numpy as np
import pandas as pd
import json
import os
import requests
Con print(pd.__version__) puedes verificar tu versión de Pandas.
Consultemos como ejemplo los datos de las ventas:
API_KEY = os.getenv("ARTSY_API_KEY")
headers = {
"X-XAPP-Token": "TU_TOKEN"
}
sales_endpoint = "https://api.artsy.net/api/sales?"
sales_response = requests.get(sales_endpoint, headers=headers)
El json de respuesta contiene tres campos. Dentro del campo ‘_embedded’ es donde encuentras los datos que te interesan para la base de datos. Convirtamos la consulta de json en un Pandas Data Frame y extraigamos los campos dentro de embedded y sales.
if sales_response.status_code== 200:
data = sales_response.json()
sales = data['_embedded']['sales']
auctionsData=pd.DataFrame(sales)
else:
raise Exception('Failed to get data from the API')
Esto nos dará un Data Frame:
Veamos cómo se ve la data en json para entender esto mejor:
Como mencioné, los datos que nos interesan están en _embedded, sales.
Cada request te arroja únicamente cinco resultados. En el campo ‘next’ del json hay un nuevo link para obtener la siguiente página de resultados. A este problema lo conocemos como Pagination.
Podemos darle la vuelta al problema de Pagination con el código:
url = "https://api.artsy.net/api/sales?"
results_count = 0
all_sales = []
while url:
response = requests.get(url, headers=headers)
data = response.json()
# process the data as needed
results_count += len(data['_embedded']['sales'])
all_sales.extend(data['_embedded']['sales'])
if '_links' in data and 'next' in data['_links']:
url = data['_links']['next']['href']
else:
url = None
df = pd.DataFrame(all_sales)
Por ser un while loop, es normal que sea tardado. El tiempo de respuesta dependerá del hardware de tu computadora, de cuánta memoria tengas asignada para tu notebook, y de cuántos casos arrojó el query.
Artsy API es una gran opción, pero su experiencia dependerá de que se use una computadora con buena cantidad de RAM (16 GB o más) porque sino será un while loop tardado y a veces ineficiente. Existen otras alternativas, aunque eso dependerá de tus necesidades.
Hay muchos otros campos que explorar, como cuáles artistas venden en más galerías, por ejemplo. Para responder a esta pregunta, necesitaremos solicitar las galerías e identificar cuáles artistas se repiten.
Espero que este tutorial te sea muy útil. ¡Inténtalo!
Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.