josantonius / mercadona-importer
PHP 命令行界面 (CLI) 应用程序,用于通过 Mercadona API 导入产品。
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.5
- josantonius/cli-printer: ^1.0
- josantonius/json: ^2.0.8
- monolog/monolog: ^3.2
Requires (Dev)
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
README
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
每个产品细节都使用以下结构
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
- Murcia2749
- Lleida3532
- Valencia3947
- Tarragona3951
- Girona3996
- Barcelona4068
- Barcelona4069
- Barcelona4097
- Barcelona4230
- Navarra4267
- Álava4354
- Almería4385
- Castellón4416
- Girona4472
- Barcelona4558
- Castellón4697
- Álavaalc1
- Alicante y Murciabcn1
- Barcelonamad1
- Madridmad2
- Madridsvq1
- Sevilla, Cádiz y Huelvavlc1
- 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 错误(请求过多)时,导入将暂停的微秒数。
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