En el desarrollo de soluciones para comercio electrónico, acceder al inventario completo de productos de una tienda es una funcionalidad clave para análisis de mercado y automatización. La pltaaforma 1688 ofrece la API item_search_shop diseñada para este propósito. Esta guía presenta una implementación práctica en Python para consumir este servicio, procesar los resultados y adaptarlos para aplicaciones de análisis.
Configuración inicial del entorno
Antes de ejecutar cualquier código, es necesario cumplir con los requisitos de autenticación de la plataforma y preparar el entorno de desarrollo.
Obtención de credenciales API
Registre una aplicación en el portal de desarrolladores de 1688 para adquirir las claves app_key y app_secret. Estas credenciales son obligatorias para todas las solicitudes al API.
Instalación de dependencias
Utilice el gestor de paquetes pip para instalar las bibliotecas requeridas:
pip install requests pandas numpy
Construcción del cliente API
El proceso de autenticación requiere firmar cada solicitud mediante un algoritmo específico. La siguiente implementación encapsula esta lógica en una clase reutilizable.
import requests
import hashlib
import time
from urllib.parse import urlencode
class AlibabaAPIClient:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.base_url = "https://gw.api.taobao.com/router/rest"
def _generate_signature(self, parameters):
"""Calcula la firma de autenticación requerida por el API."""
sorted_params = sorted(parameters.items())
param_string = '&'.join([f'{k}={v}' for k, v in sorted_params])
signature_string = f'{param_string}&{self.app_secret}'
return hashlib.md5(signature_string.encode('utf-8')).hexdigest().upper()
def fetch_shop_products(self, shop_id, search_term='',
attributes='num_iid,title,pic_url,price',
page=1, items_per_page=40):
"""Recupera productos de una tienda específica."""
query_params = {
'app_key': self.app_key,
'method': 'alibaba.item.search.shop',
'format': 'json',
'v': '2.0',
'sign_method': 'md5',
'timestamp': str(int(time.time())),
'fields': attributes,
'keywords': search_term,
'shop_num': shop_id,
'page_no': page,
'page_size': items_per_page
}
query_params['sign'] = self._generate_signature(query_params)
response = requests.get(self.base_url, params=query_params)
api_result = response.json()
if api_result.get('error_response'):
raise Exception(f"Error en API: {api_result['error_response']['msg']}")
return api_result.get('result', {})
# Ejemplo de uso
cliente = AlibabaAPIClient('SU_APP_KEY', 'SU_APP_SECRET')
datos_tienda = cliente.fetch_shop_products('ID_TIENDA_EJEMPLO', 'electrónica')
Estructura de la respuesta y procesamiento inicial
La API responde con un objeto JSON que contiene una lista de productos. Cada producto tiene campos definidos por el parámetro fields.
{
"item_list": [
{
"num_iid": "603459012345",
"title": "Smartphone de gama media",
"pic_url": "https://image.example.com/item1.jpg",
"price": "2450.50"
},
{
"num_iid": "603459012346",
"title": "Funda protectora",
"pic_url": "https://image.example.com/item2.jpg",
"price": "45.99"
}
]
}
Transformación y análisis de datos
Los datos obtenidos pueden convertirse en un DataFrame de pandas para facilitar operaciones analíticas.
import pandas as pd
def procesar_resultados_api(resultado_api):
"""Convierte la respuesta del API en un DataFrame estructurado."""
if not resultado_api or 'item_list' not in resultado_api:
return pd.DataFrame()
datos_crudos = resultado_api['item_list']
df_productos = pd.DataFrame(datos_crudos)
# Conversión de tipos de datos
df_productos['price'] = pd.to_numeric(df_productos['price'], errors='coerce')
df_productos['num_iid'] = df_productos['num_iid'].astype('string')
return df_productos
# Aplicación de transformaciones
df_inventario = procesar_resultados_api(datos_tienda)
# Filtrado y ordenamiento
productos_premium = df_inventario[df_inventario['price'] > 1500]
inventario_ordenado = productos_premium.sort_values('price', ascending=False)
# Exportación a formato CSV
inventario_ordenado.to_csv('inventario_tienda.csv', index=False, encoding='utf-8-sig')
Visualización básica de datos
Para un análisis exploratorio rápido, se pueden generar gráficos estadísticos simples.
import matplotlib.pyplot as plt
import seaborn as sns
# Configuración estética
sns.set_style("whitegrid")
# Histograma de distribución de precios
plt.figure(figsize=(10, 6))
sns.histplot(data=df_inventario, x='price', bins=15,
kde=True, color='teal')
plt.title('Distribución de precios en el inventario')
plt.xlabel('Precio (RMB)')
plt.ylabel('Cantidad de productos')
plt.tight_layout()
plt.show()
Consideraciones de implementación
- Límites de frecuencia: Respete los límites de tasa de solicitudes epsecificados en la documentación oficial.
- Manejo de errores: Implemente mecanismos robustos para manejar fallos de red y respuestas inesperadas del API.
- Actualizaciones del servicio: La estructura del API puede cambiar; mantenga su código sincronizado con la versión documentada.
- Uso ético de datos: Asegúrese de que el procesamiento de datos cumpla con los términos de servicio y regulaciones de privacidad aplicables.
Esta implementación proporciona una base para integrar datos de productos de 1688 en flujos de trabajo analíticos. La modularidad del diseño permite adaptaciones para manejar paginación, caché de resultados y procesamiento por lotes según los requisitos específicos del proyecto.