Skip to content

Instantly share code, notes, and snippets.

@jlgabriel
Last active January 6, 2024 23:10
Show Gist options
  • Save jlgabriel/358a285f4bd7ff410d7340803975a35b to your computer and use it in GitHub Desktop.
Save jlgabriel/358a285f4bd7ff410d7340803975a35b to your computer and use it in GitHub Desktop.
Script en Python que lee JSON de productos de tienda Jumpseller mediante el API y lo exporta como tabla en formatos Excel y CSV
import requests
import math
import pandas as pd
import flatten_json
# instalar flatten_json con: pip install flatten_json
# Referencia: https://github.com/amirziai/flatten
# parámetros
url_api_productos_contar = "https://api.jumpseller.com/v1/products/count.json"
url_api_productos = "https://api.jumpseller.com/v1/products.json"
header_api = {'Content-Type': 'application/json'}
# completar con los parámetros API de acceso a la tienda Jumpseller
parametros_contar = {"login": "",
"authtoken": ""}
# completar con los parámetros API de acceso a la tienda Jumpseller
parametros_productos = {"login": "",
"authtoken": "",
"limit": "100",
"page": "1"}
# para generar archivos Excel y CSV con columnas seleccionadas
encabezado_columnas = ["product_id",
"product_sku",
"product_name",
"product_permalink"]
# +++++ comienzo +++++
# obtener la cantidad total de productos y calcular el número de páginas a consultar con requests
respuesta_contar = requests.get(url_api_productos_contar, headers=header_api, params=parametros_contar)
conteo_productos = respuesta_contar.json()["count"]
print("Total de productos:", conteo_productos)
productos_paginas = math.ceil(conteo_productos / 100) # 100 productos por página, seleccionado en parámetro limit
print("Total de páginas:", productos_paginas)
# obtener los json con los datos de los productos
json_datos_completo = [] # lista para almacenar todos los json a descargar con requests
for pagina_actual in range(1, productos_paginas + 1):
parametros_productos["page"] = str(pagina_actual)
respuesta = requests.get(url_api_productos, headers=header_api, params=parametros_productos)
json_datos = respuesta.json()
json_datos_completo += json_datos
print("Leyendo página", pagina_actual, "...")
# aplanar la lista de jsons
json_datos_plano = [flatten_json.flatten(x) for x in json_datos_completo]
# crear DataFrame con los datos
df = pd.DataFrame(json_datos_plano) # los encabezados de las columnas se ordenan alfabéticamente (por defecto)
# guardar los datos en archivos Excel
print("Escribiendo archivos Excel...")
df.to_excel("productos.xlsx", index=False) # todas las columnas
df[encabezado_columnas].to_excel("productos_columnas.xlsx", index=False) # columnas seleccionadas
# guardar los datos en archivos CSV
print("Escribiendo archivos CSV...")
df.to_csv("productos.csv", index=False) # todas las columnas
df.to_csv("productos_columnas.csv", index=False, columns=encabezado_columnas) # columnas seleccionadas
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment