josantonius/mercadona-importer

PHP 命令行界面 (CLI) 应用程序,用于通过 Mercadona API 导入产品。

v1.0.3 2024-05-20 10:37 UTC

This package is auto-updated.

Last update: 2024-09-21 17:29:59 UTC


README

Latest Stable Version License Total Downloads CI PSR1 PSR4 PSR12

PHP CLI 应用程序,用于使用 Mercadona API 导入产品。

需求

  • 操作系统:Linux。
  • PHP 版本:8.1 | 8.2 | 8.3。
  • Docker(可选)

安装

克隆仓库

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

访问克隆的仓库

cd php-mercadona-importer

安装依赖项

composer install

或使用 Docker 运行

make init

使用

检查配置并运行脚本以启动导入

php mercadona-importer.php

或如果您希望使用 Docker,只需运行

make sync

Importación

每个产品细节都使用以下结构

mixed value
array previous
int   timestamp

这样,在更新产品时不会覆盖数据,允许维护任何细节的更改历史

"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
}

导入的产品示例

配置

您可以通过编辑位于项目根目录的mercadona-importer.php文件来修改导入选项

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

仓库

warehouse: 'svq1'

Mercadona 根据用户的地理位置显示不同版本的商店。为此,根据用户访问的邮编分配一个仓库。

这意味着,根据导入的仓库

  • 导入的产品数量会有所不同,因为这取决于启用的产品。
  • 同一产品可能根据位置有不同的详细信息(重量、价格...)。

一些使用的物流中心标识符包括

  • 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

其他仓库标识符由Joel Taylor提供,他是mercapy的创建者:

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

timezone

timezone: 'Europe/Madrid'

用于日志文件的时区

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

delayForError

delayForError: 300000000 // 300 segundos

收到 429 错误(请求过多)时,导入将暂停的微秒数。

Importación error

delayForRequests

delayForRequests: 1300000 // 1,3 segundos

对 Mercadona API 进行请求的微秒间隔。

includeFullProduct

includeFullProduct: false

导入一个分类时,将获取所有产品,但产品只有简要详情。如果启用此选项,将只在一次(首次添加或之前未在导入中完成时)导入产品的完整详情

重要 - 启用此选项将显著增加请求数量和执行时间,因为如果所有产品都是新的,将为每个产品执行一个请求。

  • 以简要详情导入:约150个请求,导入时间约3-4分钟。
  • 以完整详情导入:超过5000个请求,导入时间超过4小时。

reimportFullProduct

reimportFullProduct: false

即使之前已导入,也强制导入产品的完整详情。

重要 - 与选项includeFullProduct相同的考虑事项。

logDirectory

logDirectory: __DIR__ . '/logs/'

日志将保存的目录。

outputDirectory

outputDirectory: __DIR__ . '/data/'

导入的文件将保存的目录。

产品以JSON格式存储,使用产品ID作为文件名,并根据导入时使用的仓库组织到文件夹中。

/data/svq1/39922.json

/data/mad1/39922.json

/data/bcn1/39922.json

还将生成包含完整产品目录及其基本信息/data/product_mapping.json文件。

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

测试

使用PHPCS运行代码标准测试。

composer phpcs

运行PHP Mess Detector测试以检测代码风格的不一致性。

composer phpmd

运行所有之前的测试。

composer tests

待办事项

  • 重构MercadonaImporter类。
  • 开发单元测试和功能测试。
  • 记录方法。

变更日志

每个版本的详细更改记录在版本注释中。

贡献

在进行拉取请求、开始讨论或报告问题之前,请务必阅读贡献指南

感谢您的贡献!❤️

赞助

如果这个项目帮助您减少了开发时间,您可以赞助我以支持我的工作 😊

许可证

此存储库受MIT许可证保护。

版权所有 © 2023-至今,Josantonius