定制 phpcfdi/sat-pys-scraper 二次开发

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

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

phpcfdi/sat-pys-scraper

Composer 安装命令:

composer require phpcfdi/sat-pys-scraper

包简介

Herramienta para obtener y generar un listado de las clasificaciones del catálogo de productos y servicios del SAT

README 文档

README

Source Code PHP Version Latest Version Software License Build Status Reliability Maintainability Code Coverage Violations Total Downloads Docker Downloads

Herramienta para obtener y generar un listado de las clasificaciones del catálogo de productos y servicios del SAT

🇺🇸 The documentation of this project is in Spanish, as this is the natural language for the intended audience.

Es posible que, lo único que buscas es el Listado de clasificaciones de productos y servicios del SAT, si es ese el caso, es mejor consumir el recurso phpcfdi/resources-pys, en donde el listado es actualizado automáticamente.

Acerca de phpcfdi/sat-pys-scraper

El SAT en el sitio de internet http://pys.sat.gob.mx/PyS/catPyS.aspx tiene publicada una clasificación de productos y servicios. Esta clasificación no pertenece oficialmente a los catálogos y no se encuentra publicada en ningún lugar.

Esta herramienta hace el scrap del sitio mencionado para obtener los 4 niveles de clasificación: Tipo, Segmento, Familia y Clase. Igualmente, la estructura se puede exportar como XML o como JSON.

Instalación usando composer

A diferencia de otras librerías o componentes, este proyecto es una herramienta, por lo que probablemente nunca tengas que instalar el proyecto como una dependencia. Sin embargo, se puede hacer para que realices la parte de obtener las clasificaciones del sitio del SAT, pero tú mismo te encargues de procesar la estructura y usarla para tus propios propósitos, como por ejemplo, almacenar en una base de datos.

composer require phpcfdi/sat-pys-scraper

Ejecución usando Docker

Este proyecto está integrado a Docker Hub phpcfdi/sat-pys-scraper por lo que puedes ejecutarlo desde la línea de comandos:

# obtener la imagen de docker
docker pull phpcfdi/sat-pys-scraper

# ejecución de la herramienta
docker docker run -it --rm --user="$(id -u):$(id -g)" sat-pys-scraper --help

Este proyecto provee un archivo Dockerfile para construir una imagen con todas sus dependencias.

Para más información y ejemplos consulte el archivo README.Docker.md.

Ayuda de sat-pys-scraper (script)

sat-pys-scraper - Crea un archivo con la clasificación de productos y servicios del SAT.

Sintaxis:
    sat-pys-scraper help|-h|--help
    sat-pys-scraper [--quiet|-q] [--json|-j JSON_FILE] [--xml|-x XML_FILE]

Argumentos:
    --xml|-x XML_FILE
        Establece el nombre de archivo, o "-" para la salida estándar, donde se envían
        los datos generados en formato XML.
    --json|-j JSON_FILE
        Establece el nombre de archivo, o "-" para la salida estándar, donde se envían
        los datos generados en formato JSON.
    --sort|-s SORT
        Establece el orden de elementos, default: key, se puede usar "key" o "name".
    --quiet|-q
        Modo de operación silencioso.

Notas:
    Debe especificar al menos un argumento "--xml" o "--json", o ambos.
    No se puede especificar "-" como salida de "--xml" y "--json" al mismo tiempo.

Acerca de:
    Este script pertenece al proyecto https://github.com/phpcfdi/sat-pys-scraper
    y mantiene la autoría y licencia de todo el proyecto.

Uso de la herramienta

Si usar el código de la herramienta, entonces es importante entender que la tarea trata de dos pasos:

  1. Obtener del sitio del SAT el listado de tipos, segmentos, familias y clases.
  2. Exportar el listado a un formato específico.

Para generar el listado de tipos, segmentos, familias y clases se usa el objeto Generator, que a su vez usa un objeto Scraper para realizar la descarga de información, que a su vez utiliza un objeto Client de GuzzleHttp.

En el siguiente ejemplo se muestra cómo generar la estructura e iterar sobre sus elementos.

  • Al ejecutar Generator::generate() se devuelve un objeto de tipo Types.
  • Se recorre la estructura con foreach.
  • Se puede exportar usando XmlExporter::export().
<?php
use GuzzleHttp\Client;
use PhpCfdi\SatPysScraper\Generator;
use PhpCfdi\SatPysScraper\Scraper;
use PhpCfdi\SatPysScraper\XmlExporter;

$scraper = new Scraper(new Client());
$generator = new Generator($scraper);
$types = $generator->generate();
$types->sortByKey();

foreach ($types as $type) {
    printf("Tipo: %s - %s\n", $type->key, $type->name);
    foreach ($type as $segment) {
        printf("  Segmento: %s - %s\n", $segment->key, $segment->name);
        foreach ($segment as $family) {
            printf("    Familia: %s - %s\n", $family->key, $family->name);
            foreach ($family as $class) {
                printf("      Clase: %s - %s\n", $class->key, $class->name);
            }
        }
    }
}

$exporter = new XmlExporter();
$exporter->export('output.xml', $types);

Tipos de datos

Un objeto Types es una colección iterable de objetos de tipo Type. Un objeto Type contiene las propiedades key y name, y además es una colección iterable de objetos de tipo Segment. Un objeto Segment contiene las propiedades key y name, y además es una colección iterable de objetos de tipo Family. Un objeto Family contiene las propiedades key y name, y además es una colección iterable de objetos de tipo Classification. Un objeto Classification solamente contiene las propiedades key y name.

Todos los objetos de datos implementan JsonSerializable, por lo que puedes usar esta característica para exportar a formato JSON.

Excepciones

La clase Scraper y -por consecuencia- también la clase Generator generan excepciones. En el caso de una excepción de tipo HTTP se tira una excepción HttpException. En el caso de una excepción HTTP y tenga un código de error del servicio remoto se tira una excepción HttpServerException.

La jerarquía de excepciones es:

- PysException (interface)
    - HttpException (class)
        - HttpServerException (class)

Soporte

Puedes obtener soporte abriendo un ticket en Github.

Adicionalmente, esta librería pertenece a la comunidad PhpCfdi, así que puedes usar los canales oficiales de comunicación para obtener ayuda de la comunidad.

Compatibilidad

Esta librería se mantendrá compatible con al menos la versión con soporte activo de PHP más reciente.

También utilizamos Versionado Semántico 2.0.0 por lo que puedes usar esta librería sin temor a romper tu aplicación.

Versión PHP Nota
1.0.0 8.2, 8.3 2023-12-13 Fuera de mantenimiento
2.0.0 8.2, 8.3 2024-03-07 Fuera de mantenimiento
3.0.0 8.2, 8.3 2024-03-07 Fuera de mantenimiento
4.0.0 8.2, 8.3, 8.4 2024-10-17 Fuera de mantenimiento
5.0.0 8.3, 8.4 2025-11-13

Contribuciones

Las contribuciones con bienvenidas. Por favor lee CONTRIBUTING para más detalles y recuerda revisar el archivo de tareas pendientes TODO y el archivo CHANGELOG.

Copyright and License

The phpcfdi/sat-pys-scraper tool is copyright © PhpCfdi and licensed for use under the MIT License (MIT). Please see LICENSE for more information.

phpcfdi/sat-pys-scraper 适用场景与选型建议

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

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

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

围绕 phpcfdi/sat-pys-scraper 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 10
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 6
  • 点击次数: 18
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 6
  • Watchers: 3
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-12-14