定制 josantonius/mercadona-importer 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

josantonius/mercadona-importer

Composer 安装命令:

composer require josantonius/mercadona-importer

包简介

PHP command line interface (CLI) application to import products from Mercadona using their API.

README 文档

README

Latest Stable Version License Total Downloads CI PSR1 PSR4 PSR12

Aplicación PHP de interfaz de línea de comandos (CLI) para importar productos de Mercadona utilizando su API.

Requerimientos

  • Sistema operativo: Linux.
  • Versiones PHP: 8.1 | 8.2 | 8.3.
  • Docker (opcional)

Instalación

Clona el repositorio:

git clone https://github.com/josantonius/php-mercadona-importer.git

Accede al repositorio clonado:

cd php-mercadona-importer

Instala las dependencias:

composer install

O con Docker ejecutando:

make init

Uso

Revisa la configuración y ejecuta el script para iniciar la importación:

php mercadona-importer.php

O si prefieres usarlo con Docker, bastará con ejecutar:

make sync

Importación

Para cada detalle del producto se utiliza la siguiente estructura:

mixed value
array previous
int   timestamp

De esta manera los datos no se sobrescriben al actualizar los productos, permitiendo mantener un historial de cambios para cualquier detalle:

"unit_price": {
    "value": "7.90", // Valor actual
    "previous": [
        {
            "value": "7.40",  // Valor del día 20-01-2023
            "timestamp": 1674252044
        },
        {
            "value": "7.10",  // Valor del día 21-01-2023
            "timestamp": 1674338444
        }
    ],
    "timestamp": 1674511244 // 23-01-2023
}

EJEMPLO DE PRODUCTO IMPORTADO

Configuración

Puedes modificar las opciones de importación editando el archivo mercadona-importer.php situado en la raíz del proyecto:

new MercadonaImporter(
    warehouse: 'svq1',
    timezone: 'Europe/Madrid',
    delayForError: 300000000,
    delayForRequests: 1300000,
    includeFullProduct: false,
    reimportFullProduct: false,
    logDirectory: __DIR__ . '/logs/',
    outputDirectory: __DIR__ . '/products/',
);

warehouse

warehouse: 'svq1'

Mercadona muestra diferentes versiones de la tienda dependiendo de la ubicación de los usuarios. Para ello asigna un almacén según el código postal desde el que se acceda.

Esto implica que, según el almacén desde el que se importe:

  • El número de productos importados variará ya que dependerá de los que tengan habilitados.
  • Un mismo producto puede tener diferentes detalles (peso, precio...) según la ubicación.

Algunos identificadores de centros logísticos que se utilizan son:

  • 2343 - Murcia
  • 2749 - Lleida
  • 3532 - Valencia
  • 3947 - Tarragona
  • 3951 - Girona
  • 3996 - Barcelona
  • 4068 - Barcelona
  • 4069 - Barcelona
  • 4097 - Barcelona
  • 4230 - Navarra
  • 4267 - Álava
  • 4354 - Almería
  • 4385 - Castellón
  • 4416 - Girona
  • 4472 - Barcelona
  • 4558 - Castellón
  • 4697 - Álava
  • alc1 - Alicante y Murcia
  • bcn1 - Barcelona
  • mad1 - Madrid
  • mad2 - Madrid
  • svq1 - Sevilla, Cádiz y Huelva
  • vlc1 - Valencia

Otros identificadores de almacenes facilitados por Joel Taylor, creador de mercapy:

  • 2183, 2581, 2623, 3684, 3968, 4028, 4115, 4281
  • 4293, 4308, 4421, 4436, 4483, 4537, 4572, 4644

timezone

timezone: 'Europe/Madrid'

Se utiliza para la hora de los archivos de logs:

[2023-01-24T18:32:45.876599+01:00] LOG.INFO: Retomando la importación desde la categoría 163.

delayForError

delayForError: 300000000 // 300 segundos

Tiempo en microsegundos que se pausará la importación al recibir un error 429 por exceso de peticiones.

Importación error

delayForRequests

delayForRequests: 1300000 // 1,3 segundos

Intervalo en microsegundos en el que se realizarán las peticiones a la API de Mercadona.

includeFullProduct

includeFullProduct: false

Al importar una categoría se obtienen todos los productos de ella, sin embargo los productos tienen detalles resumidos. Si se activa esta opción, se importarán los detalles completos del producto en una sola ocasión (al agregarlo por primera vez o si no se hizo en importaciones anteriores).

IMPORTANTE - Activar esta opción aumenta considerablemente el número de peticiones que se realizan y el tiempo de ejecución, ya que si todos los productos son nuevos se realizará una petición por cada uno de ellos:

  • Importar con detalles resumidos: unas 150 peticiones y la importación dura unos 3-4 minutos.
  • Importar con detalles completos: más de 5000 peticiones y la importación dura más de 4 horas.

reimportFullProduct

reimportFullProduct: false

Fuerza la importación de los detalles completos del producto aunque se hubiese hecho anteriormente.

IMPORTANTE - Las mismas consideraciones que con la opción includeFullProduct.

logDirectory

logDirectory: __DIR__ . '/logs/'

Directorio donde se guardarán los logs.

outputDirectory

outputDirectory: __DIR__ . '/data/'

Directorio donde se guardarán los archivos importados.

Los productos se almacenan en formato JSON utilizando el ID del producto como nombre y se organizan por carpetas según el almacén que se utilice al importarlos:

/data/svq1/39922.json

/data/mad1/39922.json

/data/bcn1/39922.json

También se genera el archivo /data/product_mapping.json que contiene el catálogo completo de productos con información básica:

{
    "id": "39922",
    "ean": "8480000399229",
    "slug": "zumo-de-manzana",
    "name": "Zumo de manzana",
    "warehouses": ["svq1", "mad1", "bcn1"]
}

Pruebas

Run code standard tests with PHPCS:

composer phpcs

Run PHP Mess Detector tests to detect inconsistencies in code style:

composer phpmd

Run all previous tests:

composer tests

Tareas pendientes

  • Refactorizar la clase MercadonaImporter
  • Desarrollar pruebas unitarias y funcionales
  • Documentar métodos

Registro de Cambios

Los cambios detallados de cada versión se documentan en las notas de la misma.

Contribuir

Por favor, asegúrate de leer la guía de contribución, antes de hacer un pull request, comenzar una discusión o reportar un issue.

¡Gracias por colaborar! ❤️

Patrocinar

Si este proyecto te ayuda a reducir el tiempo de desarrollo, puedes patrocinarme para apoyar mi trabajo 😊

Licencia

Este repositorio tiene una licencia MIT License.

Copyright © 2023-present, Josantonius

josantonius/mercadona-importer 适用场景与选型建议

josantonius/mercadona-importer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 7 次下载、GitHub Stars 达 14, 最近一次更新时间为 2023 年 01 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「cli」 「mercadona-importer」 「mercadona-api」 「cli-script」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 josantonius/mercadona-importer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 josantonius/mercadona-importer 我们能提供哪些服务?
定制开发 / 二次开发

基于 josantonius/mercadona-importer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 14
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 14
  • Watchers: 1
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-01-25