Rol
Ingeniería liderada por fundador
Fachada REST, caché y API de análisis
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
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.
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
Cada paso se puede razonar por separado: credenciales, payloads REST, construcción de caché, análisis local y extracción de taxonomías.
WPSiteInfo carga dominio, usuario y Application Password desde recursos de configuración o variables de entorno.
Los builders producen JSON con forma WordPress: status, post type, IDs de taxonomía y metadata de media.
La fachada maneja posts, cambios de estado, taxonomías, subida de media y lectura por ID con Application Password.
La metadata de caché registra los totales de paginación para que los syncs posteriores pidan solo lo necesario.
El analizador lee snapshots JSON para conteos, slugs, links, GUIDs, campos renderizados, categorías y tags sin HTTP.
Las utilidades de taxonomía mapean labels a IDs, agrupan marcadores por post y calculan frecuencias.
Evidencia de Código
Estos detalles muestran decisiones detrás del toolkit: forma del payload, metadata de caché, paralelismo interno y primitivas de análisis.
Payloads
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é
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
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
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
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
Problema
Cómo ayuda
Por qué importa
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
PowerWP4j aporta más cuando respeta WordPress como CMS y ofrece primitivas Java repetibles para operaciones de contenido y datos locales.
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.
Siempre estoy abierto a trabajo interesante. Saluda.
Estudio independiente. Open source.