Toolkit Java 21 Open Source

PowerWP4j: acciones vivas en CMS, inteligencia offline de contenido.

Un caso técnico sobre separar automatización WordPress REST de análisis de caché reproducible: payloads tipados, sync con metadata y señales de taxonomía para auditorías o pipelines de datos.

Rol

Ingeniería liderada por fundador

Fachada REST, caché y API de análisis

Tipo

Toolkit open source

Automatización WordPress REST y análisis

Estado

Alpha / 0.1.0

Útil hoy, en evolución hacia 1.0

Stack

Java 21

Maven, Jackson 3, Tika, SLF4J

Evidencia

54 pruebas

Builders, caché, análisis y query params

Licencia

Apache 2.0

Tooling independiente para WordPress

Problema

WordPress es un buen CMS. No debería ser también la dependencia viva de cada reporte.

La separación arquitectónica es lo importante: las operaciones REST siguen explícitas, mientras reportes y análisis de taxonomías pasan a snapshots locales deterministas.

ContentWorkflow.java vivo + offline
WPRestClient.of(siteInfo).createPost(payload);

WPCacheManager cache = new WPCacheManager(siteInfo, cachePath);
// overwriteCache: reconstruye el snapshot JSON local
// ignoreSSLHandshakeException: mantiene TLS activo
cache.fetchCacheFromInstancePath(true, false);
cache.cacheSync();

WPCacheAnalyzer analyzer = cache.getCacheAnalyzer();
long tags = analyzer.getTagCount();

Flujo

El toolkit mantiene operaciones vivas y análisis offline conectados, no mezclados.

Cada paso se puede razonar por separado: credenciales, payloads REST, construcción de caché, análisis local y extracción de taxonomías.

  1. 01 WPSiteInfo

    Configurar sitio

    WPSiteInfo carga dominio, usuario y Application Password desde recursos de configuración o variables de entorno.

  2. 02 WPBasicPayloadBuilder

    Construir payload

    Los builders producen JSON con forma WordPress: status, post type, IDs de taxonomía y metadata de media.

  3. 03 WPRestClient

    Ejecutar REST

    La fachada maneja posts, cambios de estado, taxonomías, subida de media y lectura por ID con Application Password.

  4. 04 WPCacheManager

    Crear y sincronizar caché

    La metadata de caché registra los totales de paginación para que los syncs posteriores pidan solo lo necesario.

  5. 05 WPCacheAnalyzer

    Analizar offline

    El analizador lee snapshots JSON para conteos, slugs, links, GUIDs, campos renderizados, categorías y tags sin HTTP.

  6. 06 WPClassMapping

    Extraer señales

    Las utilidades de taxonomía mapean labels a IDs, agrupan marcadores por post y calculan frecuencias.

Evidencia de Código

Lo que la implementación vuelve visible.

Estos detalles muestran decisiones detrás del toolkit: forma del payload, metadata de caché, paralelismo interno y primitivas de análisis.

Payloads

Los builders serializan llamadas Java en JSON compatible con WordPress.

Fuente

builders/WPBasicPayloadBuilder.java

WPBasicPayloadBuilder.builder()
    .title("Test")
    .commentStatus(WPCommentStatus.OPEN)
    .status(WPStatus.PUBLISH)
    .build();

// expectativa en pruebas
"comment_status": "open"

Lectura

Esta corrección poco vistosa es clave en integraciones: el cliente escribe Java, WordPress recibe los nombres de campo esperados.

Metadata de caché

La caché tiene un contrato de metadata en lugar de inferir frescura solo por el JSON.

Fuente

engine/WPCacheMeta.java

long wpTotal = Long.parseLong(
    headers.get("x-wp-total").getFirst()
);
long wpTotalPages = Long.parseLong(
    headers.get("x-wp-totalpages").getFirst()
);

LocalDate fetchedAtUtc =
    LocalDate.ofInstant(Instant.now(), ZoneOffset.UTC);

WPCacheMeta metadata =
    new WPCacheMeta(wpTotalPages, wpTotal, fetchedAtUtc);

Lectura

PowerWP4j guarda lo que WordPress declara sobre el dataset, haciendo explicable la sincronización incremental.

Paginación

El fetch paginado se paraleliza sin volver asíncrona la API pública.

Fuente

services/HttpRequestService.java

ExecutorService executor =
    Executors.newVirtualThreadPerTaskExecutor();

HttpClient client = HttpClient.newBuilder()
    .version(HttpClient.Version.HTTP_2)
    .executor(executor)
    .build();

Lectura

La implementación usa Java 21 donde aporta valor interno, pero conserva un flujo simple para quien consume la librería.

Taxonomías

El analizador convierte class markers de WordPress en señales estructuradas.

Fuente

engine/WPCacheAnalyzer.java

analyzer.mapWPClassId(
    tag -> tag.replaceFirst("^tag-", "")
        .replaceAll("[^a-zA-Z0-9]", " ")
        .trim(),
    TaxonomyMarker.TAG,
    TaxonomyValues.TAGS);

analyzer.groupPostIdsByClassMarker(
    TaxonomyMarker.TAG,
    TaxonomyValues.TAGS);

analyzer.calculateTermFrequencyByClassValue(
    TaxonomyValues.TAGS,
    new WPClassMapping<>("tag-veniam", 36L));

Lectura

El valor profundo no es solo publicar: es volver la metadata de contenido útil para auditorías, reportes y modelos.

Casos de Uso

Dónde PowerWP4j sirve después de que la primera llamada REST ya funciona.

Estos escenarios conectan la mecánica de la librería con flujos concretos: publicación, reportes desde caché, análisis de taxonomías y estandarización multi-sitio.

Caso de uso

Automatización editorial

Problema

Crear borradores, asignar taxonomías, cambiar estados y actualizar media se vuelve trabajo repetitivo de dashboard.

Cómo ayuda

PowerWP4j expresa esas acciones como payloads Java y llamadas de fachada con Application Password.

Por qué importa

Las operaciones editoriales pueden pasar a automatización revisable sin reemplazar WordPress.

Caso de uso

Auditoría y reportes de contenido

Problema

Una auditoría no debería cargar el CMS vivo ni cambiar según la hora en que se ejecuta el reporte.

Cómo ayuda

Una caché JSON fija permite inspeccionar slugs, links, GUIDs, categorías, tags y contenido renderizado localmente.

Por qué importa

Los reportes se vuelven reproducibles, versionables y fáciles de comparar en el tiempo.

Caso de uso

Preparación de datos y ML

Problema

El contenido y sus taxonomías necesitan convertirse en señales estructuradas antes de alimentar clasificadores o recomendadores.

Cómo ayuda

El mapeo, agrupación y frecuencia de taxonomías convierte marcadores e IDs de términos en features explícitas.

Por qué importa

El CMS pasa a ser una fuente de datos inspeccionable, no una dependencia viva en cada experimento.

Caso de uso

Operaciones multi-sitio

Problema

Varios sitios WordPress necesitan automatización consistente, aunque cada uno tenga post types o taxonomías propias.

Cómo ayuda

Los enums de extensión y la configuración por sitio permiten estandarizar flujos sin borrar vocabularios específicos.

Por qué importa

Un mismo tooling puede servir varios sitios sin hardcodear la estructura de uno solo.

Límites

El alcance está centrado en automatización y análisis.

PowerWP4j aporta más cuando respeta WordPress como CMS y ofrece primitivas Java repetibles para operaciones de contenido y datos locales.

Diseñado para

  • Servicios Java que automatizan operaciones WordPress REST.
  • Auditorías offline de contenido desde snapshots JSON portables.
  • Análisis de taxonomías y metadata para reportes o preparación ML.
  • Proyectos que necesitan contratos extensibles para campos custom de posts y caché.

No diseñado para

  • Reemplazar WordPress como CMS o capa de renderizado público.
  • Cubrir cada función administrativa de WordPress.
  • Sincronización automática en tiempo real.
  • Componentes UI, tooling CLI o un framework HTTP de propósito general.

Estado

Alpha 0.1.0: las ideas centrales son utilizables, pero firmas y límites de paquetes pueden cambiar antes de 1.0.

Independencia

PowerWP4j es un proyecto independiente Apache 2.0 de YGBStudio. No está afiliado ni respaldado por WordPress.org.

Si te gusta lo que ves

Siempre estoy abierto a trabajo interesante. Saluda.

Estudio independiente. Open source.